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

linux софт роутер, 82576, полка в 800мбит

помогите плиз разобраться с проблемой, может кто сталкивался:

 

имеем тупой quagga router (только форвардинг без фуллвью):

 

custom kernel 2.6.33.2 (на базе centos 5.4 x64)

XEON X5355 (2,66Ghz/1333/8M)

intel E1G44ET (82576) драйвер IGB 2.3.4 (скомпилирован с separate TX_HANDLER)

 

(modprobe.conf: options igb IntMode=2,2,2,2 InterruptThrottleRate=4000,4000,4000,4000 RSS=4,4,4,4 QueuePairs=1,1,1,1)

на каждом физ интерфейсе(eth2, eth3), по 4-5 влан интерфейса

 

 

eth2 - WAN

eth3 - LAN

 

 

smp_affinity прибиты ко всем ядрам следующим образом:

/bin/echo 2 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 2 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 2 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 2 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

 

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

 

т.е. по 4 очереди от двух интерфейсов на 2-е и 4-е ядро соответственно

 

 

установил ring buffer 2048:

#ethtool -g eth2

Ring parameters for eth2:

Pre-set maximums:

RX: 4096

RX Mini: 0

RX Jumbo: 0

TX: 4096

Current hardware settings:

RX: 2048

RX Mini: 0

RX Jumbo: 0

TX: 2048

 

 

TSO выключен:

ethtool -k eth2

Offload parameters for eth2:

rx-checksumming: on

tx-checksumming: on

scatter-gather: on

tcp segmentation offload: off

udp fragmentation offload: off

generic segmentation offload: on

generic-receive-offload: on

 

 

 

в час пик, ~22.00 на обоих интерфейсах с каталиста заметна полка в 800мбит(+,- 20мбит), скорость пакетов ~130kpps

 

при этом:

 

дропы не растут:

2010-11-01_22:25 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:26 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:27 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:28 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:29 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:30 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:31 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:32 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:33 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:34 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:35 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

2010-11-01_22:36 rx_queue_0_drops: 29792 rx_queue_1_drops: 24696 rx_queue_2_drops: 26814 rx_queue_3_drops: 28562

 

загрузка цпу в норме (парсим top):

2010-11-01_22:25 0.0 43.4 0.0 43.3

2010-11-01_22:26 0.0 46.2 0.0 41.9

2010-11-01_22:27 0.0 42.5 0.0 44.9

2010-11-01_22:28 0.0 44.2 0.0 46.9

2010-11-01_22:29 0.0 41.8 0.0 42.8

2010-11-01_22:30 0.0 37.5 0.0 39.5

2010-11-01_22:31 0.0 42.0 0.0 40.8

2010-11-01_22:32 0.0 42.4 0.0 41.7

2010-11-01_22:33 0.0 42.3 0.0 43.9

2010-11-01_22:34 0.0 41.3 0.0 41.4

2010-11-01_22:35 0.0 41.2 0.0 40.4

2010-11-01_22:36 0.0 40.7 0.0 42.3

 

 

проблема явно не в апстрим провайдере (пробовали разные апстримы)

 

 

где зарыто узкое место, как разогнаться до хотябы 950мбит форвардинга?

 

 

Спасибо.

Edited by dbask

Share this post


Link to post
Share on other sites

А 800 это как?

800 прием, 400 передача, 400 прием, 800 передача?

 

Насколько я помню PCIE 1x имеет потолок ~ 2400 Гбит/с полудуплекс. Хотя кто-то со мной спорил что это дуплекс.

 

Карточка, случайно, не в 1x режиме работает?

Edited by Tosha

Share this post


Link to post
Share on other sites

А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру?

Share this post


Link to post
Share on other sites
А 800 это как?

800 прием, 400 передача, 400 прием, 800 передача?

 

Насколько я помню PCIE 1x имеет потолок ~ 2400 Гбит/с полудуплекс. Хотя кто-то со мной спорил что это дуплекс.

 

Карточка, случайно, не в 1x режиме работает?

800 - это отфорвардить 800мбит полным дуплексом (исходящий поток 800 + входящий поток 800)

 

 

карта запустилась в 4x режиме: (ITR и кол-во очередей потом менялись)

 

 

igb 0000:0a:00.1: Intel® Gigabit Ethernet Network Connection

igb 0000:0a:00.1: eth3: (PCIe:2.5Gb/s:Width x4)00:1b:21:51:9f:91

igb 0000:0a:00.1: Using MSI-X interrupts. 2 rx queue(s), 2 tx queue(s)

