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

FreeBSD 8 release + SMP

Имеется машина процессорок Intel® Core2 Quad CPU Q9550 @ 2.83GHz, карточка Intel PT DualPort выполняет функции BGP. Софт стоит Quagga, еще есть pf, но он натит всего 1 маленькую сетку на 10-15 компов (офис). Через машину валит трафик ~ 400 MBit симметрично / 150-170 kpps через обе сетевухи или ~ 80 kpps полезного трафа. netstat не показывает error`ов или еще чего либо плохого, но смущает нагрузка всего на два ядра. Ядро OS - GENERIC, не пересобирал. Вот вывод top -SP (не в моменты пиковой нагрузки):

last pid: 23560; load averages: 0.64, 0.60, 0.58 up 3+04:01:19 10:47:20

110 processes: 5 running, 81 sleeping, 24 waiting

CPU 0: 0.0% user, 0.0% nice, 30.0% system, 0.0% interrupt, 70.0% idle

CPU 1: 0.0% user, 0.0% nice, 0.4% system, 0.0% interrupt, 99.6% idle

CPU 2: 0.0% user, 0.0% nice, 0.0% system, 0.0% interrupt, 100% idle

CPU 3: 0.0% user, 0.0% nice, 34.5% system, 0.0% interrupt, 65.5% idle

Mem: 321M Active, 215M Inact, 300M Wired, 32K Cache, 112M Buf, 2116M Free

Swap: 10G Total, 10G Free

 

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND

11 root 4 171 ki31 0K 32K CPU0 0 251.3H 341.50% idle

0 root 11 -68 0 0K 80K - 2 30.5H 36.82% kernel

467 root 1 44 - 0K 8K pftm 2 32:18 0.05% pfpurge

12 root 24 -44 - 0K 192K WAIT 0 20.3H 0.00% intr

1205 root 1 44 0 159M 157M select 2 30:18 0.00% bgpd

13 root 1 44 - 0K 8K - 0 10:16 0.00% yarrow

3848 root 1 44 0 87200K 83048K select 1 4:33 0.00% snmpd

16 root 1 44 - 0K 8K syncer 0 4:14 0.00% syncer

1239 root 1 44 0 4864K 2424K select 2 1:04 0.00% ntpd

1203 root 1 44 0 85036K 83244K select 3 0:54 0.00% zebra

4 root 1 -8 - 0K 8K - 0 0:12 0.00% g_down

3 root 1 -8 - 0K 8K - 0 0:12 0.00% g_up

2 root 1 -8 - 0K 8K - 0 0:12 0.00% g_event

 

# sysctl net.isr

net.isr.numthreads: 4

net.isr.defaultqlimit: 256

net.isr.maxqlimit: 10240

net.isr.bindthreads: 0

net.isr.maxthreads: 4

net.isr.direct: 1

net.isr.direct_force: 1

 

Сразу оговорюсь, что в системе есть еще 2 сетевухи em, причем одна встроенная и без своего interrupt`а? vmstat -i

interrupt total rate

irq14: ata0 126946 0

cpu0: timer 832215140 3039

irq256: em0 1738258113 6348

irq257: em1 1978255903 7225

irq259: em3 4134692 15

cpu1: timer 832215622 3039

cpu3: timer 833700449 3045

cpu2: timer 833700898 3045

Total 7052607763 25759

 

