Перейти к содержимому
Калькуляторы

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Мбит.

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

# htb root class

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

Изменено пользователем 2MEX2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут пост с выдержкой из скрипта: http://forum.ixbt.com/topic.cgi?id=76:9317

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте поставить 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 уже не поддерживается.
Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем 2MEX2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

Изменено пользователем 2MEX2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

IPP2P is not supported any longer. Please check OpenDPI.org!

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

<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.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.