Jump to content

HP PROLIANT DL380 G6 загрузка ядра


Recommended Posts

Прошу помощи у линуксоидов.

Имеется HP PROLIANT DL380 G6 2xL5640

Траффик ~1.5Gb

Загружается только 1 ядро, на ~100%. Как распаралелить нагрузку по ядрам?

# uname -a
Linux bras 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u2 x86_64 GNU/Linux

Используется linux bonding.

# lspci| grep -i ether
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
03:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
03:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)

post-4773-0-92623300-1419162169_thumb.png

Edited by morfey
Link to post
Share on other sites
  • Replies 65
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Почему много? С 1.5Г НАТа же.

Posted Images

Пробовали компилировать ядро 3.18.1 или 3.17.7?

 

Нет. А что там изменено в сравнении с 3.2 в этом плане?

Edited by morfey
Link to post
Share on other sites

Пока решил проблему с помощью irqbalance

Это правильное решение?

 

~

Появильсь ошибки на интерфейсах.

 

Тюнинг такой:

net.ipv4.ip_forward = 1
net.ipv4.neigh.default.gc_thresh1 = 4096
net.ipv4.neigh.default.gc_thresh2 = 8192
net.ipv4.neigh.default.gc_thresh3 = 12288
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.nf_conntrack_max = 9548576
net.ipv4.netfilter.ip_conntrack_max = 9548576
net.netfilter.nf_conntrack_max = 9548576
net.ipv4.tcp_fin_timeout = 10
#Disable IPV6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.all.autoconf = 0
net.ipv6.conf.all.accept_ra = 0
net.core.warnings = 0
net.ipv4.tcp_mem = 786432 1048576 1572864
net.netfilter.nf_conntrack_tcp_timeout_established = 120
net.netfilter.nf_conntrack_generic_timeout = 120


# cat /sys/module/nf_conntrack/parameters/hashsize
1193572


# sysctl -a | grep nf_conntrack_count
net.netfilter.nf_conntrack_count = 221533

Edited by morfey
Link to post
Share on other sites

У тебя по прерываниями проблема, имеющийся тюнинг не имеет к этому отношения.

irqbalance лучше не использовать.

Покажи cat /proc/interrupts | grep eth

Link to post
Share on other sites

Временно решил:

modprobe bnx2 disable_msi=1
ncpus=`grep -ciw ^processor /proc/cpuinfo`
test "$ncpus" -gt 1 || exit 1

n=0
for irq in `cat /proc/interrupts | grep eth | awk '{print $1}' | sed s/\://g`
do
    f="/proc/irq/$irq/smp_affinity"
    test -r "$f" || continue
    cpu=$[$ncpus - ($n % $ncpus) - 1]
    if [ $cpu -ge 0 ]
            then
                mask=`printf %x $[2 ** $cpu]`
                echo "Assign SMP affinity: eth$n, irq $irq, cpu $cpu, mask 0x$mask"
                echo "$mask" > "$f"
                let n+=1
    fi
done

Распределилось только на 4 ядра, но нет ошибок на интерфейсах, можно решение поискать спокойно) 

post-4773-0-95477000-1419169254_thumb.png

Link to post
Share on other sites

Надо просто раскидать прерывания от сетевок и их очередей по ядрам, по умолчанию все на 0ом и висит.

Задача абсолютно стандартна, никакой тюнинг не нужен.

irqbalance один из вариантов решения, но лучше его выключить и раскидывать вручную.

Link to post
Share on other sites

Надо просто раскидать прерывания от сетевок и их очередей по ядрам, по умолчанию все на 0ом и висит.

Задача абсолютно стандартна, никакой тюнинг не нужен.

irqbalance один из вариантов решения, но лучше его выключить и раскидывать вручную.

Да, я так и сделал скриптом. Но на интерфейсах ошибки появляются...

 

del

скачивайте результат через download. дофига текста.

 

http://91.234.0.2/iter.htm

Edited by morfey
Link to post
Share on other sites

Страшный ты человек.. Выключи HT, 24 ядра для роутера это явный перебор и причина бед.

Ну не очень страшный))

 

HT - Hyper Threading ? В биосе?

Поможет?

Edited by morfey
Link to post
Share on other sites

Не помогло. Когда раскидаю прерывания по ядрам, на интерфейсах ошибки лезут, пинги с потерями и т.д...
 
