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

[Решено] TC грузит процессор

Видимо хэшей слишком много и они в кеш не влезают/периодически от туда вымываются.

Либо наоборот слишком мало, и тогда слишком часто случаются одновременные попадания двух и более ядер на одну корзину, в результате они крутятся в спинлоках.

Есть возможность узнать сколько их может быть?

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


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

Это к пингвиноводам, я только предполагаю.

Их быть может скорее всего 2 в какой то там степени.

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


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

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

Стало лучше, но всё-равно бывает, что одно ядро почти пустое, другое в потолке. В эти моменты есть потери пакетов. Бывает достаточно часто

 

Упрощённо шейпер выглядит так:

#!/bin/bash


tc -s f ls dev eth1


#Удаляем дисциплины
tc qdisc del dev eth1 root

# Корневая дисциплина
tc qdisc add dev eth1 root handle 1: htb default 100
tc class add dev eth1 parent 1: classid 1:1 htb rate 1000mbit
tc class add dev eth1 parent 1:1 classid 1:100 htb rate 512Kbit ceil 200mbit prio 10

# Интернет
tc class add dev eth1 parent 1:1 classid 1:20 htb rate 100mbit ceil 750mbit prio 1

# tc filter add dev eth1 parent 1:0 protocol ip u32

tc filter add dev eth1 parent 1:0 handle 10: protocol ip u32 divisor 256

tc filter add dev eth1 parent 1:0 protocol ip u32 ht 801:: match ip dst 0.0.0.0/0 hashkey mask 0xff at 16 link 10:

# абонент 1
tc class add dev eth1 parent 1:20 classid 1:101 htb rate 256kbit ceil 6438912
tc filter add dev eth1 protocol ip parent 1:0 u32 ht 10:5: match ip dst 192.168.1.5/32 flowid 1:101

# абонент 2
tc class add dev eth1 parent 1:20 classid 1:102 htb rate 256kbit ceil 11000000
tc filter add dev eth1 protocol ip parent 1:0 u32 ht 10:5: match ip dst 192.168.2.5/32 flowid 1:102

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


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

В ячейках линейно фильтры для всех айпишников, которые на этот байт кончаются.

сколько их?

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


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

Какой-то чад и угар у вас с таблицами. В свое время для реализации шейпера для ipv6 столкнулся с тем, что хэшами там и не пахнет. Потому был сделан заход с другой стороны, через связку tc+ipset.

 

Со стороны tc правила выглядят так (используется дисциплина hfsc):

 

...
# user1
class add dev bondINT parent 1: classid 1:b est 1sec 8sec hfsc sc umax 1500b dmax 10ms rate 92160kbit ul rate 92160kbit
class add dev bondEXT parent 1: classid 1:b est 1sec 8sec hfsc sc umax 1500b dmax 10ms rate 92160kbit ul rate 92160kbit
# user2
class add dev bondINT parent 1: classid 1:c est 1sec 8sec hfsc sc umax 1500b dmax 5ms rate 2048kbit ul rate 2048kbit
class add dev bondEXT parent 1: classid 1:c est 1sec 8sec hfsc sc umax 1500b dmax 5ms rate 2048kbit ul rate 2048kbit
# user4
class add dev bondINT parent 1: classid 1:32 est 1sec 8sec hfsc sc umax 1500b dmax 10ms rate 92160kbit ul rate 92160kbit
class add dev bondEXT parent 1: classid 1:32 est 1sec 8sec hfsc sc umax 1500b dmax 10ms rate 92160kbit ul rate 92160kbit
....

Со стороны ipset:

create shaper4 hash:net family inet hashsize 1024 maxelem 65536 skbinfo
create shaper6 hash:net family inet6 hashsize 1024 maxelem 65536 skbinfo
# user1
add shaper4 172.16.17.196/32 skbprio 1:b
# user2
add shaper4 172.16.17.220/32 skbprio 1:c
# user4
add shaper4 193.33.yyy.yyy/32 skbprio 1:32
add shaper6 2a02:4680:XXXX:X:0:0:0:X/64 skbprio 1:32
...

-t mangle -A POSTROUTING -o bondEXT -m set ! --match-set local dst -j SET --map-set shaper4 src --map-prio
-t mangle -A POSTROUTING -o bondINT -m set ! --match-set local src -j SET --map-set shaper4 dst --map-prio

v6
-t mangle -A POSTROUTING -o bondEXT -m set ! --match-set local6 dst -j SET --map-set shaper6 src --map-prio
-t mangle -A POSTROUTING -o bondINT -m set ! --match-set local6 src -j SET --map-set shaper6 dst --map-prio

 

проц E5-2407 при ~1.6Gbps до 40% нагрузки равномерно по всем ядрам.

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


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

