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

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мбит форвардинга?

 

 

Спасибо.

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

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


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

А 800 это как?

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

 

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

 

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

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

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


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

Парсить топ - неправильно

надо парсить mpstat, по каждому процессору

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


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

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

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


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

А 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

 

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


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

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

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

 

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

 

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

 

 

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


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

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

 

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

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

 

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


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

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

 

P.S.

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

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


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

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

 

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мбит

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

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


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

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

 

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

 

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

 

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

 

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

 

 

 

 

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

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

 

 

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


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

А perf top можно?

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

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

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

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


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

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

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

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


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

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

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

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

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


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

Прерывания раскиданы как 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.

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

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


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

А 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

 

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

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


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

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

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 ядро

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

я так понимаю выключать только в биосе? через шелл не вырубается?)
Ищем в Гугле: "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

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


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

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

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


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

Прерывания раскиданы как 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 - для пробы.

 

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

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


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

А perf top можно?

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

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

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

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

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


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

Так же я бы попробовал уменьшить кольцо до 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

 

 

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

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


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

"InterruptThrottleRate

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

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

Default Value: 3"

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

Про 1.

 

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


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

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

cat /proc/acpi/processor/CPU0/power

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

 

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


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

Join the conversation

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

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

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

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

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

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

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