С net.isr.direct=0 игрался, начинаются interrupt`ы на CPU1 и CPU2, вместо system на CPU0 и CPU3 при net.isr.direct=1. Соответственно вопрос, не ужели нельзя никак забалансировать system на все CPU?

 

# cat /boot/loader.conf

net.isr.maxthreads=4

net.inet.ip.intr_queue_maxlen=1024

net.route.netisr_maxqlen=1024

hw.em.rxd=4096

hw.em.txd=4096

net.isr.direct=1

net.isr.direct_arp=1

net.inet.ip.fastforwarding=0

net.inet.flowtable.enable=0

kern.hz=3000

 

 

 

 

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


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

нельзя

Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :)

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


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

Система в целом нагружена на 15%, чего опасаетесь?

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


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

Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :)

С такой прокладкой на линухе будет то же самое.

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


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

Вопрос с "подковыкой" :). Почему тогда net.isr.maxthreads дал эффект на аналогичной машине, только выполняющей роль бриджа, а не роутера? Неужели FreeBSD в этом плане хуже Linux, у которого irqbalance легко справится с этой задачей? :)

С такой прокладкой на линухе будет то же самое.

Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить?

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


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

Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить?

без top -SPH и sysctl -a трудно сказать, но подозреваю что нагрузку дает pf, он не параллелится в принципе. То, что Вы натите там только мелкую сетку, не означает,

что туда не попадает весь трафик, кроме того, возможно там включен default stateful behavior, scrub in all, не прописаны лимиты и таймауты, etc.

 

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


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

Хорошо, перефразирую свой вопрос. Где допущена ошибка и как исправить?

без top -SPH и sysctl -a трудно сказать, но подозреваю что нагрузку дает pf, он не параллелится в принципе. То, что Вы натите там только мелкую сетку, не означает,

что туда не попадает весь трафик, кроме того, возможно там включен default stateful behavior, scrub in all, не прописаны лимиты и таймауты, etc.

# top -SPH

last pid: 24610; load averages: 1.05, 0.97, 0.92 up 3+10:27:35 17:13:36

110 processes: 6 running, 80 sleeping, 24 waiting

CPU 0: 0.0% user, 0.0% nice, 48.5% system, 0.0% interrupt, 51.5% idle

CPU 1: 0.0% user, 0.0% nice, 0.0% system, 0.4% interrupt, 99.6% idle

CPU 2: 0.0% user, 0.0% nice, 2.3% system, 0.0% interrupt, 97.7% idle

CPU 3: 0.0% user, 0.0% nice, 42.3% system, 0.0% interrupt, 57.7% idle

Mem: 321M Active, 215M Inact, 300M Wired, 32K Cache, 112M Buf, 2116M Free

Swap: 10G Total, 10G Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND

11 root 171 ki31 0K 32K RUN 2 71.5H 100.00% {idle: cpu2}

11 root 171 ki31 0K 32K CPU1 1 71.7H 96.58% {idle: cpu1}

11 root 171 ki31 0K 32K CPU0 0 64.5H 55.91% {idle: cpu0}

11 root 171 ki31 0K 32K CPU3 3 64.5H 54.05% {idle: cpu3}

0 root -68 0 0K 80K CPU0 0 17.5H 44.43% {em1 taskq}

0 root -68 0 0K 80K - 3 17.7H 21.73% {em0 taskq}

467 root 44 - 0K 8K pftm 2 35:15 0.24% pfpurge

12 root -44 - 0K 192K WAIT 2 615:30 0.00% {swi1: netisr 3}

12 root -44 - 0K 192K WAIT 2 594:43 0.00% {swi1: netisr 2}

1205 root 44 0 159M 157M select 1 32:56 0.00% bgpd

13 root 44 - 0K 8K - 2 11:09 0.00% yarrow

3848 root 44 0 87200K 83304K select 2 5:05 0.00% snmpd

16 root 44 - 0K 8K syncer 2 4:44 0.00% syncer

 

sysctl -a великоват для публикации тут, могу выборочно кинуть нужное. Честно говоря, идея в принципе рациональная, что в pf попадает весь трафик и, видимо от него придется отказаться. Вопрос на засыпку, если я остановлю его на боевой машине (/etc/rc.d/pf stop) - не приведет ли это к зависанию и действительно ли будет выключен функционал pf ? (чтобы протестить нагрузку)

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


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

Сначала попробуйте

> cat /boot/loader.conf | grep _int_
hw.em.tx_int_delay=128
hw.em.rx_int_delay=128
hw.em.tx_abs_int_delay=512
hw.em.rx_abs_int_delay=512

Цифры по вкусу под нагрузку.

 

net.inet.ip.fastforwarding=0
Не знал, что sysctl можно в loader.conf пихать.

 

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


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

Вопрос на засыпку, если я остановлю его на боевой машине (/etc/rc.d/pf stop) - не приведет ли это к зависанию и действительно ли будет выключен функционал pf ? (чтобы протестить нагрузку)
Должно порвать все TCP коннекты, и ссш придётся переконекчивать.

Чтобы наверняка - соберите ядро без него и не загружайте модулем.

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


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

Должно порвать все TCP коннекты, и ссш придётся переконекчивать.

С чего бы это?

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


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

У меня всегда рвало, как минимум когда я PF перезапускал.

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


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

Короче, сегодня произошел незапланированный рестарт, но зато я не грузанул pf. Нагрузка средняя и балансировка по прежнему отсутствует как класс :) Никак главное не пойму, почему tasq на em1 только большой, хотя em0 и em1 участвуют в прогоне трафа, а на em2 и em3 сейчас резерв (с небольшой подгрузкой ~ 10 Mbit) и обменник на em3 ~ на 40-50 Mbit в пике. Что я делаю не так? (хочу разбалансировать нагрузку по 4 ядрам)

 

# kldstat

Id Refs Address Size Name

1 1 0xc0400000 b6dfe0 kernel

 

# vmstat -i

interrupt total rate

irq14: ata0 46406 11

irq16: uhci0 1 0

cpu0: timer 12513486 3041

irq256: em0 31277230 7602

irq257: em1 32008290 7780

irq258: em2 10821474 2630

irq259: em3 6918408 1681

cpu1: timer 12513321 3041

cpu3: timer 12483561 3034

cpu2: timer 12483551 3034

Total 131065728 31858

 

# netstat -w 1

input (Total) output

packets errs bytes packets errs bytes colls

101958 0 69477501 101967 0 71940276 0

104938 0 71648209 104935 0 74010089 0

99603 0 67878764 99605 0 70201522 0

100486 0 69700114 100479 0 71838516 0

101432 0 68868766 101433 0 71125097 0

99741 0 66871816 99724 0 69186505 0

102380 0 68773855 102394 0 71016161 0

100447 0 67317957 100451 0 69527149 0

 

# top -SPH

last pid: 1646; load averages: 0.46, 0.60, 0.57 up 0+01:10:40 00:22:12

109 processes: 5 running, 80 sleeping, 24 waiting

CPU 0: 0.0% user, 0.0% nice, 19.6% system, 0.0% interrupt, 80.4% idle

CPU 1: 0.0% user, 0.0% nice, 2.7% system, 0.0% interrupt, 97.3% idle

CPU 2: 0.0% user, 0.0% nice, 2.7% system, 0.0% interrupt, 97.3% idle

CPU 3: 0.0% user, 0.0% nice, 23.1% system, 0.0% interrupt, 76.9% idle

Mem: 300M Active, 8120K Inact, 122M Wired, 112K Cache, 12M Buf, 2522M Free

Swap: 10G Total, 10G Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND

11 root 171 ki31 0K 32K CPU2 2 66:40 100.00% {idle: cpu2}

11 root 171 ki31 0K 32K CPU1 1 66:19 94.78% {idle: cpu1}

11 root 171 ki31 0K 32K CPU0 0 54:22 82.57% {idle: cpu0}

11 root 171 ki31 0K 32K RUN 3 51:32 75.15% {idle: cpu3}

0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq}

0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq}

0 root -68 0 0K 80K - 1 1:35 0.83% {em2 taskq}

12 root -44 - 0K 192K WAIT 2 1:59 0.00% {swi1: netisr 3}

12 root -44 - 0K 192K WAIT 0 1:35 0.00% {swi1: netisr 2}

0 root -68 0 0K 80K - 2 0:53 0.00% {em3 taskq}

1210 root 44 0 143M 142M select 1 0:51 0.00% bgpd

12 root -44 - 0K 192K WAIT 0 0:14 0.00% {swi1: netisr 1}

1244 root 44 0 4864K 2384K select 3 0:10 0.00% ntpd

 

 

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


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

em1 - input, em0 - output ?

em1 - out ; em0 - in

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


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

em1 - out ; em0 - in
0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq}

0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq}

то оно без фаервола так рисует?

sysctl dev.em.1.debug=1

sysctl dev.em.1.stats=1

и читать /var/log/messages

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

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


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

em1 - out ; em0 - in
0 root -68 0 0K 80K - 0 15:03 22.56% {em1 taskq}

0 root -68 0 0K 80K - 3 17:49 2.34% {em0 taskq}

то оно без фаервола так рисует?

sysctl dev.em.1.debug=1

sysctl dev.em.1.stats=1

и читать /var/log/messages

# sysctl dev.em.1.debug=1

em1: Adapter hardware address = 0xc6783424

em1: CTRL = 0xc0241 RCTL = 0x8002

em1: Packet buffer = Tx=16k Rx=32k

em1: Flow control watermarks high = 30720 low = 29220

em1: tx_int_delay = 66, tx_abs_int_delay = 66

em1: rx_int_delay = 0, rx_abs_int_delay = 66

em1: fifo workaround = 0, fifo_reset_count = 0

em1: hw tdh = 2234, hw tdt = 2234

em1: hw rdh = 2438, hw rdt = 2437

em1: Num Tx descriptors avail = 4096

em1: Tx Descriptors not avail1 = 0

em1: Tx Descriptors not avail2 = 0

em1: Std mbuf failed = 0

em1: Std mbuf cluster failed = 0

em1: Driver dropped packets = 0

em1: Driver tx dma failure in encap = 0

 

# sysctl dev.em.1.stats=1

em1: Excessive collisions = 0

em1: Sequence errors = 0

em1: Defer count = 0

em1: Missed Packets = 184

em1: Receive No Buffers = 86

em1: Receive Length Errors = 0

em1: Receive errors = 0

em1: Crc errors = 0

em1: Alignment errors = 0

em1: Collision/Carrier extension errors = 0

em1: RX overruns = 1

em1: watchdog timeouts = 0

em1: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0

em1: XON Rcvd = 0

em1: XON Xmtd = 0

em1: XOFF Rcvd = 0

em1: XOFF Xmtd = 0

em1: Good Packets Rcvd = 1774732194

em1: Good Packets Xmtd = 2229337079

em1: TSO Contexts Xmtd = 21

em1: TSO Contexts Failed = 0

 

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


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

dev.em.1.*_*_delay не крутились, можно поиграться

 

а так, все нормально, разве что, разобраться, какой именно трафик, насилует em1.

хотя, при таком ппс+мегабит, у меня примерно такая ж нагрузка.

А что баллансировать собираетесь? Есть em1, у него одно irq, вот оно и обрабатываеться одним процессором, ну, можете для гарантии прибить его к одному процу cpuset-ом.

Можно поставить двайвера от яндекса и получить несколько irq на одну карточку. Картика помяняется, в остальном - на любителя.

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


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

dev.em.1.*_*_delay не крутились, можно поиграться

 

а так, все нормально, разве что, разобраться, какой именно трафик, насилует em1.

хотя, при таком ппс+мегабит, у меня примерно такая ж нагрузка.

А что баллансировать собираетесь? Есть em1, у него одно irq, вот оно и обрабатываеться одним процессором, ну, можете для гарантии прибить его к одному процу cpuset-ом.

Можно поставить двайвера от яндекса и получить несколько irq на одну карточку. Картика помяняется, в остальном - на любителя.

На сколько я понимаю, в Linux irqbalance с легкостью бы разнес весь трафик по 4 ядрам. К тому же рядом есть полностью аналогичная машина, только ее задача из em0 и em1 сделать бридж, так там после net.isr.numthreads=4 нагрузка в действительности легла на все 4 ядра.

 

# top -SPH

last pid: 95661; load averages: 0.73, 0.66, 0.59 up 13+16:25:25 18:44:14

136 processes: 5 running, 108 sleeping, 23 waiting

CPU 0: 1.9% user, 0.0% nice, 3.4% system, 0.0% interrupt, 94.8% idle

CPU 1: 4.1% user, 0.0% nice, 18.4% system, 0.4% interrupt, 77.1% idle

CPU 2: 1.1% user, 0.0% nice, 33.1% system, 0.0% interrupt, 65.8% idle

CPU 3: 0.0% user, 0.0% nice, 18.0% system, 0.0% interrupt, 82.0% idle

Mem: 65M Active, 295M Inact, 202M Wired, 48K Cache, 112M Buf, 2693M Free

Swap: 4096M Total, 4096M Free

 

PID USERNAME PRI NICE SIZE RES STATE C TIME WCPU COMMAND

11 root 171 ki31 0K 32K RUN 0 285.2H 93.07% {idle: cpu0}

11 root 171 ki31 0K 32K CPU3 3 261.6H 80.86% {idle: cpu3}

11 root 171 ki31 0K 32K CPU2 2 247.0H 78.56% {idle: cpu2}

11 root 171 ki31 0K 32K RUN 1 280.9H 65.67% {idle: cpu1}

6127 root 44 -15 7908K 6736K select 0 50.5H 3.76% {ipcad}

0 root -68 0 0K 72K - 2 80.9H 0.00% {em0 taskq}

0 root -68 0 0K 72K - 3 64.0H 0.00% {em1 taskq}

0 root -68 0 0K 72K - 1 31.0H 0.00% {dummynet}

12 root -32 - 0K 184K WAIT 0 121:51 0.00% {swi4: clock}

12 root -28 - 0K 184K WAIT 0 41:46 0.00% {swi5: +}

818 root 44 0 29172K 26176K select 0 31:16 0.00% snmpd

6127 root 44 -15 7908K 6736K nanslp 1 25:15 0.00% {ipcad}

17 root 44 - 0K 8K syncer 2 21:38 0.00% syncer

 

При этом никакой дополнительной пересборки не было, разьве что убран pf и жестко вкомпилен ipfw.

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


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

подозреваю драйвер линух пишет какойто доголнительный еггог, типа "Е657854: плиз сич фак анд гугле" :)

у Вас трафик и так разнесен, если внимательно смотреть, {em1 taskq} прыгает по разным ядрам, просто оно одно, вот оно и загружено.

Топ во фре рисует "плоскую" картинку, в отличии от cat /proc/interrupts в линихе

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


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

подозреваю драйвер линух пишет какойто доголнительный еггог, типа "Е657854: плиз сич фак анд гугле" :)

у Вас трафик и так разнесен, если внимательно смотреть, {em1 taskq} прыгает по разным ядрам, просто оно одно, вот оно и загружено.

Топ во фре рисует "плоскую" картинку, в отличии от cat /proc/interrupts в линихе

Тогда почему загружены только CPU0 и CPU3 в отличии от предыдущей картинки, где равномерно заргужены все ядра? Может быть попробовать увеличить net.isr.maxthreads? (то есть сделать их кол-во большим, чем кол-во ядер)

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


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

Join the conversation

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

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

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

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

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

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

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