Опять же при включенной disable_msi=1 раскидаю все по ядрам (4 ядра). Все работает, но только на 4 ядрах.

# cat /proc/interrupts | grep eth
  16:          3          0          0          0          0          0          0          0          0          0          0     771894   IO-APIC-fasteoi   eth0
  17:          3          0          0          0          0          0          0          0          0          0    3420298          0   IO-APIC-fasteoi   eth1
  18:          2          0          0          0          0          0          0          0          0    2507771          0          0   IO-APIC-fasteoi   eth2
  19:          2          0          0          0          0          0          0          0    2139051          0          0          0   IO-APIC-fasteoi   eth3

Не пойму, карты говно? Есть в наличии Intel® Gigabit ET Dual Port Server Adapter на чипе 82576. Может заменить?

post-4773-0-93397300-1419173173_thumb.png

Edited by morfey
Link to post
Share on other sites

Не, карты нормальные, свой гиг пропускают гарантированно.

Покажи top и proc/interrupts с включенными очередями и раскиданными прерываниями.

Должно быть как-то так http://pastebin.com/ZJxciqPa (dl380 g6 с теми же картами, прерывания раскиданы "лесенкой" на 6 ядер).

 

Еще покажите

ethtool -g eth0

cat /proc/sys/net/core/netdev_max_backlog

ifconfig eth0 | grep txqueuelen

Edited by KaYot
Link to post
Share on other sites

А карты говно всетаки.

Ставь Интел, там плюшек больше. Да и платформа вообщето старенькая... Я бы сразу 10Г интеловую ставил и не морочился с гигами, ну и новая корка И7 сделает эти ксеоны.

Еще бы глянуть сколько правил фаервола )

Link to post
Share on other sites

# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:		4096
RX Mini:	0
RX Jumbo:	0
TX:		4096
Current hardware settings:
RX:		256
RX Mini:	0
RX Jumbo:	0
TX:		256

# cat /proc/sys/net/core/netdev_max_backlog
1000

# ifconfig eth0 | grep txqueuelen 
          collisions:0 txqueuelen:1000

Увеличивал до 10000

 

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

Link to post
Share on other sites

txqueuelen не повлияет на ошибки никак.

Ring parameters - можно увеличить до 2048, но это уменьшит прерывания, но не избавит от ошибок.

 

Че там еще на серваке крутится ? фаервол, нат - сколько трансляций ?

Link to post
Share on other sites

txqueuelen не повлияет на ошибки никак.

Ring parameters - можно увеличить до 2048, но это уменьшит прерывания, но не избавит от ошибок.

 

Че там еще на серваке крутится ? фаервол, нат - сколько трансляций ?

NAT, фаервол

Сейчас загрузка ~1.5Г без ошибок с отключенными прерываниями на картах, 

Link to post
Share on other sites

Ну если загрузка устраивает - так и оставьте.

Но лучше включите очереди и увеличивайте ring buffer. Заодно можно и очереди отправки увеличить, хуже точно не будет.

Весь мой "тюнинг":

echo 10000 > /proc/sys/net/core/netdev_max_backlog

ethtool -G eth0 rx 1024

ifconfig eth0 txqueuelen 10000

 

Карты нормальные, буфера большие, очереди умеют - что еще роутеру надо?

Edited by KaYot
Link to post
Share on other sites

Нужны данные в момент глюков, с очередями и без HT.

Размеры буферов меняются в онлайне без потери сервера, попробуйте для начала.

Edited by KaYot
Link to post
Share on other sites

Опять же при включенной disable_msi=1 раскидаю все по ядрам (4 ядра). Все работает, но только на 4 ядрах.

Ну без msi по другому никак, а зачем вам больше ядер?
Link to post
Share on other sites

 

Опять же при включенной disable_msi=1 раскидаю все по ядрам (4 ядра). Все работает, но только на 4 ядрах.

Ну без msi по другому никак, а зачем вам больше ядер?

 

Ну затем что загрузка каждого из 4 = ~80%

 

Нужны данные в момент глюков, с очередями и без HT.

Размеры буферов меняются в онлайне без потери сервера, попробуйте для начала.

Размеры буферов да, выставил. А чтобы включить прерывания на карте, нужно модуль перегрузить, доступ пропадет.

Edited by morfey
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
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...