igb 0000:0b:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16

igb 0000:0b:00.0: setting latency timer to 64

igb: 0000:0b:00.0: igb_validate_option: Interrupt Throttling Rate (ints/sec) set to 2000

igb: 0000:0b:00.0: igb_validate_option: Interrupt Mode set to 2

igb: 0000:0b:00.0: igb_validate_option: RSS - RSS multiqueue receive count set to 2

igb: 0000:0b:00.0: igb_validate_option: QueuePairs - TX/RX queue pairs for interrupt handling Enabled

igb 0000:0b:00.0: irq 67 for MSI/MSI-X

igb 0000:0b:00.0: irq 68 for MSI/MSI-X

igb 0000:0b:00.0: irq 69 for MSI/MSI-X

 

Share this post


Link to post
Share on other sites
А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру?

выявлено опытным путем, как только я эти очереди не прибивал к ядрам,

 

с учетом загрузки цпу, мониторингом кол-ва прерываний через 'perf top' и динамикой дропов

 

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

 

 

Share this post


Link to post
Share on other sites

Тогда зачем вам очереди, в таком случае? - два интерфейса, два ядра...

 

p.s. eth2 и eth3 - в один входит в другой выходит?

800 - это отфорвардить 800мбит полным дуплексом (исходящий поток 800 + входящий поток 800)
p.s.s. т.е. через роутер идет суммарно ~1.6Г

 

Share this post


Link to post
Share on other sites

А эта полка не может быть вызвана иной причиной? Может быть трафик ограничился по пути к этому маршрутизатору?

 

P.S.

А неплохая скорость роутера получилась. Круче чем циска 7200.

Share this post


Link to post
Share on other sites
Тогда зачем вам очереди, в таком случае? - два интерфейса, два ядра...

 

p.s. eth2 и eth3 - в один входит в другой выходит?

800 - это отфорвардить 800мбит полным дуплексом (исходящий поток 800 + входящий поток 800)

именно так в eth2 входит, в eth3 выходит,

пробовал два интерфейса - два ядра, по 1 очереди = оч много дропов в статистике

p.s.s. т.е. через роутер идет суммарно ~1.6Г

да и этот суммарный 1.6Гбит является полкой, т.к. на графике видно как только входящий трафик начинает увеличиваться - до 830, исходящий трафик начинает прогибаться до 780 например.....

 

А эта полка не может быть вызвана иной причиной? Может быть трафик ограничился по пути к этому маршрутизатору?

 

P.S.

А неплохая скорость роутера получилась. Круче чем циска 7200.

трафик ничем не ограничен - под бордером стоит 3 ната(на 3-х влан интерфейсах) - каждый нат может по 600мбит

а над бордером - уже меняли провайдеров, думали проблема в одном из них - но симптомы остались

Share this post


Link to post
Share on other sites

еще важный момент:

 

если делать iperf UDP тест на нагруженном аплинке, результаты следующие:

 

при 800мбит загрузке входящего канала, iperf ( UDP пакетами по 1470 байт ) показывает еще свободной полосы 130-140мбит, т.е. загружает по практическому максимуму - 930-940мбит

 

но на практике нету этих 930мбит даже рядом,

 

тестов iperf tcp еще нет, сделаю - выложу

 

 

 

 

еще посоветовали, перекинуть часть вланов на оставшиеся два интерфейса сетевой карты..

а на аплинке сделать балансировку... и сравнить суммарно скорость...

 

 

Share this post


Link to post
Share on other sites

А perf top можно?

У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других.

Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.

А fib алгоритм какой? TRIE||HASH?

Share this post


Link to post
Share on other sites

Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.

Подробней можно?

Share this post


Link to post
Share on other sites

Я бы попробовал две вещи:

1) отключить hyperthreading, чтобы гарантированно использовать физические ядра.

2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши.

Share this post


Link to post
Share on other sites
Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.
Подробней можно?

xxx ~ # grep eth /proc/interrupts 
95: 3914673272 3914673221       9903       9911   PCI-MSI-edge      eth0
96:          0          1 3520719581 3520719624   PCI-MSI-edge      eth1
xxx ~ # cat /proc/irq/95/smp_affinity 
3
xxx ~ # cat /proc/irq/96/smp_affinity 
c

xxx ~ # cat /sys/class/net/eth0/queues/rx-0/rps_cpus 
3

Ну , там на eth1 еще вланы , rps на них тоже включен.

Естественно никакого гипертрединга.

