ThreeDHead Posted December 9, 2014 Posted December 9, 2014 Какие интересные изменения в сетевой подсистеме нового ядра. В сетевую подсистему внесены оптимизации, направленные на увеличение производительности пакетной передачи данных. Изменения особенно заметны при обработке большого объёма мелких пакетов. Производительность повышена за счёт организации групповых операций блокировки очереди, а также заполнения/очистки очереди и взаимодействия с драйвером сетевой карты не на уровне отдельных пакетов, а манипулируя порциями пакетов. Внесённые изменения позволяют добиться обработки полной пропускной способности высокоскоростных сетевых интерфейсов даже на относительно слабом оборудовании (например, на обычном компьютере продемонстрирована обработка потока в 40 гбит/сек), даже если в трафике преобладают пакеты небольшого размера; http://www.opennet.ru/opennews/art.shtml?num=41210 Вставить ник Quote
s.lobanov Posted December 9, 2014 Posted December 9, 2014 посмотрите коммиты, относящиеся к сети, но не относящиеся к конкретным драйверам. не так уж и сложно это сделать Вставить ник Quote
Умник Posted December 9, 2014 Posted December 9, 2014 Разработчикам удалось добиться wirespeed TX @ 10 Gbit/s на одном ядре современного CPU, но только в случае генерации пакетов модулем pktgen.ko. В forwarding case не все так радужно, но тоже должно стать лучше. Наверное... Вставить ник Quote
ThreeDHead Posted December 10, 2014 Author Posted December 10, 2014 Подробностей: http://www.linux.com/news/software/linux-kernel/798276-linux-318-4-reasons-to-love-a-diseased-newt http://lwn.net/Articles/615238/ Вставить ник Quote
pavel.odintsov Posted December 11, 2014 Posted December 11, 2014 Крутота! От 40 гигабит на пустом месте становится тепло и приятно на душе! :) Вставить ник Quote
Igor Diakonov Posted December 11, 2014 Posted December 11, 2014 Сферические 40 гбит в вакууме :) Вставить ник Quote
Dark_Angel Posted December 11, 2014 Posted December 11, 2014 Парни, отпишитесь, как ядро кто трогал? Вставить ник Quote
Antares Posted December 11, 2014 Posted December 11, 2014 Парни, отпишитесь, как ядро кто трогал? +1 тоже хотелось бы знать, стоит переходить или нет Вставить ник Quote
Ivan_83 Posted December 11, 2014 Posted December 11, 2014 Они бы лучше RCV_LOWAT допилили наконец, это много где может уронить уронить нагрузку на проц в разы. Вставить ник Quote
nuclearcat Posted December 12, 2014 Posted December 12, 2014 +1 тоже хотелось бы знать, стоит переходить или нет Я потрогал, NAT и firewall, никаких особых изменений не заметил. Проапгрейдился, т.к. на этом сервере был 3.14, и случались изредка ребуты. Надо будет пощупать с шейперами. Вставить ник Quote
ThreeDHead Posted December 15, 2014 Author Posted December 15, 2014 Не удалось откомпилить драйвера ixgbe под 3.18 Вставить ник Quote
telecom Posted December 15, 2014 Posted December 15, 2014 Не удалось откомпилить драйвера ixgbe под 3.18 http://sourceforge.net/p/e1000/bugs/443/ Вставить ник Quote
pavel.odintsov Posted December 15, 2014 Posted December 15, 2014 Вопрос даже не в том, компилится ли ixgbe или нет. Вопрос скорее в том, когда они (Intel и прочие производители дров) добавят основную фичу в драйверы: The initial plan for 3.18 was to specify a new function that drivers could provide: void (*ndo_xmit_flush)(struct net_device *dev, u16 queue); Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности. Вставить ник Quote
Умник Posted December 15, 2014 Posted December 15, 2014 Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности. Если использовать родной драйвер (который идет с ядром, а не с Sourceforge) то там это уже реализовано. Вставить ник Quote
pavel.odintsov Posted December 15, 2014 Posted December 15, 2014 Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности. Если использовать родной драйвер (который идет с ядром, а не с Sourceforge) то там это уже реализовано. ООО, круто! Получается же что он самый новый. Зачем тогда дрова с SF тащить по крайне мере сейчас? Ведь ядреный самый новый получается на данный момент. Вставить ник Quote
ThreeDHead Posted December 15, 2014 Author Posted December 15, 2014 Ведь ядреный самый новый получается на данный момент. Ну да, и опций-то модуль принимает чуть больше чем одну полезную ;) filename: /lib/modules/3.18.0-031800-lowlatency/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko version: 3.19.1-k license: GPL description: Intel® 10 Gigabit PCI Express Network Driver author: Intel Corporation, <linux.nics@intel.com> srcversion: F9275BC210EF2A95410F915 alias: pci:v00008086d00001560sv*sd*bc*sc*i* ... alias: pci:v00008086d000010B6sv*sd*bc*sc*i* depends: mdio,ptp,dca intree: Y vermagic: 3.18.0-031800-lowlatency SMP preempt mod_unload modversions signer: Magrathea: Glacier signing key sig_key: 1E:6F:05:64:FA:C6:BD:B0:09:A7:AC:4B:C1:FC:7C:1E:51:4F:4C:C3 sig_hashalgo: sha512 parm: max_vfs:Maximum number of virtual functions to allocate per physical function - default is zero and maximum value is 63. (Deprecated) (uint) parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599-based adapters (uint) parm: debug:Debug level (0=none,...,16=all) (int) Против Интеловского: filename: /lib/modules/3.16.2-031602-generic/kernel/drivers/net/ethernet/intel/ixgbe/ixgbe.ko version: 3.22.3 license: GPL description: Intel® 10 Gigabit PCI Express Network Driver author: Intel Corporation, <linux.nics@intel.com> srcversion: 46A1D1E98D09F1B499E601E alias: pci:v00008086d00001560sv*sd*bc*sc*i* ... alias: pci:v00008086d000010B6sv*sd*bc*sc*i* depends: ptp,dca vermagic: 3.16.2-031602-generic SMP mod_unload modversions parm: InterruptType:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default IntMode (deprecated) (array of int) parm: IntMode:Change Interrupt Mode (0=Legacy, 1=MSI, 2=MSI-X), default 2 (array of int) parm: MQ:Disable or enable Multiple Queues, default 1 (array of int) parm: DCA:Disable or enable Direct Cache Access, 0=disabled, 1=descriptor only, 2=descriptor and data (array of int) parm: RSS:Number of Receive-Side Scaling Descriptor Queues, default 0=number of cpus (array of int) parm: VMDQ:Number of Virtual Machine Device Queues: 0/1 = disable, 2-16 enable (default=8) (array of int) parm: max_vfs:Number of Virtual Functions: 0 = disable (default), 1-63 = enable this many VFs (array of int) parm: VEPA:VEPA Bridge Mode: 0 = VEB (default), 1 = VEPA (array of int) parm: InterruptThrottleRate:Maximum interrupts per second, per vector, (0,1,956-488281), default 1 (array of int) parm: LLIPort:Low Latency Interrupt TCP Port (0-65535) (array of int) parm: LLIPush:Low Latency Interrupt on TCP Push flag (0,1) (array of int) parm: LLISize:Low Latency Interrupt on Packet Size (0-1500) (array of int) parm: LLIEType:Low Latency Interrupt Ethernet Protocol Type (array of int) parm: LLIVLANP:Low Latency Interrupt on VLAN priority threshold (array of int) parm: FdirPballoc:Flow Director packet buffer allocation level: 1 = 8k hash filters or 2k perfect filters 2 = 16k hash filters or 4k perfect filters 3 = 32k hash filters or 8k perfect filters (array of int) parm: AtrSampleRate:Software ATR Tx packet sample rate (array of int) parm: FCoE:Disable or enable FCoE Offload, default 1 (array of int) parm: LRO:Large Receive Offload (0,1), default 1 = on (array of int) parm: allow_unsupported_sfp:Allow unsupported and untested SFP+ modules on 82599 based adapters, default 0 = Disable (array of int) Вставить ник Quote
ThreeDHead Posted December 15, 2014 Author Posted December 15, 2014 Не удалось откомпилить драйвера ixgbe под 3.18 http://sourceforge.net/p/e1000/bugs/443/ Собственно не поэтому не компилится: root@iperf:/services/install/ixgbe-3.22.3/src# uname -a Linux iperf 3.18.0-031800-lowlatency #201412071935 SMP PREEMPT Mon Dec 8 00:44:40 UTC 2014 x86_64 GNU/Linux root@iperf:/services/install/ixgbe-3.22.3/src# make make -C /lib/modules/3.18.0-031800-lowlatency/build SUBDIRS=/services/install/ixgbe-3.22.3/src modules make[1]: вход в каталог «/usr/src/linux-headers-3.18.0-031800-lowlatency» CC [M] /services/install/ixgbe-3.22.3/src/ixgbe_main.o /services/install/ixgbe-3.22.3/src/ixgbe_main.c: In function ‘ixgbe_service_event_complete’: /services/install/ixgbe-3.22.3/src/ixgbe_main.c:319:2: error: implicit declaration of function ‘smp_mb__before_clear_bit’ [-Werror=implicit-function-declaration] smp_mb__before_clear_bit(); ^ cc1: some warnings being treated as errors scripts/Makefile.build:257: ошибка выполнения рецепта для цели «/services/install/ixgbe-3.22.3/src/ixgbe_main.o» make[2]: *** [/services/install/ixgbe-3.22.3/src/ixgbe_main.o] Ошибка 1 Makefile:1381: ошибка выполнения рецепта для цели «_module_/services/install/ixgbe-3.22.3/src» make[1]: *** [_module_/services/install/ixgbe-3.22.3/src] Ошибка 2 make[1]: выход из каталога «/usr/src/linux-headers-3.18.0-031800-lowlatency» Makefile:284: ошибка выполнения рецепта для цели «default» make: *** [default] Ошибка 2 root@iperf:/services/install/ixgbe-3.22.3/src# Вставить ник Quote
pavel.odintsov Posted December 15, 2014 Posted December 15, 2014 Ох, да, Ваша правда, кастрат какой-то :) Вставить ник Quote
nuclearcat Posted December 15, 2014 Posted December 15, 2014 "ошибка выполнения рецепта для цели" !!! Вставить ник Quote
pavel.odintsov Posted February 28, 2015 Posted February 28, 2015 Как ни странно, но ndo_xmit_flush (который и анонсирует ядру "я умею обработку кучи пакетов одним блоком") так и нету в новом ixgbe драйвере (3.23.2.1), который вышел 23го февраля. Может кто пнет Intel? Это реально сильно ускорит обработку трафика на Линукс боксах. Вставить ник Quote
pavel.odintsov Posted February 28, 2015 Posted February 28, 2015 В общем, я забил фич риквест на Сорсфорже, https://sourceforge.net/p/e1000/feature-requests/20/ плюсуем и комментируем, чтобы доказать заинтересованность :) Даешь прокачку роутинга! Вставить ник Quote
roysbike Posted March 1, 2015 Posted March 1, 2015 А разве на стоковом драйвера из ядра сработает опция options ixgbe allow_unsupported_sfp ? Вставить ник Quote
ThreeDHead Posted March 1, 2015 Author Posted March 1, 2015 А разве на стоковом драйвера из ядра сработает опция options ixgbe allow_unsupported_sfp ? Да должно http://forum.nag.ru/forum/index.php?showtopic=99541&view=findpost&p=1051516 Вставить ник Quote
Igor Diakonov Posted March 3, 2015 Posted March 3, 2015 Как ни странно, но ndo_xmit_flush (который и анонсирует ядру "я умею обработку кучи пакетов одним блоком") так и нету в новом ixgbe драйвере (3.23.2.1), который вышел 23го февраля. Может кто пнет Intel? Это реально сильно ускорит обработку трафика на Линукс боксах. this particular function was ripped out almost as soon as it landed in the net-next repository. In its place, the sk_buff structure has gained a new Boolean variable called xmit_more. Ну и в ссылке на мейл лист активно обсуждается регрессия при применении предложеного патча... ;) Вставить ник Quote
Igor Diakonov Posted March 3, 2015 Posted March 3, 2015 Производительность повышена за счёт организации групповых операций блокировки очереди, а также заполнения/очистки очереди и взаимодействия с драйвером сетевой карты не на уровне отдельных пакетов, а манипулируя порциями пакетов. Не читайте opennet...читайте оригинальную статью. the process of validating packets for transmission could be moved outside of the queue lock entirely, increasing concurrency in the system. The resulting patch had benefits that Eric described as awesome: full 40Gb/sec wire speed, even in the absence of segmentation offload. Needless to say, this patch, too, has been accepted into the net-next tree for the 3.18 merge window. Патч http://lwn.net/Articles/615243/ вроде как отношения к дровам вообще не имеет - затрагивает только само ядро. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.