Jump to content

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


Recommended Posts

Posted

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

 

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

 

Posted

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

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

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

Posted (edited)

Но у меня выдаётся клиенту в примере выше 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
Posted (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 by photon
Posted

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

 

Posted (edited)

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

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

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

 

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

Edited by 2MEX2
Posted (edited)

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

Edited by photon
Posted

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

Posted

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

Posted (edited)

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

Edited by photon
Posted

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

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.