Jump to content
Калькуляторы

Linux 3.18

Какие интересные изменения в сетевой подсистеме нового ядра.

 

В сетевую подсистему внесены оптимизации, направленные на увеличение производительности пакетной передачи данных. Изменения особенно заметны при обработке большого объёма мелких пакетов. Производительность повышена за счёт организации групповых операций блокировки очереди, а также заполнения/очистки очереди и взаимодействия с драйвером сетевой карты не на уровне отдельных пакетов, а манипулируя порциями пакетов. Внесённые изменения позволяют добиться обработки полной пропускной способности высокоскоростных сетевых интерфейсов даже на относительно слабом оборудовании (например, на обычном компьютере продемонстрирована обработка потока в 40 гбит/сек), даже если в трафике преобладают пакеты небольшого размера;

http://www.opennet.ru/opennews/art.shtml?num=41210

Share this post


Link to post
Share on other sites

посмотрите коммиты, относящиеся к сети, но не относящиеся к конкретным драйверам. не так уж и сложно это сделать

Share this post


Link to post
Share on other sites

Разработчикам удалось добиться wirespeed TX @ 10 Gbit/s на одном ядре современного CPU, но только в случае генерации пакетов модулем pktgen.ko. В forwarding case не все так радужно, но тоже должно стать лучше. Наверное...

Share this post


Link to post
Share on other sites

Крутота! От 40 гигабит на пустом месте становится тепло и приятно на душе! :)

Share this post


Link to post
Share on other sites

Парни, отпишитесь, как ядро кто трогал?

+1 тоже хотелось бы знать, стоит переходить или нет

Share this post


Link to post
Share on other sites

Они бы лучше RCV_LOWAT допилили наконец, это много где может уронить уронить нагрузку на проц в разы.

Share this post


Link to post
Share on other sites

+1 тоже хотелось бы знать, стоит переходить или нет

 

Я потрогал, NAT и firewall, никаких особых изменений не заметил. Проапгрейдился, т.к. на этом сервере был 3.14, и случались изредка ребуты.

Надо будет пощупать с шейперами.

Share this post


Link to post
Share on other sites

Вопрос даже не в том, компилится ли 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);

 

Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности.

Share this post


Link to post
Share on other sites

Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности.

Если использовать родной драйвер (который идет с ядром, а не с Sourceforge) то там это уже реализовано.

Share this post


Link to post
Share on other sites

Вот когда это будет в драйвере, стоит и ожидать кардинального и прироста производительности.

Если использовать родной драйвер (который идет с ядром, а не с Sourceforge) то там это уже реализовано.

 

ООО, круто! Получается же что он самый новый. Зачем тогда дрова с SF тащить по крайне мере сейчас? Ведь ядреный самый новый получается на данный момент.

Share this post


Link to post
Share on other sites

Ведь ядреный самый новый получается на данный момент.

Ну да, и опций-то модуль принимает чуть больше чем одну полезную ;)

 

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)

 

Share this post


Link to post
Share on other sites

Не удалось откомпилить драйвера 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#

 

Share this post


Link to post
Share on other sites

Как ни странно, но ndo_xmit_flush (который и анонсирует ядру "я умею обработку кучи пакетов одним блоком") так и нету в новом ixgbe драйвере (3.23.2.1), который вышел 23го февраля. Может кто пнет Intel? Это реально сильно ускорит обработку трафика на Линукс боксах.

Share this post


Link to post
Share on other sites

В общем, я забил фич риквест на Сорсфорже, https://sourceforge.net/p/e1000/feature-requests/20/ плюсуем и комментируем, чтобы доказать заинтересованность :) Даешь прокачку роутинга!

Share this post


Link to post
Share on other sites

А разве на стоковом драйвера из ядра сработает опция options ixgbe allow_unsupported_sfp ?

Share this post


Link to post
Share on other sites

Как ни странно, но 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.

 

Ну и в ссылке на мейл лист активно обсуждается регрессия при применении предложеного патча... ;)

Share this post


Link to post
Share on other sites

Производительность повышена за счёт организации групповых операций блокировки очереди, а также заполнения/очистки очереди и взаимодействия с драйвером сетевой карты не на уровне отдельных пакетов, а манипулируя порциями пакетов.

Не читайте 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/ вроде как отношения к дровам вообще не имеет - затрагивает только само ядро.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this