dbask Опубликовано 2 ноября, 2010 (изменено) · Жалоба помогите плиз разобраться с проблемой, может кто сталкивался: имеем тупой 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мбит форвардинга? Спасибо. Изменено 2 ноября, 2010 пользователем dbask Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Tosha Опубликовано 2 ноября, 2010 (изменено) · Жалоба А 800 это как? 800 прием, 400 передача, 400 прием, 800 передача? Насколько я помню PCIE 1x имеет потолок ~ 2400 Гбит/с полудуплекс. Хотя кто-то со мной спорил что это дуплекс. Карточка, случайно, не в 1x режиме работает? Изменено 2 ноября, 2010 пользователем Tosha Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 2 ноября, 2010 · Жалоба Парсить топ - неправильно надо парсить mpstat, по каждому процессору Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 2 ноября, 2010 · Жалоба А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 2 ноября, 2010 · Жалоба А какой смысл привязывать несколько очередей, да еще с одного интерфейса, к одному ядру? выявлено опытным путем, как только я эти очереди не прибивал к ядрам, с учетом загрузки цпу, мониторингом кол-ва прерываний через 'perf top' и динамикой дропов минимальные значения были получены именно привязкой нескольких очередей одного интерфейса - к одному ядру, другого - к другому... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 2 ноября, 2010 · Жалоба Тогда зачем вам очереди, в таком случае? - два интерфейса, два ядра... p.s. eth2 и eth3 - в один входит в другой выходит? 800 - это отфорвардить 800мбит полным дуплексом (исходящий поток 800 + входящий поток 800)p.s.s. т.е. через роутер идет суммарно ~1.6Г Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Tosha Опубликовано 2 ноября, 2010 · Жалоба А эта полка не может быть вызвана иной причиной? Может быть трафик ограничился по пути к этому маршрутизатору? P.S. А неплохая скорость роутера получилась. Круче чем циска 7200. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 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мбит а над бордером - уже меняли провайдеров, думали проблема в одном из них - но симптомы остались Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 2 ноября, 2010 · Жалоба еще важный момент: если делать iperf UDP тест на нагруженном аплинке, результаты следующие: при 800мбит загрузке входящего канала, iperf ( UDP пакетами по 1470 байт ) показывает еще свободной полосы 130-140мбит, т.е. загружает по практическому максимуму - 930-940мбит но на практике нету этих 930мбит даже рядом, тестов iperf tcp еще нет, сделаю - выложу еще посоветовали, перекинуть часть вланов на оставшиеся два интерфейса сетевой карты.. а на аплинке сделать балансировку... и сравнить суммарно скорость... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex_001 Опубликовано 2 ноября, 2010 · Жалоба А perf top можно? У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других. Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. А fib алгоритм какой? TRIE||HASH? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 2 ноября, 2010 · Жалоба Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. Подробней можно? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 2 ноября, 2010 · Жалоба Я бы попробовал две вещи: 1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
alex_001 Опубликовано 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. Изменено 2 ноября, 2010 пользователем alex_001 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 2 ноября, 2010 (изменено) · Жалоба А 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 Изменено 2 ноября, 2010 пользователем dbask Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 2 ноября, 2010 (изменено) · Жалоба Я бы попробовал две вещи: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 ядро Изменено 2 ноября, 2010 пользователем dbask Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 2 ноября, 2010 · Жалоба Я бы попробовал две вещи:1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. прибил к 2,3 ядру: А hyperthreading выключили? Пока он включен, это могут быть номеране соседних физических ядер, а соседних конвейеров внутри одного ядра. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 2 ноября, 2010 · Жалоба Я бы попробовал две вещи:1) отключить hyperthreading, чтобы гарантированно использовать физические ядра. 2) прибивать прерывания к одной паре ядер - 0,1 или 2,3, т.к. эти пары у Quad Core имеют раздельные кэши. прибил к 2,3 ядру: А hyperthreading выключили? Пока он включен, это могут быть номеране соседних физических ядер, а соседних конвейеров внутри одного ядра. нет еще не выключил, я так понимаю выключать только в биосе? через шелл не вырубается?) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Ilya Evseev Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 2 ноября, 2010 · Жалоба У него процессор 4-х ядерный, и по mpstat-у 4 ядра - гипертрейдинг не включен. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 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 - для пробы. Если это не поможет, то ставить вторую пару интерфейсов и бондиться. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 3 ноября, 2010 · Жалоба А perf top можно?У меня на E5430 && 82571 прокачивается 800mbit с натом. CPU - по 50% на 2х ядрах и поменьше на 2х других. Прерывания раскиданы как 3 && 0xc + RPS (ядро 35е) , но RPS я так и не понял дает ли выигрыш сильный. А fib алгоритм какой? TRIE||HASH? также 800мбит - полка?, или до ~900мбит можете прокачать канал? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
dbask Опубликовано 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 идея с перекрестной прибивкой прерываний к ядрам интересна - будем пробовать Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Jugernault Опубликовано 3 ноября, 2010 · Жалоба "InterruptThrottleRate--------------------- Valid Range: 0,1,3,100-100000 (0=off, 1=dynamic, 3=dynamic conservative) Default Value: 3" про какой режим вы говорили? Про 1. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
LKr Опубликовано 3 ноября, 2010 · Жалоба Я б еще порекомендовал обратить внимание на падение проца в C-State cat /proc/acpi/processor/CPU0/power Пару лет назад запретом C-State в биосе (можно параметром ядра) вылечили полку в 400. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...