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

производительный шейпер

Народ, поделитесь опытом, кто как делает шейпера на серверах.

Не удается прокачать больше 140Kpps (в каждую сторону, суммарно 280, ~1Gb в каждую сторону)

сервер HP DL 160 G6 , 2 процессора Xeon E5504 по 4 ядра, 4 сетевухи Intel 82576 в 2-х бондингах

Линукс, шейпер на хешах u32

 

Share this post


Link to post
Share on other sites

а что потом происходит? дропы на интерфейсах?

Share this post


Link to post
Share on other sites

там и так вроде линукс. Есть сомнения, что переход с htb на полисеры даст хотя бы 50% прироста pps, т.е. всёравно полка будет потом скоро.

 

Как несколько адресов и + к ним подсетей (у одного абонента может быть несколько подключений и подсети) пихать в один полисер ? Вот в одну очередь можно.

Share this post


Link to post
Share on other sites

а если шейпер отключить, трафик растет и процессоры разгружаются?

Share this post


Link to post
Share on other sites

Так sofirq все ядра равномерно загружают? mpstat -P ALL покажи

Share this post


Link to post
Share on other sites

# mpstat -P ALL

Linux 2.6.32-3-amd64 (shaper4) 18.11.2010 _x86_64_ (8 CPU)

 

16:43:37 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

16:43:37 all 0,02 0,01 0,16 0,01 1,94 36,38 0,00 0,00 61,47

16:43:37 0 0,06 0,00 0,14 0,00 0,85 30,72 0,00 0,00 68,22

16:43:37 1 0,04 0,01 0,14 0,00 0,88 30,54 0,00 0,00 68,39

16:43:37 2 0,01 0,00 0,11 0,00 5,62 35,03 0,00 0,00 59,22

16:43:37 3 0,01 0,00 0,11 0,00 0,85 30,74 0,00 0,00 68,29

16:43:37 4 0,03 0,02 0,13 0,02 0,79 39,64 0,00 0,00 59,39

16:43:37 5 0,01 0,01 0,41 0,05 0,78 40,62 0,00 0,00 58,13

16:43:37 6 0,00 0,00 0,11 0,00 5,02 43,18 0,00 0,00 51,69

16:43:37 7 0,00 0,00 0,14 0,01 0,77 40,64 0,00 0,00 58,43

 

 

 

 

а если шейпер отключить, трафик растет и процессоры разгружаются?
Да - трафик резко вверх, процы вниз

 

Хотелось бы услышать - кто сколько выжимал и на каком железе

Edited by drv_sevstar

Share this post


Link to post
Share on other sites

Какой выставлен InterruptThrottleRate для igb? Примерно структуру шейпера набросать можете?

 

В общем случае, имхо, поставить что-то вроде oprofile, посмотреть что точно грузит систему. Отоптимизировать. Если оптимизировать уже некуда - ставить рядом еще один сервер и балансировать нагрузку.

 

Share this post


Link to post
Share on other sites
а если шейпер отключить, трафик растет и процессоры разгружаются?
Да - трафик резко вверх, процы вниз

 

Хотелось бы услышать - кто сколько выжимал и на каком железе

Подозреваю, что хэш-фильтры созданы неправильно. Как у вас выглядят типичные правила?

Share this post


Link to post
Share on other sites
сделать полисинг
на linux полисинг не даст существенного прироста... 10-20% максимум

 

drv_sevstar

прерывания к cpu прибиты? на выводе mpstat "cpu в полку" не видно

Share this post


Link to post
Share on other sites
сделать полисинг
на linux полисинг не даст существенного прироста... 10-20% максимум

 

drv_sevstar

прерывания к cpu прибиты? на выводе mpstat "cpu в полку" не видно

прибиты

один физический проц на один бондинг, второй на второй бондинг

 

# cat irq.sh

#!/bin/bash

 

 

# bond1 internet

echo 01 > /proc/irq/55/smp_affinity #eth3-tx-0

echo 02 > /proc/irq/56/smp_affinity #eth3-tx-1

