2MEX2 Posted January 20, 2010 Posted January 20, 2010 Сперва стоял сервер двухпроцессорный Xeon (одноядерне, на ядре P4), стояла Fedora 5 было скомпилено ядро 2.6.20-1.2319.fc5smp сервер занималдся нарезкой трафика пользователям. Использовался HTB. Всё работало исправно, точно. Машинки марально устарели, нехватка пощности. Купили новый сервер на базе Intel Xeon X5550 (я ядра, микроархитектура Nehalem). Поставлена была CentOS 5.4 и взято последнее для неё ядро 2.6.18-164.10.1.el5PAE и скомпилировано под себя. Проблема в том, что нарезает порядка в 2-4 раза больше, чем указывается. Пробовал всё что можно. При компиляции ядра выбрано было следующее: (так как новой архитектуры не было в ядре) Processor family -> Pentium-4/Celeron(P4-based)/Pentium-4 M/Xeon Preemption Model -> No Forced Preemption (Server) CONFIG_HZ_1000=y CONFIG_HZ=1000 Таймер был сперва tsc, но сменил, чтобы работал hpet. Из доступных есть ещё такие: #cat /sys/devices/system/clocksource/clocksource0/available_clocksource acpi_pm jiffies hpet tsc pit подгружен #cat /sys/devices/system/clocksource/clocksource0/current_clocksource hpet проблема осталась прежней. Затем сменил дрова на сетевую со штаных на последние Intel 2.1.1 09:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 09:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) #ethtool -i eth0 driver: igb version: 2.1.1 firmware-version: 1.4-3 bus-info: 0000:09:00.0 #modinfo igb filename: /lib/modules/2.6.18-164.10.1-ipp2p.el5PAE/kernel/drivers/net/igb/igb.ko version: 2.1.1 license: GPL description: Intel® Gigabit Ethernet Network Driver author: Intel Corporation, <e1000-devel@lists.sourceforge.net> srcversion: FDF9793697169CEE5D4BF75 alias: pci:v00008086d000010D6sv*sd*bc*sc*i* alias: pci:v00008086d000010A9sv*sd*bc*sc*i* alias: pci:v00008086d000010A7sv*sd*bc*sc*i* alias: pci:v00008086d000010E8sv*sd*bc*sc*i* alias: pci:v00008086d0000150Dsv*sd*bc*sc*i* alias: pci:v00008086d000010E7sv*sd*bc*sc*i* alias: pci:v00008086d000010E6sv*sd*bc*sc*i* alias: pci:v00008086d00001518sv*sd*bc*sc*i* alias: pci:v00008086d0000150Asv*sd*bc*sc*i* alias: pci:v00008086d000010C9sv*sd*bc*sc*i* alias: pci:v00008086d00001516sv*sd*bc*sc*i* alias: pci:v00008086d00001511sv*sd*bc*sc*i* alias: pci:v00008086d00001510sv*sd*bc*sc*i* alias: pci:v00008086d0000150Fsv*sd*bc*sc*i* alias: pci:v00008086d0000150Esv*sd*bc*sc*i* depends: dca,8021q vermagic: 2.6.18-164.10.1-ipp2p.el5PAE SMP mod_unload PENTIUM4 REGPARM 4KSTACKS gcc-4.1 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) В некотрых ветках нашёл, что нужно отключить tcp segmentation offload: off #ethtool -k eth0 Offload parameters for eth0: rx-checksumming: on tx-checksumming: on scatter-gather: on tcp segmentation offload: off udp fragmentation offload: off generic segmentation offload: off generic-receive-offload: on Но это всё проблему не решило. Пример нарезки dowbload'a для одного из клиентов (IP закрыт): $TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 5120Kbit $TC qdisc add dev $DEV parent 1:f701 handle 0xf701 pfifo limit 60 $TC filter add dev $DEV parent 1:0 protocol ip prio 100 u32 ht 2:01: match ip dst xxx.xxx.xxx.1 classid 1:f701 Всё равно когда просматриваю, вижу, что нарезка споконой даёт больше, чем задано: class htb 1:f701 parent 1:be01 leaf f701: prio 0 rate 5120Kbit ceil 5120Kbit burst 2240b cburst 2240b Sent 85217655 bytes 16045 pkt (dropped 0, overlimits 0 requeues 0) rate 14449Kbit 332pps backlog 0b 6p requeues 0 lended: 16039 borrowed: 0 giants: 18590 tokens: -4620 ctokens: -4620 Видно, что нарезана скорость 5Мбит, но клиенту нарезается намного больше. Лимит 5Мбит, а выдаётся подчти 15Мбит. Кто сталкивался, что делать. Виновато ядро? Как исправит? Вставить ник Quote
Susanin Posted January 20, 2010 Posted January 20, 2010 Может быть сумма rate всех дочерних классов превышает rate родительского класса ? Я в своё время на такое напоролся и теперь создаю так $TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit Вставить ник Quote
2MEX2 Posted January 20, 2010 Author Posted January 20, 2010 (edited) Но у меня выдаётся клиенту в примере выше 5Мбит поэтому и прописано rate 5120Kbit а ceil вообще не указываю, так как если он не указан, то будет равен rate. На старом сервере резало точно. Конфиги скрипта скопирован был со старого, где резалось точно. # htb root class $TC class add dev $DEV parent 1: classid 1:${FI}01 htb rate 1000Mbit Edited January 20, 2010 by 2MEX2 Вставить ник Quote
2MEX2 Posted January 20, 2010 Author Posted January 20, 2010 Тут пост с выдержкой из скрипта: http://forum.ixbt.com/topic.cgi?id=76:9317 Вставить ник Quote
photon Posted January 21, 2010 Posted January 21, 2010 (edited) Попробуйте поставить HZ в значение 250 и использовать acpi_pm. Еще, при создании дочерних классов в правилах надо указывать параметр quantum 1500. igb -- бэкпортированный драйвер, поэтому неудивительно, что с ним возникают глюки. CentOS 5.4 и взято последнее для неё ядро 2.6.18-164.10.1.el5PAEА почему собственно CentOS, а не Debian или что-то другое, где нет этой бредовой политики использования древних ядер с кучей бэкпортов и патчей? Вообще говоря, пытаться реализовать бинарную совместимость в Linux, где разработчики ядра о ней не думают, -- это все равно что плевать против ветра. Одно дело, если вы клиент Red Hat, у вас проплаченная поддержка, тогда вы можете с них требовать исправления ошибок. А так даже багрепорт некому отправить, т.к. ванильная версия 2.6.18 уже не поддерживается. Edited January 21, 2010 by photon Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 Дрова весрии 2.1.1 на сетевую я брал с сайта Intel и компилил уже сам. Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 Написал о проблеме в CentOS Bug Report буду ждать, что ответят. Вставить ник Quote
Nic Posted January 21, 2010 Posted January 21, 2010 Да, кстати, Susanin правильно указал вам на rate. Если сумма превышает rate родительского - нарезка будет нетривиальной. Для нарезки безлимитчиков rate ставьте минимальным, например, 100кбит. А скорость по тарифу - это параметр ceil. Вы же не гарантированную полосу раздаете... Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 (edited) Тогда почему на старом сервере под Fedora 5 это работает, а под CentOS нет? Edited January 21, 2010 by 2MEX2 Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 Полоса выдаётся гарантированной! И заявлена пакетом котрый берёт клиент. Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 (edited) Может быть сумма rate всех дочерних классов превышает rate родительского класса ? Я в своё время на такое напоролся и теперь создаю так $TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit Попробовал сделать как тут советовали, для всех юзеров. Результата не дало. Edited January 21, 2010 by 2MEX2 Вставить ник Quote
photon Posted January 21, 2010 Posted January 21, 2010 (edited) Сумма rate дочерних классов никакой роли не играет. Oversubscription для провайдера -- это нормальная ситуация. Дело скорее всего в несовместимости древнего редхатовского ядра и нового драйвера. Если вас заклинило на продукции Red Hat, вы сами себе враг. Edited January 21, 2010 by photon Вставить ник Quote
Nic Posted January 21, 2010 Posted January 21, 2010 вообще ядро поменять - дело 10 минут. 2.6.18 крайне древнее, 1.5 года назад я уже ставил 2.6.24, а сейчас крутится 2.6.31. Вставить ник Quote
2MEX2 Posted January 21, 2010 Author Posted January 21, 2010 Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема. Поэтому и сижу на CentOs 5.4 с последнем их ядром. Максимально куда мог прикрутить ipp2p было 2.6.20 ядро. Вставить ник Quote
Nic Posted January 23, 2010 Posted January 23, 2010 IPP2P is not supported any longer. Please check OpenDPI.org! - возможно, дело в этом? Вставить ник Quote
photon Posted January 23, 2010 Posted January 23, 2010 (edited) На шейпере незачем городить ipp2p или что-то подобное. Можно даже обойтись без iptables и маршрутизации. Чем проще конфигурация, тем меньше вероятность столкнуться с проблемами. Edited January 23, 2010 by photon Вставить ник Quote
zivot Posted January 28, 2010 Posted January 28, 2010 Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема. ipp2p для самых современных ядер доступен в составе xtables-addons, патчить ядро не требуется, должна быть включена опция CONFIG_NETFILTER_XTABLES. Вставить ник Quote
2MEX2 Posted January 29, 2010 Author Posted January 29, 2010 <br />Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема.ipp2p для самых современных ядер доступен в составе xtables-addons, патчить ядро не требуется, должна быть включена опция CONFIG_NETFILTER_XTABLES.<br /><br /><br /><br /> Ты просто спаситель. Сколкьо не искал информации по ipp2p, нигде не пересекалась информация с проектом xtables-addons. Поставил Fedora 12 внедрил из xtables-addons пакет ipp2p, всё поднялось заработало. Осталось проверить точно ли идёт нарезка скорсоти. На тестовом не смогпроверить. О результатах отпишусь позднее. Вставить ник 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.