AlKov Posted June 17, 2010 Posted June 17, 2010 Дано: сервер INTEL SR1600UR, 2 х Xeon E5503 2.00GHz, 6Гб RAM, сетевые карты - гигабитная 2-х портовая PCI-ex Intel 82576. ОС - CentOS 5.5, собрано с ядром 2.6.34, iptables 1.4.8, драйвер на сетевую - igb 2.2.9 Задача железки: 1. роутинг 2. NAT 3. фаервол. Интересует тюнинг ядра (sysctl) и сетевой подсистемы в свете поставленной задачи и с учетом дальнейшего роста. Предположительная нагрузка: трафик ~200 Мбит при ~50-60 Kpps NAT ~ 1000-1500 он-лайн соединений. Плюс ко всему прочему будет RIP на quagga. Вставить ник Quote
sdy_moscow Posted June 17, 2010 Posted June 17, 2010 (edited) С такими параметрами сервера и таким трафиком - можно вообще ничего не тюнить... А так HZ=250 вполне достаточно будет. Вот дойдет трафик до 1,5-2 Гбит... тогда голова заболит - сетёвку придется добавить минимум :-). Edited June 17, 2010 by sdy_moscow Вставить ник Quote
SokolovS Posted June 17, 2010 Posted June 17, 2010 Не ну как бы ring у сетевок можно и увеличить с дефолтных 256 байт, до 2 Кб хотя бы для начала. см. ethtool [-g|-G] Вставить ник Quote
vitalyb Posted June 17, 2010 Posted June 17, 2010 SokolovS ring не в байтах меряется, а в дескрипторах Вставить ник Quote
AlKov Posted June 17, 2010 Author Posted June 17, 2010 (edited) А так HZ=250 вполне достаточно будет.Это в ядре? Вот здесь?CONFIG_HZ_100=y # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=100 Или в sysctl.conf можно "подкрутить"? И вообще, вкратце поясните, пожалуйста, что даст HZ=250? Не ну как бы ring у сетевок можно и увеличить с дефолтных 256 байт, до 2 Кб хотя бы для начала. см. ethtool [-g|-G]А в дальнейшем? На что смотреть, "покручивая" ring?И здесь в чем тайный смысл? Максимально использовать возможности сетевых для разгрузки процессора(ов), или что-то другое? Кстати, а каким образом можно изменить этот параметр? Только с помощью ethtool, или в modprobe.conf возможно указать? Хотелось бы сразу при загрузке устанавливать, но не нахожу подходящего параметра в драйвере.. parm: InterruptThrottleRate:Interrupt Throttling Rate (array of int) parm: IntMode:Interrupt Mode (array of int) parm: LLIPort:Low Latency Interrupt TCP Port (array of int) parm: LLIPush:Low Latency Interrupt on TCP Push flag (array of int) parm: LLISize:Low Latency Interrupt on Packet Size (array of int) parm: RSS:RSS - multiqueue receive count (array of int) parm: VMDQ:VMDQ - VMDq multiqueue receive (array of int) parm: max_vfs:max_vfs - SR-IOV VF devices (array of int) parm: QueuePairs:QueuePairs - TX/RX queue pairs for interrupt handling (array of int) parm: debug:Debug level (0=none, ..., 16=all) (int) В modprobe.conf сейчас только вот это options igb IntMode=2,2,2,2 RSS=2,2,2,2 QueuePairs=1,1 P.S. Прошу прощения за дополнительные вопросы, но хочется знать, что делаю, дабы потом не гадать, отчего это "оно вдруг стало так странно себя вести". :) Edited June 18, 2010 by AlKov Вставить ник Quote
SokolovS Posted June 18, 2010 Posted June 18, 2010 (edited) ring не в байтах меряется, а в дескрипторахНу да, ну да :) А в дальнейшем? На что смотреть, "покручивая" ring?ifconfig смотреть на предмет появления дропов и их причинуВот посмотри http://www.ece.rice.edu/~willmann/teng_nics_hownicswork.html на общую схему процесса Edited June 18, 2010 by SokolovS Вставить ник Quote
AlKov Posted June 20, 2010 Author Posted June 20, 2010 А в дальнейшем? На что смотреть, "покручивая" ring?ifconfig смотреть на предмет появления дропов и их причинуВот посмотри http://www.ece.rice.edu/~willmann/teng_nics_hownicswork.html на общую схему процесса Ну и? А если дропов нет/не_было, то??? И ещё раз, чем "подкручивать" ring? Только костылём через ethtool (rc.local), или возможно "по-правильному" ;)? Вставить ник Quote
SokolovS Posted June 20, 2010 Posted June 20, 2010 (edited) Ну по идее на 50-60 кппс, уже должны были появиться дропы при дефолтном ринге в 256. Можно и по правильному :) Правильность каждый сам для себя определяет, для кого-то и через rc.local правильно ;) touch /sbin/ifup-local touch /sbin/ifdown-local Содержимое файлов: /sbin/ifup-local #!/bin/sh DEVICE=$1 if [ "$DEVICE" = "" ]; then echo "Usage: $0 <DEVICE>" fi FILE="/etc/sysconfig/network-scripts/up/$DEVICE" if [ -f $FILE ]; then . $FILE fi /sbin/ifdown-local #!/bin/sh DEVICE=$1 if [ "$DEVICE" = "" ]; then echo "Usage: $0 <DEVICE>" fi FILE="/etc/sysconfig/network-scripts/down/$DEVICE" if [ -f $FILE ]; then . $FILE fi В каталоге /etc/sysconfig/network-scripts создаете две папки up и down и ложите туда файлики с именем интерфейса, например eth0. Выполняться будут при поднятии и опускании интерфейса. Вот пример одного из моих на поднятие. #!/bin/sh # Disable tcp segmentation offload /sbin/ethtool -K $DEVICE tso off tx off sg off # Set rings params /sbin/ethtool -G $DEVICE rx 2048 /sbin/ethtool -G $DEVICE tx 2048 # Set queue lenght /sbin/ifconfig $DEVICE txqueuelen 3000 #... и.т.д, тут можно и маршруты и автоподнятие шейпера Этот правильный костыль я сам делал, в некоторых системах нечто похожее уже есть, т.е. только файлик со скриптом положить в правильное место. В RHEL-based системах реализовано только автоподнятие маршрутов через файлики вида routes-<iface> который должны лежать в /etc/sysconfig/network-scripts, но их функциональность ограничена только поднятием марщрутов. Edited June 20, 2010 by SokolovS Вставить ник Quote
AlKov Posted June 22, 2010 Author Posted June 22, 2010 ...Этот правильный костыль я сам делал, в некоторых системах нечто похожее уже есть, т.е. только файлик со скриптом положить в правильное место. В RHEL-based системах реализовано только автоподнятие маршрутов через файлики вида routes-<iface> который должны лежать в /etc/sysconfig/network-scripts, но их функциональность ограничена только поднятием марщрутов.Ок. Спасибо за "правильный костыль". :) Вот возник еще вопрос насчет "tcp segmentation offload". Кто-то рекомендует его отключить (в частности, для решения этой проблемы), а кто-то наоборот включить, для повышения производительности сетевой подсистемы. Кому-нибудь приходилось играться с этим параметром? Какие результаты были получены? Вставить ник Quote
andriko Posted June 22, 2010 Posted June 22, 2010 1. роутинг2. NAT 3. фаервол. Вот возник еще вопрос насчет "tcp segmentation offload" там оно использоваться не будет... Вставить ник Quote
AlKov Posted June 22, 2010 Author Posted June 22, 2010 1. роутинг2. NAT 3. фаервол. Вот возник еще вопрос насчет "tcp segmentation offload" там оно использоваться не будет... То есть? Я правильно Вас понимаю, что tcp segmentation offload только для входящих tcp? И для данной машины значение его (on/off) не имеет решающего значения? Вставить ник Quote
SokolovS Posted June 22, 2010 Posted June 22, 2010 (edited) 1. роутинг2. NAT 3. фаервол. Вот возник еще вопрос насчет "tcp segmentation offload" там оно использоваться не будет... То есть? Я правильно Вас понимаю, что tcp segmentation offload только для входящих tcp? И для данной машины значение его (on/off) не имеет решающего значения? Для роутера это действительно ни к чему, т.к. он не держит активных скоростных подключений, а делает транзит. Т.е. TCP стек не зайдействуется, а соотвественно и оптимизация эта бессмысленна для роутера. Я тоже словил странный баг с включенным TSO на шейпящем мосте, htb выдавал скорость в 2-5 раз больше. Нашел что лечится только отключением TSO. Edited June 22, 2010 by SokolovS Вставить ник Quote
andriko Posted June 23, 2010 Posted June 23, 2010 То есть? Я правильно Вас понимаю, что tcp segmentation offload только для входящих tcp? И для данной машины значение его (on/off) не имеет решающего значения?для исходящих, разрешает апликухе писать в карту по 64к котрые она сама порубит на куски по размеру мту в отправит в сеть, нфс сервер, например...для входящих такое называют lro. гугль тут сильно поможет .... :) Вставить ник 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.