2012-03-28 3 views
1

Как измерить скорость обмена данными через AF_UNIX розетки? Можно ли написать некоторые два Баш скрипты:Измерение скорости локальных сокетов?

  • Первый создает сокет, привязать сокет к локальному адресу, принять соединение и получить все данные /dev/null.
  • Второй создает розетку, устанавливает соединение с уже открытым сокетом и порождает некоторое устройство в /dev, чтобы можно было измерить скорость с помощью команды dd?

ответ

5

Вы можете использовать netcat -U, чтобы легко обмениваться данными через сокеты домена unix. Команда pv пригодится, когда вы хотите узнать скорость, с которой данные перемещаются по трубе.

приемник:

nc -lU /tmp/socket > /dev/null 

Отправитель:

pv /dev/zero | nc -U /tmp/socket 

В общем, UNIX сокеты действительно быстро. Это было на 170 Мбайт/с на моем старом ноутбуке и 400 Мбайт/с на моем несколько более новом рабочем столе.

+0

Я измерил скорость передачи данных со следующими командами: '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. –

+0

Прохладный. Я считаю, что самым большим ограничивающим фактором является то, насколько быстро ваша оперативная память. – alberge

2

Хотя это не сценарий, это базовый код 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.

+0

Благодарим вас за помощь. –

Смежные вопросы