Вовне нат уходит с --random --persist.

Edited by alex_001

Share this post


Link to post
Share on other sites
А perf top можно?

У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других.

Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.

А fib алгоритм какой? TRIE||HASH?

21:39

подбираемся к полке:

 

30 second input rate 794914000 bits/sec, 135000 packets/sec

30 second output rate 784761000 bits/sec, 133211 packets/sec

 

fib TRIE

 

perf top:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PerfTop: 2227 irqs/sec kernel:97.4% [1000Hz cycles], (all, 4 CPUs)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

samples pcnt function DSO

_______ _____ _____________________________ __________________________________________________________

 

2158.00 18.1% ip_route_input /lib/modules/2.6.33.2-zebra2/build/vmlinux

930.00 7.8% acpi_idle_enter_simple /lib/modules/2.6.33.2-zebra2/build/vmlinux

651.00 5.4% _raw_spin_lock /lib/modules/2.6.33.2-zebra2/build/vmlinux

596.00 5.0% ip_forward /lib/modules/2.6.33.2-zebra2/build/vmlinux

556.00 4.7% igb_poll /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

402.00 3.4% read_hpet /lib/modules/2.6.33.2-zebra2/build/vmlinux

373.00 3.1% __alloc_skb /lib/modules/2.6.33.2-zebra2/build/vmlinux

358.00 3.0% eth_type_trans /lib/modules/2.6.33.2-zebra2/build/vmlinux

355.00 3.0% kfree /lib/modules/2.6.33.2-zebra2/build/vmlinux

316.00 2.6% dev_queue_xmit /lib/modules/2.6.33.2-zebra2/build/vmlinux

303.00 2.5% __slab_free /lib/modules/2.6.33.2-zebra2/build/vmlinux

303.00 2.5% igb_xmit_frame_ring /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

283.00 2.4% __kmalloc_node_track_caller /lib/modules/2.6.33.2-zebra2/build/vmlinux

256.00 2.1% kmem_cache_alloc_node /lib/modules/2.6.33.2-zebra2/build/vmlinux

233.00 1.9% ip_rcv /lib/modules/2.6.33.2-zebra2/build/vmlinux

204.00 1.7% igb_init_interrupt_scheme /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

202.00 1.7% __slab_alloc /lib/modules/2.6.33.2-zebra2/build/vmlinux

199.00 1.7% tg_shares_up /lib/modules/2.6.33.2-zebra2/build/vmlinux

160.00 1.3% get_partial_node /lib/modules/2.6.33.2-zebra2/build/vmlinux

140.00 1.2% bgp_best_selection /usr/sbin/bgpd

138.00 1.2% kmem_cache_free /lib/modules/2.6.33.2-zebra2/build/vmlinux

138.00 1.2% nommu_map_page /lib/modules/2.6.33.2-zebra2/build/vmlinux

121.00 1.0% ip_finish_output /lib/modules/2.6.33.2-zebra2/build/vmlinux

101.00 0.8% _raw_spin_lock_irqsave /lib/modules/2.6.33.2-zebra2/build/vmlinux

90.00 0.8% malloc_consolidate /lib64/libc-2.5.so

89.00 0.7% skb_put /lib/modules/2.6.33.2-zebra2/build/vmlinux

88.00 0.7% sch_direct_xmit /lib/modules/2.6.33.2-zebra2/build/vmlinux

81.00 0.7% rt_intern_hash /lib/modules/2.6.33.2-zebra2/build/vmlinux

80.00 0.7% dev_hard_start_xmit /lib/modules/2.6.33.2-zebra2/build/vmlinux

77.00 0.6% igb_check_options /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

74.00 0.6% netif_receive_skb /lib/modules/2.6.33.2-zebra2/build/vmlinux

69.00 0.6% fib_table_lookup /lib/modules/2.6.33.2-zebra2/build/vmlinux

68.00 0.6% local_bh_enable /lib/modules/2.6.33.2-zebra2/build/vmlinux

66.00 0.6% memset_c /lib/modules/2.6.33.2-zebra2/build/vmlinux

66.00 0.6% irq_entries_start /lib/modules/2.6.33.2-zebra2/build/vmlinux

64.00 0.5% acpi_safe_halt /lib/modules/2.6.33.2-zebra2/build/vmlinux

46.00 0.4% bgp_process_announce_selected /usr/sbin/bgpd

43.00 0.4% igb_alloc_rx_buffers /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

43.00 0.4% igb_vlvf_set /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