echo 04 > /proc/irq/57/smp_affinity #eth3-tx-2

echo 08 > /proc/irq/58/smp_affinity #eth3-tx-3

echo 01 > /proc/irq/59/smp_affinity #eth3-rx-0

echo 02 > /proc/irq/60/smp_affinity #eth3-rx-1

echo 04 > /proc/irq/61/smp_affinity #eth3-rx-2

echo 08 > /proc/irq/62/smp_affinity #eth3-rx-3

 

echo 01 > /proc/irq/65/smp_affinity #eth2-tx-0

echo 02 > /proc/irq/66/smp_affinity #eth2-tx-1

echo 04 > /proc/irq/67/smp_affinity #eth2-tx-2

echo 08 > /proc/irq/68/smp_affinity #eth2-tx-3

echo 01 > /proc/irq/69/smp_affinity #eth2-rx-0

echo 02 > /proc/irq/70/smp_affinity #eth2-rx-1

echo 04 > /proc/irq/71/smp_affinity #eth2-rx-2

echo 08 > /proc/irq/72/smp_affinity #eth2-rx-3

 

# bond0 local net

echo 10 > /proc/irq/74/smp_affinity #eth0-tx-0

echo 20 > /proc/irq/75/smp_affinity #eth0-tx-1

echo 40 > /proc/irq/76/smp_affinity #eth0-tx-2

echo 80 > /proc/irq/77/smp_affinity #eth0-tx-3

echo 10 > /proc/irq/78/smp_affinity #eth0-rx-0

echo 20 > /proc/irq/79/smp_affinity #eth0-rx-1

echo 40 > /proc/irq/80/smp_affinity #eth0-rx-2

echo 80 > /proc/irq/81/smp_affinity #eth0-rx-3

 

echo 10 > /proc/irq/83/smp_affinity #eth1-tx-0

echo 20 > /proc/irq/84/smp_affinity #eth1-tx-1

echo 40 > /proc/irq/85/smp_affinity #eth1-tx-2

echo 80 > /proc/irq/86/smp_affinity #eth1-tx-3

echo 10 > /proc/irq/87/smp_affinity #eth1-rx-0

echo 20 > /proc/irq/88/smp_affinity #eth1-rx-1

echo 40 > /proc/irq/89/smp_affinity #eth1-rx-2

echo 80 > /proc/irq/90/smp_affinity #eth1-rx-3

 

 

 

Share this post


Link to post
Share on other sites
на выводе mpstat "cpu в полку" не видно
Полки нет по тому что время было ок 16:00, во первых(пик в 20-21), во вторых пер***нсировали на другие шейпера, не терпеть же такое безобразие.

Но проблему это не снимает.

На HP DL160 G6 в минимальной конфигурации, с одним процом выжимаеться до 700-800 Mbit в каждую сторону, (100-110 Kpps в каждую сторону), а тут железка в 3 раза дороже, а имеем прироста 15-20% макс.

 

Share this post


Link to post
Share on other sites

Чего то не понял к это соотносится? Linux 2.6.32-3-amd64 и 2 процессора Xeon E5504 по 4 ядра

Edited by SokolovS

Share this post


Link to post
Share on other sites
Народ, поделитесь опытом, кто как делает шейпера на серверах.

Фря 7.3, Дамминет.

ОДИН Ксеон 5520. Одна сетевуха Интел EXPI9404PT.

Примерно 1400/700 трафика, 360-390 кппс. Дрова Яндех+тюнинг.

Загрузка примерно 60-70%.

 

