dbask Posted November 2, 2010 Posted November 2, 2010 (edited) помогите плиз разобраться с проблемой, может кто сталкивался: имеем тупой 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 November 2, 2010 by dbask Вставить ник Quote
Tosha Posted November 2, 2010 Posted November 2, 2010 (edited) А 800 это как? 800 прием, 400 передача, 400 прием, 800 передача? Насколько я помню PCIE 1x имеет потолок ~ 2400 Гбит/с полудуплекс. Хотя кто-то со мной спорил что это дуплекс. Карточка, случайно, не в 1x режиме работает? Edited November 2, 2010 by Tosha Вставить ник Quote
nuclearcat Posted November 2, 2010 Posted November 2, 2010 Парсить топ - неправильно надо парсить mpstat, по каждому процессору Вставить ник Quote
Jugernault Posted November 2, 2010 Posted November 2, 2010 А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру? Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 А 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 Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру? выявлено опытным путем, как только я эти очереди не прибивал к ядрам, с учетом загрузки цпу, мониторингом кол-ва прерываний через 'perf top' и динамикой дропов минимальные значения были получены именно привязкой нескольких очередей одного интерфейса - к одному ядру, другого - к другому... Вставить ник Quote
Jugernault Posted November 2, 2010 Posted November 2, 2010 Тогда зачем вам очереди, в таком случае? - два интерфейса, два ядра... p.s. eth2 и eth3 - в один входит в другой выходит? 800 - это отфорвардить 800мбит полным дуплексом (исходящий поток 800 + входящий поток 800)p.s.s. т.е. через роутер идет суммарно ~1.6Г Вставить ник Quote
Tosha Posted November 2, 2010 Posted November 2, 2010 А эта полка не может быть вызвана иной причиной? Может быть трафик ограничился по пути к этому маршрутизатору? P.S. А неплохая скорость роутера получилась. Круче чем циска 7200. Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 Тогда зачем вам очереди, в таком случае? - два интерфейса, два ядра... 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мбит а над бордером - уже меняли провайдеров, думали проблема в одном из них - но симптомы остались Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 еще важный момент: если делать iperf UDP тест на нагруженном аплинке, результаты следующие: при 800мбит загрузке входящего канала, iperf ( UDP пакетами по 1470 байт ) показывает еще свободной полосы 130-140мбит, т.е. загружает по практическому максимуму - 930-940мбит но на практике нету этих 930мбит даже рядом, тестов iperf tcp еще нет, сделаю - выложу еще посоветовали, перекинуть часть вланов на оставшиеся два интерфейса сетевой карты.. а на аплинке сделать балансировку... и сравнить суммарно скорость... Вставить ник Quote
alex_001 Posted November 2, 2010 Posted November 2, 2010 А perf top можно? У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других. Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. А fib алгоритм какой? TRIE||HASH? Вставить ник Quote
Jugernault Posted November 2, 2010 Posted November 2, 2010 Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. Подробней можно? Вставить ник Quote
Ilya Evseev Posted November 2, 2010 Posted November 2, 2010 Я бы попробовал две вещи: 1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. Вставить ник Quote
alex_001 Posted November 2, 2010 Posted November 2, 2010 (edited) Прерывания раскиданы как 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 November 2, 2010 by alex_001 Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 (edited) А 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 November 2, 2010 by dbask Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 (edited) Я бы попробовал две вещи: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 November 2, 2010 by dbask Вставить ник Quote
Ilya Evseev Posted November 2, 2010 Posted November 2, 2010 Я бы попробовал две вещи:1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. прибил к 2,3 ядру: А hyperthreading выключили? Пока он включен, это могут быть номеране соседних физических ядер, а соседних конвейеров внутри одного ядра. Вставить ник Quote
dbask Posted November 2, 2010 Author Posted November 2, 2010 Я бы попробовал две вещи:1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. прибил к 2,3 ядру: А hyperthreading выключили? Пока он включен, это могут быть номеране соседних физических ядер, а соседних конвейеров внутри одного ядра. нет еще не выключил, я так понимаю выключать только в биосе? через шелл не вырубается?) Вставить ник Quote
Ilya Evseev Posted November 2, 2010 Posted November 2, 2010 я так понимаю выключать только в биосе? через шелл не вырубается?)Ищем в Гугле: "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 Вставить ник Quote
Jugernault Posted November 2, 2010 Posted November 2, 2010 У него процессор 4-х ядерный, и по mpstat-у 4 ядра - гипертрейдинг не включен. Вставить ник Quote
Jugernault Posted November 2, 2010 Posted November 2, 2010 Прерывания раскиданы как 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 - для пробы. Если это не поможет, то ставить вторую пару интерфейсов и бондиться. Вставить ник Quote
dbask Posted November 3, 2010 Author Posted November 3, 2010 А perf top можно?У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других. Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. А fib алгоритм какой? TRIE||HASH? также 800мбит - полка?, или до ~900мбит можете прокачать канал? Вставить ник Quote
dbask Posted November 3, 2010 Author Posted November 3, 2010 Так же я бы попробовал уменьшить кольцо до 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 идея с перекрестной прибивкой прерываний к ядрам интересна - будем пробовать Вставить ник Quote
Jugernault Posted November 3, 2010 Posted November 3, 2010 "InterruptThrottleRate--------------------- Valid Range: 0,1,3,100-100000 (0=off, 1=dynamic, 3=dynamic conservative) Default Value: 3" про какой режим вы говорили? Про 1. Вставить ник Quote
LKr Posted November 3, 2010 Posted November 3, 2010 Я б еще порекомендовал обратить внимание на падение проца в C-State cat /proc/acpi/processor/CPU0/power Пару лет назад запретом C-State в биосе (можно параметром ядра) вылечили полку в 400. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.