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

FreeBSD 8.0-RELEASE & em taskq 100% Дропы на em.

Имеем платформу: шасси Intel SR1520CLR; плата Intel S5000VCL; процессоры Intel Xeon 2xE5450; память 8Gb(4x2Gb). На плате сетевой контроллер HY82563EB.

Из софта - amd64 FreeBSD 8.0-RELEASE + ipnat + bgpd больше ничего, pf - пустой. flowcontrol на какалисте отключен, патчкорды - заменены, счётчики со стороны коммутатора - ошибок0.

 

em taskq по обеим сетевым картам догоняется до 100% и начинаются дикие дропы. Перекрутил всё что можно. Баг драйвера/чипа? Менять платформу или докупать "нормальные" сетевые карты x4 ?

 

Есть соображения?

 

#pciconf -lv | grep em -A4
em0@pci0:4:0:0: class=0x020000 card=0x34808086 chip=0x10968086 rev=0x01 hdr=0x00
   vendor     = 'Intel Corporation'
   device     = 'Intel PRO/1000 EB (Intel PRO/1000 EB)'
   class      = network
   subclass   = ethernet
em1@pci0:4:0:1: class=0x020000 card=0x34808086 chip=0x10968086 rev=0x01 hdr=0x00
   vendor     = 'Intel Corporation'
   device     = 'Intel PRO/1000 EB (Intel PRO/1000 EB)'
   class      = network
   subclass   = ethernet
# top -SHP 10
last pid:  2495;  load averages:  1.98,  1.12,  0.97                                                                                  up 0+01:04:43  14:06:34
115 processes: 12 running, 84 sleeping, 19 waiting
CPU 0:  0.0% user,  0.0% nice,  0.0% system,  1.6% interrupt, 98.4% idle
CPU 1:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% 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,  0.0% system,  0.0% interrupt,  100% idle
CPU 4:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
CPU 5:  0.0% user,  0.0% nice,  100% system,  0.0% interrupt,  0.0% idle
CPU 6:  0.0% user,  0.0% nice,  100% system,  0.0% interrupt,  0.0% idle
CPU 7:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Mem: 194M Active, 17M Inact, 254M Wired, 1552K Cache, 59M Buf, 7420M Free
Swap: 2048M Total, 2048M Free
 PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  11 root     171 ki31     0K   128K CPU3    3  64:04 100.00% {idle: cpu3}
  11 root     171 ki31     0K   128K CPU7    7  64:03 100.00% {idle: cpu7}
  11 root     171 ki31     0K   128K CPU2    2  64:02 100.00% {idle: cpu2}
  11 root     171 ki31     0K   128K CPU4    4  64:01 100.00% {idle: cpu4}
  11 root     171 ki31     0K   128K RUN     1  63:56 100.00% {idle: cpu1}
  11 root     171 ki31     0K   128K CPU0    0  63:53 100.00% {idle: cpu0}
   0 root     -68    0     0K   128K CPU5    5  34:43 100.00% {em0 taskq}
   0 root     -68    0     0K   128K CPU6    6  35:04 99.22% {em1 taskq}
  11 root     171 ki31     0K   128K RUN     5  29:21  0.00% {idle: cpu5}
  11 root     171 ki31     0K   128K RUN     6  28:55  0.00% {idle: cpu6}
#ipnat -s
mapped  in      56960398        out     46450124
added   2116713 expired 899802
no memory       0       bad nat 53680
inuse   153279
orphans 0
rules   11
wilds   2
hash efficiency 21.17%
bucket usage    99.04%
minimal length  0
maximal length  14
average length  4.723
TCP Entries per state
    0     1     2     3     4     5     6     7     8     9    10    11
   64  9142   638   169  6829  1502  1181   146    71     0 52942  2223
#netstat -w 1
           input        (Total)           output
  packets  errs      bytes    packets  errs      bytes colls
    70877     0   52707660      69823     0   53552204     0
    77741     0   59421254      77236     0   60390869     0
    60818     0   42946734      60705     0   43700356     0
    74790     0   55339974      75180     0   56223304     0
    69843     0   51168760      69556     0   51922404     0
    75589     0   54066274      75302     0   54760740     0
    70394     0   49559422      70050     0   50185198     0
    62569     0   42527506      61335     0   43054657     0
    24572   240   12885944      25087     0   13099941     0
    24470   195   13088474      24324     0   13251497     0
    21694   449   12366204      21473     0   12498255     0
    23362   179   13196550      22716     0   13299346     0
    21030   225   11287284      20594     0   11475381     0
    19974   783   10630106      19565     0   10684715     0
    20530   159   10819506      20869     0   11005304     0
    19882     6   10153908      19209     0   10257941     0
    21820   268   11455458      22130     0   11560552     0
