2MEX2 Опубликовано 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Мбит. Кто сталкивался, что делать. Виновато ядро? Как исправит? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Susanin Опубликовано 20 января, 2010 · Жалоба Может быть сумма rate всех дочерних классов превышает rate родительского класса ? Я в своё время на такое напоролся и теперь создаю так $TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 20 января, 2010 (изменено) · Жалоба Но у меня выдаётся клиенту в примере выше 5Мбит поэтому и прописано rate 5120Kbit а ceil вообще не указываю, так как если он не указан, то будет равен rate. На старом сервере резало точно. Конфиги скрипта скопирован был со старого, где резалось точно. # htb root class $TC class add dev $DEV parent 1: classid 1:${FI}01 htb rate 1000Mbit Изменено 20 января, 2010 пользователем 2MEX2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 20 января, 2010 · Жалоба Тут пост с выдержкой из скрипта: http://forum.ixbt.com/topic.cgi?id=76:9317 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 21 января, 2010 (изменено) · Жалоба Попробуйте поставить 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 уже не поддерживается. Изменено 21 января, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 · Жалоба Дрова весрии 2.1.1 на сетевую я брал с сайта Intel и компилил уже сам. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 · Жалоба Написал о проблеме в CentOS Bug Report буду ждать, что ответят. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Nic Опубликовано 21 января, 2010 · Жалоба Да, кстати, Susanin правильно указал вам на rate. Если сумма превышает rate родительского - нарезка будет нетривиальной. Для нарезки безлимитчиков rate ставьте минимальным, например, 100кбит. А скорость по тарифу - это параметр ceil. Вы же не гарантированную полосу раздаете... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 (изменено) · Жалоба Тогда почему на старом сервере под Fedora 5 это работает, а под CentOS нет? Изменено 21 января, 2010 пользователем 2MEX2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 · Жалоба Полоса выдаётся гарантированной! И заявлена пакетом котрый берёт клиент. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 (изменено) · Жалоба Может быть сумма rate всех дочерних классов превышает rate родительского класса ? Я в своё время на такое напоролся и теперь создаю так $TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit Попробовал сделать как тут советовали, для всех юзеров. Результата не дало. Изменено 21 января, 2010 пользователем 2MEX2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 21 января, 2010 (изменено) · Жалоба Сумма rate дочерних классов никакой роли не играет. Oversubscription для провайдера -- это нормальная ситуация. Дело скорее всего в несовместимости древнего редхатовского ядра и нового драйвера. Если вас заклинило на продукции Red Hat, вы сами себе враг. Изменено 21 января, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Nic Опубликовано 21 января, 2010 · Жалоба вообще ядро поменять - дело 10 минут. 2.6.18 крайне древнее, 1.5 года назад я уже ставил 2.6.24, а сейчас крутится 2.6.31. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 21 января, 2010 · Жалоба Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема. Поэтому и сижу на CentOs 5.4 с последнем их ядром. Максимально куда мог прикрутить ipp2p было 2.6.20 ядро. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Nic Опубликовано 23 января, 2010 · Жалоба IPP2P is not supported any longer. Please check OpenDPI.org! - возможно, дело в этом? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 23 января, 2010 (изменено) · Жалоба На шейпере незачем городить ipp2p или что-то подобное. Можно даже обойтись без iptables и маршрутизации. Чем проще конфигурация, тем меньше вероятность столкнуться с проблемами. Изменено 23 января, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
zivot Опубликовано 28 января, 2010 · Жалоба Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема. ipp2p для самых современных ядер доступен в составе xtables-addons, патчить ядро не требуется, должна быть включена опция CONFIG_NETFILTER_XTABLES. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
2MEX2 Опубликовано 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, всё поднялось заработало. Осталось проверить точно ли идёт нарезка скорсоти. На тестовом не смогпроверить. О результатах отпишусь позднее. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...