Хотя это не сценарий, это базовый код C, который я использовал для количественной оценки скорости данных сокетов с использованием стандартных сокетов TCP (в случае, если вам действительно нужно проверить уровень сокета, а не только общую пропускную способность) , В принципе, он записывает 1K ... 16M капли данных в 1K кусках.
for (int i=0; i<15; i++)
{
if ((fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) > 0)
{
timenode node;
clock_gettime(CLOCK_REALTIME, &node.ts);
if (connect(fd, (struct sockaddr *) &sa, sizeof(sa)) == 0)
{
int n = 0;
int wb = 1024<<i;
while ((wb-n)>0)
{
n+=send(fd, buf, sizeof(buf), 0);
}
}
do_ts(node.ts, wtn[i], wavg[i]);
close(fd);
}
}
Как ни странно, я был в состоянии видеть, что по ссылке 1Gbps, я был в состоянии получить около 110 Мбайт/с пропускными (125 МБ/с теоретическим максимум), пока я не добрался до отправки 4+ МБ данных ... тогда он получил дросселирование до ~ 1 МБ/с ... из-за противодавления, вызванного внутренней проблемой коммутатора Ethernet.
Я измерил скорость передачи данных со следующими командами: 'while (true); do rm socket; nc -lU socket>/dev/null; done' и 'dd if =/dev/zero bs = $ BS | nc -U socket'. Я пробовал следующие размеры блоков: '128, 256, 512, 1k, 2k, 4k, 8k, 16k и 32k'. Лучшее исполнение было «201 МБ/сек» с размером блока «16k» на моем «i3» с «2GB» RAM. –
Прохладный. Я считаю, что самым большим ограничивающим фактором является то, насколько быстро ваша оперативная память. – alberge