#
Mar  2 14:10:46 artek kernel: em0: Adapter hardware address = 0xffffff80005dd530
Mar  2 14:10:46 artek kernel: em0: CTRL = 0x401c4241 RCTL = 0x8002
Mar  2 14:10:46 artek kernel: em0: Packet buffer = Tx=16k Rx=32k
Mar  2 14:10:46 artek kernel: em0: Flow control watermarks high = 30720 low = 29220
Mar  2 14:10:46 artek kernel: em0: tx_int_delay = 600, tx_abs_int_delay = 1000
Mar  2 14:10:46 artek kernel: em0: rx_int_delay = 0, rx_abs_int_delay = 1000
Mar  2 14:10:46 artek kernel: em0: fifo workaround = 0, fifo_reset_count = 0
Mar  2 14:10:46 artek kernel: em0: hw tdh = 135, hw tdt = 135
Mar  2 14:10:46 artek kernel: em0: hw rdh = 334, hw rdt = 333
Mar  2 14:10:46 artek kernel: em0: Num Tx descriptors avail = 4096
Mar  2 14:10:46 artek kernel: em0: Tx Descriptors not avail1 = 0
Mar  2 14:10:46 artek kernel: em0: Tx Descriptors not avail2 = 0
Mar  2 14:10:46 artek kernel: em0: Std mbuf failed = 0
Mar  2 14:10:46 artek kernel: em0: Std mbuf cluster failed = 0
Mar  2 14:10:46 artek kernel: em0: Driver dropped packets = 0
Mar  2 14:10:46 artek kernel: em0: Driver tx dma failure in encap = 0
Mar  2 14:10:48 artek kernel: em1: Adapter hardware address = 0xffffff800061b530
Mar  2 14:10:48 artek kernel: em1: CTRL = 0x401c4241 RCTL = 0x8002
Mar  2 14:10:48 artek kernel: em1: Packet buffer = Tx=16k Rx=32k
Mar  2 14:10:48 artek kernel: em1: Flow control watermarks high = 30720 low = 29220
Mar  2 14:10:48 artek kernel: em1: tx_int_delay = 600, tx_abs_int_delay = 1000
Mar  2 14:10:48 artek kernel: em1: rx_int_delay = 0, rx_abs_int_delay = 1000
Mar  2 14:10:48 artek kernel: em1: fifo workaround = 0, fifo_reset_count = 0
Mar  2 14:10:48 artek kernel: em1: hw tdh = 3017, hw tdt = 3017
Mar  2 14:10:48 artek kernel: em1: hw rdh = 3215, hw rdt = 3212
Mar  2 14:10:48 artek kernel: em1: Num Tx descriptors avail = 4096
Mar  2 14:10:48 artek kernel: em1: Tx Descriptors not avail1 = 0
Mar  2 14:10:48 artek kernel: em1: Tx Descriptors not avail2 = 0
Mar  2 14:10:48 artek kernel: em1: Std mbuf failed = 0
Mar  2 14:10:48 artek kernel: em1: Std mbuf cluster failed = 0
Mar  2 14:10:48 artek kernel: em1: Driver dropped packets = 0
Mar  2 14:10:48 artek kernel: em1: Driver tx dma failure in encap = 0
Mar  2 14:10:56 artek kernel: em0: Excessive collisions = 0
Mar  2 14:10:56 artek kernel: em0: Sequence errors = 0
Mar  2 14:10:56 artek kernel: em0: Defer count = 0
Mar  2 14:10:56 artek kernel: em0: Missed Packets = 11182
Mar  2 14:10:56 artek kernel: em0: Receive No Buffers = 180
Mar  2 14:10:56 artek kernel: em0: Receive Length Errors = 0
Mar  2 14:10:56 artek kernel: em0: Receive errors = 0
Mar  2 14:10:56 artek kernel: em0: Crc errors = 0
Mar  2 14:10:56 artek kernel: em0: Alignment errors = 0
Mar  2 14:10:56 artek kernel: em0: Collision/Carrier extension errors = 0
Mar  2 14:10:56 artek kernel: em0: RX overruns = 4
Mar  2 14:10:56 artek kernel: em0: watchdog timeouts = 0
Mar  2 14:10:56 artek kernel: em0: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0
Mar  2 14:10:56 artek kernel: em0: XON Rcvd = 0
Mar  2 14:10:56 artek kernel: em0: XON Xmtd = 0
Mar  2 14:10:56 artek kernel: em0: XOFF Rcvd = 0
Mar  2 14:10:56 artek kernel: em0: XOFF Xmtd = 0
Mar  2 14:10:56 artek kernel: em0: Good Packets Rcvd = 60371538
Mar  2 14:10:56 artek kernel: em0: Good Packets Xmtd = 48744229
Mar  2 14:10:56 artek kernel: em0: TSO Contexts Xmtd = 0
Mar  2 14:10:56 artek kernel: em0: TSO Contexts Failed = 0
Mar  2 14:10:58 artek kernel: em1: Excessive collisions = 0
Mar  2 14:10:58 artek kernel: em1: Sequence errors = 0
Mar  2 14:10:58 artek kernel: em1: Defer count = 0
Mar  2 14:10:58 artek kernel: em1: Missed Packets = 448453
Mar  2 14:10:58 artek kernel: em1: Receive No Buffers = 410975
Mar  2 14:10:58 artek kernel: em1: Receive Length Errors = 0
Mar  2 14:10:58 artek kernel: em1: Receive errors = 0
Mar  2 14:10:58 artek kernel: em1: Crc errors = 0
Mar  2 14:10:58 artek kernel: em1: Alignment errors = 0
Mar  2 14:10:58 artek kernel: em1: Collision/Carrier extension errors = 0
Mar  2 14:10:58 artek kernel: em1: RX overruns = 2089
Mar  2 14:10:58 artek kernel: em1: watchdog timeouts = 0
Mar  2 14:10:58 artek kernel: em1: RX MSIX IRQ = 0 TX MSIX IRQ = 0 LINK MSIX IRQ = 0
Mar  2 14:10:58 artek kernel: em1: XON Rcvd = 0
Mar  2 14:10:58 artek kernel: em1: XON Xmtd = 0
Mar  2 14:10:58 artek kernel: em1: XOFF Rcvd = 0
Mar  2 14:10:58 artek kernel: em1: XOFF Xmtd = 0
Mar  2 14:10:58 artek kernel: em1: Good Packets Rcvd = 48575954
Mar  2 14:10:58 artek kernel: em1: Good Packets Xmtd = 59456733
Mar  2 14:10:58 artek kernel: em1: TSO Contexts Xmtd = 0
Mar  2 14:10:58 artek kernel: em1: TSO Contexts Failed = 0
# cat /boot/loader.conf
hw.em.rxd=4096
hw.em.txd=4096
kern.ipc.nmbclusters=32768
vm.kmem_size=2G
vm.kmem_size_max=2G
#cat /etc/sysctl.conf
dev.em.0.rx_int_delay=600
dev.em.1.rx_int_delay=600
dev.em.0.tx_int_delay=600
dev.em.1.tx_int_delay=600
dev.em.0.rx_abs_int_delay=1000
dev.em.1.rx_abs_int_delay=1000
dev.em.0.tx_abs_int_delay=1000
dev.em.1.tx_abs_int_delay=1000
dev.em.0.rx_processing_limit=1000
dev.em.1.rx_processing_limit=1000
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.ip.intr_queue_maxlen=4096
net.inet.tcp.sendspace=65535
net.inet.tcp.recvspace=65535
net.inet.tcp.rfc1323=1
#

 