42.00 0.4% vlan_hwaccel_do_receive /lib/modules/2.6.33.2-zebra2/build/vmlinux

40.00 0.3% dst_release /lib/modules/2.6.33.2-zebra2/build/vmlinux

40.00 0.3% list_del /lib/modules/2.6.33.2-zebra2/build/vmlinux

35.00 0.3% igb_vfta_set /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

33.00 0.3% sched_clock /lib/modules/2.6.33.2-zebra2/build/vmlinux

31.00 0.3% find_busiest_group /lib/modules/2.6.33.2-zebra2/build/vmlinux

30.00 0.3% skb_push /lib/modules/2.6.33.2-zebra2/build/vmlinux

30.00 0.3% add_partial /lib/modules/2.6.33.2-zebra2/build/vmlinux

 

 

 

#mpstat -P ALL 2

Linux 2.6.33.2-zebra2 11/02/2010 _x86_64_ (4 CPU)

 

09:39:58 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

09:40:00 PM all 0.00 0.00 0.12 0.00 0.12 21.63 0.00 0.00 78.12

09:40:00 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

09:40:00 PM 1 0.00 0.00 0.49 0.00 0.99 41.38 0.00 0.00 57.14

09:40:00 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

09:40:00 PM 3 0.00 0.00 0.00 0.00 0.00 45.05 0.00 0.00 54.95

 

Edited by dbask

Share this post


Link to post
Share on other sites
Я бы попробовал две вещи:

1) отключить hyperthreading, чтобы гарантированно использовать физические ядра.

2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши.

прибил к 2,3 ядру:

 

/bin/echo 4 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 4 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 4 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 4 > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

 

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-0' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-1' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-2' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