п.с. Смотрел "на глазок". Только сегодня поставили, точной статистики еще нет, могу и наврать (

Отдельно НАТ. Пролетает суммарно гига два.

Это все в ЧНН - примерно 6-8 часов в сутки.

 

Share this post


Link to post
Share on other sites
Какой выставлен InterruptThrottleRate для igb? Примерно структуру шейпера набросать можете?
Стояло по дефолту (3)

Сейчас переключил на 1 , посмотрю результат.

 

Share this post


Link to post
Share on other sites

Другими важными параметрами являются размеры rx/tx rings (см. вывод ethtool -g <iface>) и txqueuelen, который устанавливается с помощью ifconfig или ip из iproute2. При больших пакетрейтах их надо увеличить.

Share this post


Link to post
Share on other sites

Linux 2.6.32 sc скрипт.

Xeon E5520 (с HT 8 ядер)

Cетевухи: 2+2 igb 8257, bonding, InterruptThrottleRate=20000

ethtool -G eth0 rx 2048 tx 2048

ethtool -K eth0 rx off tx off gso off

 

В пиках кидал 1340in/1220out (pps в сумме около 500к) жрало около 50% проца.

 

Фильтры выглядят так:

tc filter show dev bond1

filter parent 1: protocol ip pref 2 flow

filter parent 1: protocol ip pref 2 flow handle 0x1 map keys dst and 0x0000ffff baseclass 1:1

 

Еще для части IP собирает netflow.

 

Так что ваш 5504 должен тоже нормально работать.

Edited by Zluka52

Share this post


Link to post
Share on other sites
Другими важными параметрами являются размеры rx/tx rings (см. вывод ethtool -g <iface>) и txqueuelen, который устанавливается с помощью ifconfig или ip из iproute2. При больших пакетрейтах их надо увеличить.
rx/tx rings выставил в 4096

txqueuelen на eth и bond выставлены в 1000 - увеличить?

и еще - в вланах на богдингах txqueuelen=0 Есть смысл его там выставлять?

 

Share this post


Link to post
Share on other sites
Linux 2.6.32 sc скрипт.

Xeon E5520 (с HT 8 ядер)

Cетевухи: 2+2 igb 8257, bonding, InterruptThrottleRate=20000

ethtool -G eth0 rx 2048 tx 2048

ethtool -K eth0 rx off tx off gso off

 

В пиках кидал 1340in/1220out (pps в сумме около 500к) жрало около 50% проца.

 

Фильтры выглядят так:

tc filter show dev bond1

filter parent 1: protocol ip pref 2 flow

filter parent 1: protocol ip pref 2 flow handle 0x1 map keys dst and 0x0000ffff baseclass 1:1

 

Еще для части IP собирает netflow.

 

Так что ваш 5504 должен тоже нормально работать.

Можно по подробнее как у вас построены правила tc

Если можно - tc -batch файл в личку.

Share this post


Link to post
Share on other sites

txqueuelen на eth и bond выставлены в 1000 - увеличить?

Конечно, это же те самые очереди, что используются для шейпинга.

Share this post


Link to post
Share on other sites
txqueuelen на eth и bond выставлены в 1000 - увеличить?
Конечно, это же те самые очереди, что используются для шейпинга.

Только для физических интерфейсов имеет смысл

Share this post


Link to post
Share on other sites
txqueuelen на eth и bond выставлены в 1000 - увеличить?
Конечно, это же те самые очереди, что используются для шейпинга.

Только для физических интерфейсов имеет смысл

Существует ли како-то (мнемоническое?) правило для определения размера этой очереди ?

 

Например, если для 100Mbit следует использовать 1'000 пакетов, то для гигабита - 10'000 ?

 

При МТУ 1500 и для 100 мегабит это (1'500байт * 8бит_в_байте * 1'000 пакетов)/100'000'000бит/сек = 0.12 секунды трафика.

Может быть как-то исходя из этого считать ? Сколько секунд трафика должно помещаться в этой очереди ?

Share this post


Link to post
Share on other sites

Попробуй для начала 3000 - 5000 ставить, для 100 Мбит на самом деле по дефолту 100 стоит, а для гигабита 1000, но этого уже мало. MTU то может и 1500, но размер пакета у меня средний ~600 байт.

Edited by SokolovS

Share this post


Link to post
Share on other sites
При МТУ 1500
Ethernet [+vlan] забыли.

На интерфейс ОС передаёт пакеты уже с ethernet заголовками.

 

txqueuelen
как следует из названия это ДЛИНА очереди, определяемая количеством элементов, а никак не размеры буферов пакетов.

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