Share this post


Link to post
Share on other sites

после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done

нагрузка меньше? Если да то можно поместить например в /etc/rc.local

 

ipnat лучше заменить на ipfw nat (ng_nat)

 

после перехода выставить:

sysctl net.inet.ip.fastforwarding=1

 

 

 

Share this post


Link to post
Share on other sites

> после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done

нагрузка меньше? Если да то можно поместить например в /etc/rc.local

 

Одинаково. В sysctl значения выставляются и при перезагрузке.

 

Не могу понять, 8 ядер не могут перелопатить 80-100kk пакетов? Ну не на 72ой же нат собирать... (;

Share this post


Link to post
Share on other sites
> после выполнения команды egrep '^dev\.em\.' /etc/sysctl.conf | while read line; do sysctl $line; done

нагрузка меньше? Если да то можно поместить например в /etc/rc.local

 

Одинаково. В sysctl значения выставляются и при перезагрузке.

 

Не могу понять, 8 ядер не могут перелопатить 80-100kk пакетов? Ну не на 72ой же нат собирать... (;

не выставляются они... по systat -vm 1 видно должно быть прерывания до и после.

 

у меня на 8 ядер стоит 8 интерфейсов и все собраны через if_lagg нагрузка почти равномерная.

# netstat -w1

input (Total) output

packets errs bytes packets errs bytes colls

202242 0 123393653 196162 0 122590305 0

197818 0 119262534 192048 0 118497432 0

196336 0 119796293 190612 0 119041946 0

199774 0 121871242 194107 0 121127421 0

 

 

Share this post


Link to post
Share on other sites
Asco С чего Вы вдруг решили что все Ваши 8 ядер работают? Вы конечно не привели ни top ни systat, не сказали что у Вас в loader.conf и sysctl.conf, но здается мне, что у Вас работают только 2 ядра...

Share this post


Link to post
Share on other sites

Я не совсем пониаю, почему у вас при выставлении rx_int_delay на сетевухах в 600 истинное значение по sysctl аж...0. Не в этом ли проблема?

И что у вас выдаст по sysctl -a |grep isr?

Share this post


Link to post
Share on other sites

Может поможет:

 

#systat -vm 1
   1 users    Load  0.83  0.84  0.70                   3 мар 13:40

Mem:KB    REAL            VIRTUAL                       VN PAGER   SWAP PAGER
       Tot   Share      Tot    Share    Free           in   out     in   out
Act  199312    6208  1631736     7868 7440480  count
All  251184    6892 1075456k    12452          pages
Proc:                                                            Interrupts
 r   p   d   s   w   Csw  Trp  Sys  Int  Sof  Flt        cow   26763 total
            55      6001   30  225 2760  189   25     25 zfod        atkbd0 1
                                                         ozfod       ata0 irq14
3.6%Sys   0.0%Intr  0.0%User  0.0%Nice 96.4%Idle        %ozfod       atapci1 20
|    |    |    |    |    |    |    |    |    |    |       daefr  3001 cpu0: time
==                                                        prcfr  1405 em0 irq256
                                        5 dtbuf          totfr  1353 em1 irq257
Namei     Name-cache   Dir-cache    100000 desvn          react  3001 cpu1: time
  Calls    hits   %    hits   %      9620 numvn          pdwak  3001 cpu3: time
      8       8 100                  1376 frevn          pdpgs  3001 cpu2: time
                                                         intrn  3000 cpu6: time
Disks   ad4   ad6   ar0                            425040 wire   3000 cpu4: time
KB/t   0.00  0.00  0.00                            188296 act    3000 cpu7: time
tps       0     0     0                             21396 inact  3001 cpu5: time
MB/s   0.00  0.00  0.00                               208 cache
%busy     0     0     0                           7440272 free
                                                  326000 buf
# vmstat -i
interrupt                          total       rate
irq1: atkbd0                         505          0
irq14: ata0                           36          0
irq20: atapci1                     75529          6
cpu0: timer                     33541495       2997
irq256: em0                     13155792       1175
irq257: em1                     12177707       1088
cpu1: timer                     33541192       2997
cpu3: timer                     33540341       2997
cpu2: timer                     33540341       2997
cpu6: timer                     33540049       2997
cpu4: timer                     33539777       2997
cpu7: timer                     33540049       2997
cpu5: timer                     33539767       2997
Total                          293732580      26254
# sysctl net.isr.direct
net.isr.direct: 1
#

Share this post


Link to post
Share on other sites

Покажите свой файрвол. Сколько в нем правил?

Share this post


Link to post
Share on other sites

Надоело

#echo >> /boot/loader.conf

net.isr.maxthreads=8

net.isr.direct=0

net.isr.direct_force=0

net.inet.ip.intr_queue_maxlen=1024

net.route.netisr_maxqlen=1024

hw.em.rxd=4096

hw.em.txd=4096

 

#reboot

 

Обновиться до STABLE

ipnat заменить лучьше на pf

 

Edited by UTP

Share this post


Link to post
Share on other sites

net.isr.bindthreads: Bind netisr threads to CPUs.

Имеет смысл включать ?

Share this post


Link to post
Share on other sites

Ivan_83

Я включал, результат ожидаемый, тоесть прибивало треды netisr и em taskq к ядрам.

Share this post


Link to post
Share on other sites

net.isr.maxthreads=8
net.isr.direct=0
net.isr.direct_force=0
net.inet.ip.intr_queue_maxlen=1024
net.route.netisr_maxqlen=1024
hw.em.rxd=4096
hw.em.txd=4096

 

Надоело, это, простите, самый идиотский набор символов который я видел.

 

Зачем, net.isr.maxthreads=8 при net.isr.direct=0 ?!? Для красоты?

Зачем на многопроцессорных системах net.isr.direct=0, чтобы копить inet.ip.intr_queue_maxlen, что приведет к росту swi: net?

Edited by Dm1try

Share this post


Link to post
Share on other sites

Зачем, net.isr.maxthreads=8 при net.isr.direct=0 ?!? Для красоты?

Ну если портов 2 а ядер 8 то прямая обработка пакетов не конает, а рост swi1:net не критичен, так как net.isr.maxthreads=8. В конечном итоге наконец-то заработают все ядра, а не только 2. Если надо net.isr.direct=1 то прийдется докупить em, или откатиться на 7 и яндексы, или купить igb.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Потому что при прямой обработке будет задействовано 2 ядра. Остальные 6 будут спокойно курить бамбук. Подсистема netisr в 8 релизе была полностью переписана, и теперь она распределяется по net.isr.maxthreads ядрам. Теоретически, вся ядра будут задействованы. Вот только работает оно пока как-то невнятно, некоторые ядра гораздо больше грузит, а некоторые недогружает...

Share this post


Link to post
Share on other sites

Все зависит от конкретного случая. Если комп в роли бордера или шейпера то картина будет одна, если PPPoE концентратор или PPtP сервер то совсем другая.

Share this post


Link to post
Share on other sites

При:

net.isr.maxthreads=8

net.isr.direct=0

 

10 минут нормальная производительность ~140-180kk, потом 2 процесса netisr в 100% как результат - задержки 50-100ms + производительность падает до ~25-40kk. По top'у видно что используется 2 ядра из 8ми.

 

summary-day.png

 

# top -SHP 12
last pid:  2339;  load averages:  0.09,  0.11,  0.08                                                                                  up 0+00:21:07  14:01:18
127 processes: 11 running, 92 sleeping, 24 waiting
CPU 0:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
CPU 1:  0.0% user,  0.0% nice,  0.0% system, 96.4% interrupt,  3.6% idle
CPU 2:  0.0% user,  0.0% nice,  0.0% system, 97.3% interrupt,  2.7% idle
CPU 3:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
CPU 4:  0.9% user,  0.0% nice,  0.0% system,  0.0% interrupt, 99.1% idle
CPU 5:  0.0% user,  0.0% nice,  3.6% system,  0.0% interrupt, 96.4% idle
CPU 6:  0.0% user,  0.0% nice,  3.6% system,  0.0% interrupt, 96.4% idle
CPU 7:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Mem: 187M Active, 15M Inact, 223M Wired, 120K Cache, 18M Buf, 7461M Free
Swap: 2048M Total, 2048M Free

 PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  11 root     171 ki31     0K   128K CPU0    0  19:52 100.00% {idle: cpu0}
  12 root     -44    -     0K   416K CPU1    1  10:07 100.00% {swi1: netisr 7}
  12 root     -44    -     0K   416K CPU2    2  10:05 100.00% {swi1: netisr 0}
  11 root     171 ki31     0K   128K CPU7    7  20:28 99.76% {idle: cpu7}
  11 root     171 ki31     0K   128K CPU3    3  20:27 99.76% {idle: cpu3}
  11 root     171 ki31     0K   128K RUN     4  20:29 99.37% {idle: cpu4}
  11 root     171 ki31     0K   128K CPU6    6  19:56 97.80% {idle: cpu6}
  11 root     171 ki31     0K   128K CPU5    5  19:46 96.88% {idle: cpu5}
  11 root     171 ki31     0K   128K RUN     2  10:33  1.71% {idle: cpu2}
  11 root     171 ki31     0K   128K RUN     1  10:59  1.22% {idle: cpu1}
   0 root     -68    0     0K   128K -       5   0:45  0.00% {em0 taskq}
   0 root     -68    0     0K   128K -       6   0:38  0.00% {em1 taskq}

Share this post


Link to post
Share on other sites

Как уже говорилось выше, попробуйте заюзать pf nat.

Share this post


Link to post
Share on other sites

Только не надо забывать, что PF с многопроцессорностью дружит плоховато.

Share this post


Link to post
Share on other sites

Ну, 30 килопакетов топикстартера я думаю, pf и на одном ядре снатит.

Share this post


Link to post
Share on other sites

Пробуй обновиться до STABLE

pf нат, или хоть чтото другое..только не то зло что у тебя

P.S. У всех работает а у тебя нет, меняй прокладку (с)

Share this post


Link to post
Share on other sites
или откатиться на 7 и яндексы.

раз такое дело, мы выложили восьмую версию

Share this post


Link to post
Share on other sites
раз такое дело, мы выложили восьмую версию

 

Это радостная новость...будем тестить ;)

Share this post


Link to post
Share on other sites

wawa

Большое спасибо за труд и любезность поделиться с общественностью. Скажите, а стоит-ли ждать появления оптимизированного igb драйвера?

Share this post


Link to post
Share on other sites

Надо ли для восьмёрочных драйверов выключать ISR?

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