/bin/echo 8 > /proc/irq/`cat /proc/interrupts | grep 'eth3-TxRx-3' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity

 

 

загрузка cpu сразу подскочила:

 

09:47:09 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle

09:47:11 PM all 0.12 0.00 0.12 0.00 0.25 26.93 0.00 0.00 72.57

09:47:11 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

09:47:11 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

09:47:11 PM 2 0.00 0.00 1.00 0.00 1.00 53.73 0.00 0.00 44.28

09:47:11 PM 3 0.50 0.00 0.00 0.00 0.00 53.50 0.00 0.00 46.00

 

прерывания в perf top увеличились:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PerfTop: 3216 irqs/sec kernel:95.0% [1000Hz cycles], (all, 4 CPUs)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

samples pcnt function DSO

_______ _____ _______________________________ __________________________________________________________

 

1778.00 11.0% ip_route_input /lib/modules/2.6.33.2-zebra2/build/vmlinux

1731.00 10.8% acpi_idle_enter_simple /lib/modules/2.6.33.2-zebra2/build/vmlinux

941.00 5.8% igb_init_interrupt_scheme /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

771.00 4.8% read_hpet /lib/modules/2.6.33.2-zebra2/build/vmlinux

730.00 4.5% _raw_spin_lock /lib/modules/2.6.33.2-zebra2/build/vmlinux

556.00 3.5% tg_shares_up /lib/modules/2.6.33.2-zebra2/build/vmlinux

552.00 3.4% __alloc_skb /lib/modules/2.6.33.2-zebra2/build/vmlinux

481.00 3.0% ip_forward /lib/modules/2.6.33.2-zebra2/build/vmlinux

471.00 2.9% __slab_free /lib/modules/2.6.33.2-zebra2/build/vmlinux

433.00 2.7% igb_xmit_frame_ring /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

432.00 2.7% igb_poll /lib/modules/2.6.33.2-zebra2/kernel/drivers/net/igb/igb.ko

339.00 2.1% kfree /lib/modules/2.6.33.2-zebra2/build/vmlinux

295.00 1.8% eth_type_trans /lib/modules/2.6.33.2-zebra2/build/vmlinux

 

 

как изменилась загрузка цпу:

 

2010-11-02_21:39 0.0 45.2 0.0 40.8

2010-11-02_21:40 0.0 39.3 0.0 36.8

2010-11-02_21:41 0.0 42.7 0.0 40.8

2010-11-02_21:42 0.0 40.2 0.0 39.4

2010-11-02_21:43 0.0 44.3 0.0 42.8

 

2010-11-02_21:45 0.0 0.0 59.4 56.7

2010-11-02_21:46 0.0 0.0 52.5 53.0

2010-11-02_21:47 0.0 0.0 54.0 55.4

2010-11-02_21:48 0.0 0.0 56.9 53.9

 

 

скорости на интерфейсах не поднялись.....

 

так что возвращаюсь обратно к схеме 1,3 ядро

Edited by dbask

Share this post


Link to post
Share on other sites
Я бы попробовал две вещи:

1) отключить hyperthreading, чтобы гарантированно использовать физические ядра.

2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши.

прибил к 2,3 ядру:

А hyperthreading выключили? Пока он включен, это могут быть номера

не соседних физических ядер, а соседних конвейеров внутри одного ядра.

Share this post


Link to post
Share on other sites
Я бы попробовал две вещи:

1) отключить hyperthreading, чтобы гарантированно использовать физические ядра.

2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши.

прибил к 2,3 ядру:

А hyperthreading выключили? Пока он включен, это могут быть номера

не соседних физических ядер, а соседних конвейеров внутри одного ядра.

нет еще не выключил, я так понимаю выключать только в биосе? через шелл не вырубается?)

Share this post


Link to post
Share on other sites
я так понимаю выключать только в биосе? через шелл не вырубается?)
Ищем в Гугле: "linux disable hyperthreading".

Находим: https://bugzilla.redhat.com/show_bug.cgi?id=440321

echo 0 > /sys/devices/system/node/node0/cpu1/online
echo 0 > /sys/devices/system/node/node0/cpu3/online

Share this post


Link to post
Share on other sites

У него процессор 4-х ядерный, и по mpstat-у 4 ядра - гипертрейдинг не включен.

Share this post


Link to post
Share on other sites
Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.
Подробней можно?

xxx ~ # grep eth /proc/interrupts 
95: 3914673272 3914673221       9903       9911   PCI-MSI-edge      eth0
96:          0          1 3520719581 3520719624   PCI-MSI-edge      eth1
xxx ~ # cat /proc/irq/95/smp_affinity 
3
xxx ~ # cat /proc/irq/96/smp_affinity 
c

xxx ~ # cat /sys/class/net/eth0/queues/rx-0/rps_cpus 
3

Ну , там на eth1 еще вланы , rps на них тоже включен.

Естественно никакого гипертрединга.

Вовне нат уходит с --random --persist.

У вас случай иной - у вас сетевые интерфейсы без поддержки мультивекторов.

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

 

В случае топикстартера я бы попробовал настроить сетевые интерфейсы так:

Раздельные TX и RX очереди, по две штуки на порт. Каждую очередь на свое ядро. При этом RX аплинка прибить к первому ядру (из пары с общим кешем), а TX даунлинка ко второму - т.е. сделать крест на крест, по две очереди разных сетевых интерфейсов на одно ядро.

 

Так же я бы попробовал уменьшить кольцо до 2К и поставить ITR в режим 2 - для пробы.

 

Если это не поможет, то ставить вторую пару интерфейсов и бондиться.

Share this post


Link to post
Share on other sites
А perf top можно?

У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других.

Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный.

А fib алгоритм какой? TRIE||HASH?

также 800мбит - полка?, или до ~900мбит можете прокачать канал?

Share this post


Link to post
Share on other sites
Так же я бы попробовал уменьшить кольцо до 2К и поставить ITR в режим 2 - для пробы.

 

Если это не поможет, то ставить вторую пару интерфейсов и бондиться.

в дровах 2.3.4 (как и в 2.1.9) нету режима ITR = 2 :

 

 

"InterruptThrottleRate

---------------------

Valid Range: 0,1,3,100-100000 (0=off, 1=dynamic, 3=dynamic conservative)

Default Value: 3"

 

про какой режим вы говорили?

 

 

P.S.

ринг-буфер и так стоит 2к:

 

ethtool -g eth2

Ring parameters for eth2:

Pre-set maximums:

RX: 4096

RX Mini: 0

RX Jumbo: 0

TX: 4096

Current hardware settings:

RX: 2048

RX Mini: 0

RX Jumbo: 0

TX: 2048

 

 

идея с перекрестной прибивкой прерываний к ядрам интересна - будем пробовать

Share this post


Link to post
Share on other sites
"InterruptThrottleRate

---------------------

Valid Range: 0,1,3,100-100000 (0=off, 1=dynamic, 3=dynamic conservative)

Default Value: 3"

про какой режим вы говорили?

Про 1.

 

Share this post


Link to post
Share on other sites

Я б еще порекомендовал обратить внимание на падение проца в C-State

cat /proc/acpi/processor/CPU0/power

Пару лет назад запретом C-State в биосе (можно параметром ядра) вылечили полку в 400.

 

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