Перезагрузили сервер. После этого с новым шейпером всё работает как надо - видимо, остался какой-то осадок в памяти после предыдущего шейпера с большой кучей хэш-таблиц. Нагрузка при 650 Мбит/с выше 70% на ядро не поднимается. Перед следующим расширением канала будем думать по поводу смены шейпера на iptables. Спасибо за помощь!

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


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

70% это смертельная загрузка, после ребута у вас просто где-то таблицы arp/conntrack почистились и стало чуть легче, это временно.

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


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

У меня при 700in мегабитах загрузка не выше 20% на ядро. В среднем - до 12. Проц Intel® Xeon® CPU E3-1220 v3 @ 3.10GHz. Хэши не использую.

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

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


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

У меня при 700in мегабитах загрузка не выше 20% на ядро. В среднем - до 12. Проц Intel® Xeon® CPU E3-1220 v3 @ 3.10GHz. Хэши не использую.

А как? Сколько абонентов?

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


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

А вы точно уверены что грузит именно шейпер?

В первом посте упоминается NAT, может таки он виноват?

 

И как вы шейпите с НАТом в данный момент, только одно направление?

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


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

kayot,Я рещил просто - хтб на выход(к абоненту), полисер tc на вход(от абонента).

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

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


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

А вы точно уверены что грузит именно шейпер?

В первом посте упоминается NAT, может таки он виноват?

 

И как вы шейпите с НАТом в данный момент, только одно направление?

 

При отключении шейпера нагрузка на процессор около нуля, канал забивается на все 650 Мбит/с.

Режется только одно направление (к абоненту). Скорость от абонента в интернет режут коммутаторы.

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


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

Тогда точно хеши не работают.

У меня похожее железо терминирует/шейпит под 3Gbit, с HTB и кучей классов. Причем и вход, и исход.

А машины на которых порядка 1 гига имеют загрузку до 10%.

По опыту коллег - грабли с локами и затыками начинают где-то на 5G, 650мбит целерон офисный должен шейпить без проблем.

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


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

asid2006 а покажите cat /proc/cpuinfo ну и tc -s filter show

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

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


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

650мбит целерон офисный должен шейпить без проблем.

плюсую. пппое терминатор на G530 тестировал, на исход - шейпер на пул ~3 тыс. адресов, причем - хитрый, с внутренней приоретизацией (3 класса в итоге на каждую ветку), в кол-ве 3 штук (микс на ifb + отдельно вланы мира и украины), на 400-500 мбитах загрузка проца % 20-30...

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


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

Увеличилось число абонентов, увеличились скорости для каждого - проблема вернулась.

 

cat /proc/cpuinfo

[root@srv1 ~]# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
stepping        : 3
microcode       : 0x1a
cpu MHz         : 3699.882
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 0
cpu cores       : 4
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6984.56
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
stepping        : 3
microcode       : 0x1a
cpu MHz         : 3699.882
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 1
cpu cores       : 4
apicid          : 2
initial apicid  : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6984.56
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 2
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
stepping        : 3
microcode       : 0x1a
cpu MHz         : 3699.882
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 2
cpu cores       : 4
apicid          : 4
initial apicid  : 4
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6984.56
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 60
model name      : Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz
stepping        : 3
microcode       : 0x1a
cpu MHz         : 3700.019
cache size      : 8192 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm
bogomips        : 6984.56
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

 

tc -s filter show во вложении

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


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

Привет, я вижу еще огромный линейный список перед шейпером, а попробуйте в скрипт создания шейпера в правила tc filter add добавить еще pref (10 например)

tc filter add dev XXX protocol ip pref 10 ....

Скорее всего дело в этом, и потом можно будет вернуть хеширование по обеим октетам.

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

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


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

На всякий случай привожу конфигурацию шейпера:

#!/bin/bash

ipset -N blocked iphash

# Удаляем существующие фильтры и классы на интерфейсе
tc qdisc del dev em2 root

# Корневая дисциплина (+ дефолтный класс)
tc qdisc add dev em2 root handle 1: htb default 100

# Корневрй класс, присоединенный к коренвой дисциплине (скоррость интерфейса)
tc class add dev em2 parent 1: classid 1:1 htb rate 1000mbit

# Дефолтный класс//100//===============================================================
tc class add dev em2 parent 1:1 classid 1:100 htb rate 512Kbit ceil 600mbit prio 10

#======================================================================================
#//////////////////////////////////////////////////////////////////////////////////////
# Внутрисетевой трафик (сервера, микротик...)) //10//==================================
tc class add dev em2 parent 1:1 classid 1:10 htb rate 1mbit ceil 200mbit prio 1

#======================================================================================
#//////////////////////////////////////////////////////////////////////////////////////
# Интернет //20//======================================================================
tc class add dev em2 parent 1:1 classid 1:20 htb rate 100mbit ceil 750mbit prio 1

