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

CentOS 5.4 используется шейпер HTB, выдаёт скорость в 2-4 раза больше.

Сперва стоял сервер двухпроцессорный 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Мбит.

 

Кто сталкивался, что делать. Виновато ядро? Как исправит?

 

Share this post


Link to post
Share on other sites

Может быть сумма rate всех дочерних классов превышает rate родительского класса ?

Я в своё время на такое напоролся и теперь создаю так

$TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit

Share this post


Link to post
Share on other sites

Но у меня выдаётся клиенту в примере выше 5Мбит поэтому и прописано rate 5120Kbit а ceil вообще не указываю, так как если он не указан, то будет равен rate. На старом сервере резало точно. Конфиги скрипта скопирован был со старого, где резалось точно.

# htb root class

$TC class add dev $DEV parent 1: classid 1:${FI}01 htb rate 1000Mbit

Edited by 2MEX2

Share this post


Link to post
Share on other sites

Попробуйте поставить 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 by photon

Share this post


Link to post
Share on other sites

Дрова весрии 2.1.1 на сетевую я брал с сайта Intel и компилил уже сам.

Share this post


Link to post
Share on other sites

Написал о проблеме в CentOS Bug Report буду ждать, что ответят.

Share this post


Link to post
Share on other sites

Да, кстати, Susanin правильно указал вам на rate. Если сумма превышает rate родительского - нарезка будет нетривиальной. Для нарезки безлимитчиков rate ставьте минимальным, например, 100кбит. А скорость по тарифу - это параметр ceil. Вы же не гарантированную полосу раздаете...

 

Share this post


Link to post
Share on other sites

Тогда почему на старом сервере под Fedora 5 это работает, а под CentOS нет?

Edited by 2MEX2

Share this post


Link to post
Share on other sites

Полоса выдаётся гарантированной! И заявлена пакетом котрый берёт клиент.

Share this post


Link to post
Share on other sites

Может быть сумма rate всех дочерних классов превышает rate родительского класса ?

Я в своё время на такое напоролся и теперь создаю так

$TC class add dev $DEV parent 1:${FI}01 classid 1:f701 htb rate 51Kbit ceil 5120Kbit

 

Попробовал сделать как тут советовали, для всех юзеров. Результата не дало.

Edited by 2MEX2

Share this post


Link to post
Share on other sites

Сумма rate дочерних классов никакой роли не играет. Oversubscription для провайдера -- это нормальная ситуация. Дело скорее всего в несовместимости древнего редхатовского ядра и нового драйвера. Если вас заклинило на продукции Red Hat, вы сами себе враг.

Edited by photon

Share this post


Link to post
Share on other sites

вообще ядро поменять - дело 10 минут. 2.6.18 крайне древнее, 1.5 года назад я уже ставил 2.6.24, а сейчас крутится 2.6.31.

Share this post


Link to post
Share on other sites

Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема. Поэтому и сижу на CentOs 5.4 с последнем их ядром. Максимально куда мог прикрутить ipp2p было 2.6.20 ядро.

Share this post


Link to post
Share on other sites
IPP2P is not supported any longer. Please check OpenDPI.org!

- возможно, дело в этом?

Share this post


Link to post
Share on other sites

На шейпере незачем городить ipp2p или что-то подобное. Можно даже обойтись без iptables и маршрутизации. Чем проще конфигурация, тем меньше вероятность столкнуться с проблемами.

Edited by photon

Share this post


Link to post
Share on other sites

Проблема в том, что на 2.6.24 и 2.6.31 не прикрутить ipp2p, в том то и проблема.

ipp2p для самых современных ядер доступен в составе xtables-addons, патчить ядро не требуется, должна быть включена опция CONFIG_NETFILTER_XTABLES.

Share this post


Link to post
Share on other sites
<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, всё поднялось заработало. Осталось проверить точно ли идёт нарезка скорсоти. На тестовом не смогпроверить. О результатах отпишусь позднее.

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