Комментарии 19
это всё хорошо, но сейчас netmap-enabled драйверов в freebsd всего 5 штук =(
В моих тестах всё сильно зависит от используемого драйвера. Если драйвер умеет использовать несколько ядер (ixgb, ixgbe), то всё хорошо. Если не умеет (e1000), то всё плохо.
В линуксах есть pktgen (модуль ядра), который способен срать со скоростью среды (точнее, со скоростью сетевухи).
В линуксах есть pktgen (модуль ядра), который способен срать со скоростью среды (точнее, со скоростью сетевухи).
По идее e1000 умеет работать на скоростях не больше 1Gbit/s. Если учесть, что, только на одном ядре, netmap поднимает пакеты из кабеля в userspace со скоростью 14Mpps (10Gbp/s), есть ли смысл драйверу поддерживать многоядерность?
На мелких пакетах (512 бит) это почти 2Mpps, а e1000 столько не выжимает. Печалька.
Если я правильно помню, размер самого мелкого ethernet-пакета может быть не менее 84 байт.
1. Interframe gap — 12 байт
2. Preamble — 8 байт
3. DST + SRC MAC — 12 байт
4. Ether type — 2 байта
5. Payload — 46 байт минимум
6. CRC — 4 байта
Итого: 84 байта или 672 бита
Получается, если нет коллизий, через 1Gbit/s = 1 073 741 824 bit/s, можно прокачать 1.5 Mpps (1 597 830).
Думаю, что создатель Netmap Luigi Rizzo, просто не стал заморачиваться поддержкой многоядерности, т.к. на одном 900Mhz ядре он поднимает в userspace целых 14Mpps.
1. Interframe gap — 12 байт
2. Preamble — 8 байт
3. DST + SRC MAC — 12 байт
4. Ether type — 2 байта
5. Payload — 46 байт минимум
6. CRC — 4 байта
Итого: 84 байта или 672 бита
Получается, если нет коллизий, через 1Gbit/s = 1 073 741 824 bit/s, можно прокачать 1.5 Mpps (1 597 830).
Думаю, что создатель Netmap Luigi Rizzo, просто не стал заморачиваться поддержкой многоядерности, т.к. на одном 900Mhz ядре он поднимает в userspace целых 14Mpps.
Если не умеет (e1000), то всё плохо.
не знаю, насчёт e1000, но у меня igb в linux спокойно выдаёт 1.48mpps одним ядром.
В линуксах есть pktgen (модуль ядра), который способен срать со скоростью среды (точнее, со скоростью сетевухи).
увы, всё сильно зависит от сетевухи. на r8169 и sky2 цифры удручающие.
igb совсем другой расклад. Кстати, откуда «одно ядро»? igb размазывается по всем ядрам по-умолчанию.
em (e1000) не умеет 1.48 мппс.
на 600к-800к начинает задыхаться и не важно какие настройки…
на 600к-800к начинает задыхаться и не важно какие настройки…
ну я даже не знаю. у меня e1000e, 82572EI выдал 1.2mpps на одном ядре.
на 82545 делал 1,1
на 82571 и выше — 1,48
на 82571 и выше — 1,48
vendor=0x8086 device=0x1096 subvendor=0x108e subdevice=0x4843 class=0x020000
Вот такое чудо, на интеловском сайте найти не могу, полагаю магия Sun Microsystems.
Вот такое чудо, на интеловском сайте найти не могу, полагаю магия Sun Microsystems.
искать нужно по чипу, например:
В ряду шифровок нас интересует chip=0x10d38086, который декодируется согласно данных с сайта производителя — www.intel.com/support/network/sb/CS-012904.htm. Первые четыре цифры это DevID(10d3), вторые четыре VendorID(8086).
# pciconf -lv | more
...
none0@pci0:1:0:0: class=0x020000 card=0x10d315d9 chip=0x10d38086 rev=0x00 hdr=0x00
...
В ряду шифровок нас интересует chip=0x10d38086, который декодируется согласно данных с сайта производителя — www.intel.com/support/network/sb/CS-012904.htm. Первые четыре цифры это DevID(10d3), вторые четыре VendorID(8086).
А код, код? Ниужели не поделитесь?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Демонстрация возможностей высокоростной обработки IP-пакетов, на примере простого DDOS-фильтра, разработанного на базе фреймворка NETMAP