#======================================================================================
#//////////////////////////////////////////////////////////////////////////////////////
# Управление оборудованием //30//======================================================
tc class add dev em2 parent 1:1 classid 1:30 htb rate 1mbit ceil 20mbit prio 0

#======================================================================================
#//////////////////////////////////////////////////////////////////////////////////////
# ТВ //40//============================================================================
tc class add dev em2 parent 1:1 classid 1:40 htb rate 10mbit ceil 300mbit prio 0

#======================================================================================
#//////////////////////////////////////////////////////////////////////////////////////
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#==============ФИЛЬТРЫ=================================================================
#//////////////////////////////////////////////////////////////////////////////////////

# Корневой фильтр======================================================================
tc filter add dev em2 parent 1:0 protocol ip u32

# Всё, что с внутренних ресурсов идёт в 10 класс ======================================
tc filter add dev em2 protocol ip parent 1: u32 match ip src 95.153.151.60 flowid 1:10
tc filter add dev em2 protocol ip parent 1: u32 match ip src 10.0.0.0/16 match ip dst 95.153.151.61  flowid 1:10

# Всё, что до коммутаторов (vlan100) идёт в 30 класс ==================================
tc filter add dev em2 protocol ip parent 1: u32 match ip dst 192.168.7.0/24 flowid 1:30

# Телик (OTT) идёт в 40 класс =========================================================
tc filter add dev em2 protocol ip parent 1: u32 match ip src 81.23.6.224/27 flowid 1:40
tc filter add dev em2 protocol ip parent 1: u32 match ip src 95.163.68.48/28 flowid 1:40

# Создаём хэш-таблицу 10: и отсылаем в неё трафик =====================================
tc filter add dev em2 parent 1:0 handle 10: protocol ip u32 divisor 256
tc filter add dev em2 parent 1:0 protocol ip u32 ht 801:: match ip dst 0.0.0.0/0 hashkey mask 0xff at 16 link 10:

#======================================================================================

# Абоненты

#======================================================================================

/usr/scripts/billing/ip/10.0.10.2.sh
/usr/scripts/billing/ip/10.0.11.21.sh
/usr/scripts/billing/ip/10.0.11.33.sh
...

 

/usr/scripts/billing/ip/10.0.10.2.sh

 

#class=102
tc class add dev em2 parent 1:20 classid 1:102 htb rate 256kbit ceil 73360000
tc filter replace dev em2 protocol ip parent 1:0 u32 ht 10:2: match ip dst 10.0.10.2/32 flowid 1:102

 

Такие файлики есть для каждого клиента. 1 клиент - 1 IP.

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


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

asid2006

Как я и сказал - попробуйте добавить везде pref, думаю в этом и проблема. Хеш есть, но после линейного списка.

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

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


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

asid2006

Как я и сказал - попробуйте добавить везде pref, думаю в этом и проблема. Хеш есть, но после линейного списка.

 

Т.е. добавить нужно только в этот кусок?

# Корневой фильтр======================================================================
tc filter add dev em2 parent 1:0 protocol ip u32

# Всё, что с внутренних ресурсов идёт в 10 класс ======================================
tc filter add dev em2 protocol ip parent 1: u32 match ip src 95.153.151.60 flowid 1:10
tc filter add dev em2 protocol ip parent 1: u32 match ip src 10.0.0.0/16 match ip dst 95.153.151.61  flowid 1:10

# Всё, что до коммутаторов (vlan100) идёт в 30 класс ==================================
tc filter add dev em2 protocol ip parent 1: u32 match ip dst 192.168.7.0/24 flowid 1:30

# Телик (OTT) идёт в 40 класс =========================================================
tc filter add dev em2 protocol ip parent 1: u32 match ip src 81.23.6.224/27 flowid 1:40
tc filter add dev em2 protocol ip parent 1: u32 match ip src 95.163.68.48/28 flowid 1:40

# Создаём хэш-таблицу 10: и отсылаем в неё трафик =====================================
tc filter add dev em2 parent 1:0 handle 10: protocol ip u32 divisor 256
tc filter add dev em2 parent 1:0 protocol ip u32 ht 801:: match ip dst 0.0.0.0/0 hashkey mask 0xff at 16 link 10:

 

В файлах абонентов оставить без pref?

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


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

asid2006

Везде.Абсолютно. Именно абонентские фильтры без pref создают кучу лишнего (проверил у себя).

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

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


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

asid2006

Везде.Абсолютно. Именно абонентские фильтры без pref создают кучу лишнего (проверил у себя).

 

Сделал. Пока вроде всё работает очень даже неплохо. Посмотрю какая нагрузка будет в пиковое время

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


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

Join the conversation

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

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

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

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

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

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

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