calculator Posted March 1, 2009 Posted March 1, 2009 Уважаемые, какой можете поставить диагноз по статистике oprofile: # opreport -le mwait_idle CPU: CPU with timer interrupt, speed 0 MHz (estimated) Profiling through timer interrupt samples % image name app name symbol name 11968 10.2238 vmlinux vmlinux tcp_v4_rcv 10507 8.9757 vmlinux vmlinux inet_csk_search_req 10302 8.8006 vmlinux vmlinux read_hpet 5568 4.7565 bnx2 bnx2 (no symbols) 3184 2.7200 nginx nginx ngx_http_parse_header_line 2931 2.5038 vmlinux vmlinux ip_route_input 2308 1.9716 vmlinux vmlinux current_fs_time 1933 1.6513 vmlinux vmlinux timespec_trunc 1901 1.6240 vmlinux vmlinux _spin_lock_bh 1699 1.4514 libcrypto.so.0.9.8b libcrypto.so.0.9.8b (no symbols) 1665 1.4223 vmlinux vmlinux tcp_ack 1433 1.2242 vmlinux vmlinux __ip_route_output_key 1428 1.2199 vmlinux vmlinux schedule 1379 1.1780 vmlinux vmlinux do_gettimeofday 1368 1.1686 vmlinux vmlinux kmem_cache_free 1232 1.0525 vmlinux vmlinux _read_trylock 1024 0.8748 vmlinux vmlinux dnotify_parent Это вебсервер(nginx) с Broadcom NetXtreme II BCM5708 Gigabit Ethernet на борту и hpet(без него к сожалению никак). iptables/qdisc в ядре выключены. softirq на нем подбирается к 100%, но чувствую что машинка может работать лучьше. Хочется понять можно ли что-то подкрутить. Ivan Rostovikov >2. Можно ли как-то управлять поллингом для драйвера e1000? Потому как, судя по документации, поллинг начинает работать только, когда количество пакетов превышает количество возможных прерываний в системеЕсли режим - авто - то нельзя. Иначе можно указать конкретное кол-во пакетов на каждое прерывание. А где указать можно не подскажите? Вставить ник Quote
nuclearcat Posted March 2, 2009 Posted March 2, 2009 Какой проц? netstat -s (особо интересует количество установленных коннектов) mpstat -P ALL 1 cat /proc/interrupts Вставить ник Quote
calculator Posted March 2, 2009 Posted March 2, 2009 (edited) nuclearcat Статистики довольно много, поместил все на pastebin. Сейчас статистика довольно скудная, потому как нагрузка не пиковая и этот аналогичный конфигу сервер добавили в помощь буквально как пару дней. По прирываниям для eth0, eth1 CPU0 тикает. Пробовал их разнести по разным процессорам, но там похоже без патча не обойтись. Отключение MSI не помогает - BIOS с последней прошивкой упорно ставит сетевые да еще и megasas на 1 прирывание. И честно говоря патчить пока страшно, тем более что он не под мое ядро(2.6.18). На интерфейсах(они в бондинге) есть дропы, но их небольшой процент. Стоит еще сказать что сейчас nginx работает на всех 8 процессорах. Но видимо его лучьше вынести с процессора разруливающего softirq? Edited March 2, 2009 by calculator Вставить ник Quote
nuclearcat Posted March 2, 2009 Posted March 2, 2009 Эммм, у вас 2.6.18 ? Так тот патч был сделан гораздо позже. С таким древним ядром сложно что-то ожидать хорошее. Есть причины по котороым у вас такое старое ядро? Вставить ник Quote
calculator Posted March 2, 2009 Posted March 2, 2009 nuclearcat Причина только то, что при тестировании старшие ядра показали ощутимо худшую производительность. Но 2.6.18 до сих пор поддерживается. У меня конкретно 2.6.18-53.1.19.el5. Вот наверно по current_fs_time, думаю подкрутить noatime для fs. Вставить ник Quote
nuclearcat Posted March 2, 2009 Posted March 2, 2009 т.е. echo скажем 2>/proc/irq/номер/smp_affinity не работает? Вставить ник Quote
calculator Posted March 2, 2009 Posted March 2, 2009 (edited) nuclearcat Сейчас нет. В том смысле что туда пишет, но толку никакого. Вот вынес nginx с 1 процессора, теперь там только проценты от softirq. Пиковая нагрузка в цифрах. Завтра попытаюсь уговорить товарища поставить noatime, интересно посмотреть какие после этого цифры будут. Edited March 2, 2009 by calculator Вставить ник Quote
Dark_Angel Posted March 3, 2009 Author Posted March 3, 2009 2calculator: noatime дает прирост 20-30% на операциях постоянной записи на HDD. Если у Вас только чтение, то это ничего не даст. Вставить ник Quote
calculator Posted March 3, 2009 Posted March 3, 2009 Dark_Angel Там очень много логов пишется. В пиках больше 4ГБ за 15 минут интервал получается. Думаю должно ощутимо помочь, тем более оно опять же hpet дергает. Вставить ник Quote
Dark_Angel Posted March 3, 2009 Author Posted March 3, 2009 (edited) 2calculator: Ну тут важно определить, что пораждает softirq. Если это винт, то да, это поможет, т.к. логи это много мелких обращений к винту. Но если нет, то это ничего не даст. Насчет SMP affinity: 2.6.20 - отлично все работает. По вопросу: Надо убрать сетевые карты с одного процессора. Это однозначно. Надо включить NAPI. Это однозначно. 25К прерываний - это много, надо уменьшать, иначе машина будет задыхаться. Edited March 3, 2009 by Dark_Angel Вставить ник Quote
calculator Posted March 3, 2009 Posted March 3, 2009 (edited) Dark_Angel Ну тут важно определить, что пораждает softirq Как можно это сделать? Я как-то вычитал что softirq бывают 6 _типов_. Как определить в % сколько от кого? Насчет SMP affinity: 2.6.20 - отлично все работает. Всмысле патч для bnx2 работает? Надо включить NAPI В bnx2 я не нашел NAPI :-( Но судя по тому что при пиковых нагрузках и 60к пакетах висят даже не 25к а 20к прирываний, что-то там есть. Логи дергаются часто, есть даже цифры на сколько часто за 1 минуту: # inotifywatch -e modify access.log Establishing watches... Finished establishing watches, now collecting statistics. total modify filename 487848 487848 access.log Но опять же интересно если там часть softirq, то сколько это в процентах от общего числа. Edited March 3, 2009 by calculator Вставить ник Quote
Dark_Angel Posted March 3, 2009 Author Posted March 3, 2009 (edited) 2calculator: На сколько я знаю, это можно посмотреть профайлером. Софт irq - это фактически не обработанные до конца хардовые прерывания. Это если грубоговоря. Я не знаю, насчет Broadcom и настроек драйверов, но Вам явно надо крутить их. Я знаю, что у Интела в этом плане куча наработок, именно под hard load. 60K пакетов - это еще даже не хард лоад. Вам стоит уточнить у ребят, кто работал с этими сетевыми, как быть в данной ситуации. Где крутить настройки драйверов, попробовать поменять параметры очереди и помогают ли они для данной сетевой. Был бы у Вас Интел, я бы рассказал, что к чему. Я считаю, что в данном случае у Вас банальная перегрузка системы прерываниями от сетевой карты ( сетевых карт ). noatime в данном случае особой роли не сыграет, 8.3 K модификаций в секукнду, конечно много, но горлышко не тут. Кстати, на сколько я знаю, можно попросить логи писать порциями из буфера. Тогда удается свести это число к 10-20 модификаций в секунду, в самом плохом случае, но это тема для другого разговора. Про патч: 2.6.20 - без всяких патчей, стандартное федоровское ядро. Я более чем убежден, что если я его заменю на более свежее, то аффинити всеравно будет работать. Не буду ничего утверждать, но мне кажется, что Вы где-то ошибаетесь при конфигурировании аффинити в новых ядрах, из-за чего оно у Вас и не работает. UPD. На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых. Вы бы к нему обратились за помощью, как и что настроить. Edited March 3, 2009 by Dark_Angel Вставить ник Quote
yun Posted March 3, 2009 Posted March 3, 2009 Дистрибутив: Centos5 Ядро: 2.6.18-92.1.22.el5 Сетевая карта: 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) 01:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01) драйвера: igb-1.3.8.6 cобраны с использованием стандартного спека из архива. загрузка командой: modprobe igb IntMode=3 Смотрим dmesg: Intel(R) Gigabit Ethernet Network Driver - version 1.3.8.6 Copyright (c) 2007-2008 Intel Corporation. PCI: Enabling device 0000:01:00.0 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:01:00.0 to 64 igb: 0000:01:00.0: igb_validate_option: Interrupt Mode set to 3 igb: eth0: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth0: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a4 igb: eth0: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) PCI: Enabling device 0000:01:00.1 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.1[B] -> GSI 17 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:01:00.1 to 64 igb: eth1: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth1: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a5 igb: eth1: igb_probe: Using MSI-X interrupts. 1 rx queue(s), 1 tx queue(s) Прерывания: fgrep eth /proc/interrupts 106: 25 10 0 644 PCI-MSI-X eth0-Q0 114: 25 644 0 10 PCI-MSI-X eth0-Q1 122: 25 0 654 0 PCI-MSI-X eth0-Q2 130: 25 0 0 654 PCI-MSI-X eth0-Q3 138: 1 0 0 0 PCI-MSI-X eth0 146: 23 0 654 0 PCI-MSI-X eth1-Q0 154: 1 0 0 0 PCI-MSI-X eth1 Почему у перавого порта 4 rx очередеи и одна tx, а у второго по одной? ps: прерывания при загрузке модуля без доп. параметров 62: 8 0 0 0 PCI-MSI-X eth0-Q0 170: 1 0 0 0 PCI-MSI-X eth0 178: 6 0 0 0 PCI-MSI-X eth1-Q0 186: 1 0 0 0 PCI-MSI-X eth1 Может параметр воспринимается только первым портом а второй использует режим по умолчанию? Вставить ник Quote
martin74 Posted March 3, 2009 Posted March 3, 2009 почему может? так оно и есть... Вставить ник Quote
calculator Posted March 3, 2009 Posted March 3, 2009 На сколько я знаю, это можно посмотреть профайлером. Конкретный пример очень бы кстати. Не буду ничего утверждать, но мне кажется, что Вы где-то ошибаетесь при конфигурировании аффинити в новых ядрах, из-за чего оно у Вас и не работает. Там сложно где-то ошибиться. На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых. pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее... По параметрам для bnx2 там замечено только: parm: disable_msi:Disable Message Signaled Interrupt (MSI) (int) Сервера DELL, у них вроде адекватная поддержка по общению так. Попробую завтра именно по этой сетевой пообщаться, может что интересного там можно подкрутить. yun Попробуйте в /etc/modprobe.conf соотв. options указать. Вставить ник Quote
yun Posted March 3, 2009 Posted March 3, 2009 Указывал в /etc/modprobe.conf - эффекта ноль Вставить ник Quote
Dark_Angel Posted March 3, 2009 Author Posted March 3, 2009 Конкретный пример очень бы кстати. Я бы и рад, но у меня профайлер, там где есть что смотреть, не работает, я писал выше в этой теме. В других местах показывать нечего. Там сложно где-то ошибиться. Понимаю Ваше возмущение, но у меня на 2.6.20, на 2.6.25 нормально работает affinity, так что дело тут явно не в ядрах, а в Ваших действиях. pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее... Ничего не смогу сказать про данный тест, потому как нет примеров. Из того, что Вы предоставили, я делаю вывод, что проблема в сетевых картах. 25К прерываний - много. Надо сделать меньше прерываний. Проблемы скармливания приложению я не вижу. От скармливания больше прерываний на сетевой карте не становится. По поводу disable MSI, так его лучше не делать, если он включен и работает, но по Вашим данным я этого не вижу. 2yun: Там через запятую принимаются параметры для первого и второго интерфейса. Например modprobe igb IntMode=3,3 Но вообще как-то странно. Неужели, если дать драйверу параметр режима работы (1, 3, статика ), он включает дополнительные очереди? Вставить ник Quote
cant Posted March 3, 2009 Posted March 3, 2009 По прирываниям для eth0, eth1 CPU0 тикает. Пробовал их разнести по разным процессорам, но там похоже без патча не обойтись. Отключение MSI не помогает - BIOS с последней прошивкой упорно ставит сетевые да еще и megasas на 1 прирывание. И честно говоря патчить пока страшно, тем более что он не под мое ядро(2.6.18).На интерфейсах(они в бондинге) есть дропы, но их небольшой процент. Причина только то, что при тестировании старшие ядра показали ощутимо худшую производительность. Но 2.6.18 до сих пор поддерживается. У меня конкретно 2.6.18-53.1.19.el5. Насчет SMP affinity: 2.6.20 - отлично все работает. ... вот засада. На bmx2 мне тоже предстоит linux-router собрать. теперь даже не знаю 2.6.18 или старше ставить. К сожалению я пока не совсем в теме, но странно, ведь пишут что, в 2.6.18 SMP-affinity для bmx2 должно стопудово работать после отключения MSI https://bugzilla.redhat.com/show_bug.cgi?id=432451 Я правильно понимаю, что bmx2 (будь хоть с MSI) будет генерить только одно прерывание(tx+rx) ? И кроме как irqbalance его никак иначе нельзя размазать на несколько ядер ? Вставить ник Quote
yun Posted March 3, 2009 Posted March 3, 2009 (edited) 2yun: Там через запятую принимаются параметры для первого и второго интерфейса.Например modprobe igb IntMode=3,3 Но вообще как-то странно. Неужели, если дать драйверу параметр режима работы (1, 3, статика ), он включает дополнительные очереди? Да, по-дефолту очереди всего две.Кстати судя по исходникам на данном чипе должно быть 8 очередей, но почему-то тока на rx 4, а на tx 1 даже при MSI-MQ. Карта осталась на работе, но возможно что для 2-х портов надо будет указать не IntMode=3,3 а IntMode=3,3,3,3 (один параметр для одного направления (tx либо rx) одного порта), но к сожалению в документации буквально 3 слова без подробностей. Edited March 3, 2009 by yun Вставить ник Quote
calculator Posted March 3, 2009 Posted March 3, 2009 (edited) Dark_Angel Все же хочу прояснить. affinity работает именно с bnx2 драйвером? cant Скорее всего при отключеном MSI оно работает, но я не мог попробовать - у меня все на 1 прирывании. Возможно это _фича_ моей матплаты. Edited March 3, 2009 by calculator Вставить ник Quote
Dark_Angel Posted March 3, 2009 Author Posted March 3, 2009 2yun: В доке интела четко написано, что параметры указываются для устройств, а не для интерфейсов или очередей. Другой вопрос соответствует ли это реальности. 2calculator: К сожалению, у меня нет таких сетевух, соответственно, что такое bnx2 драйвер, не знаю. Вставить ник Quote
SSTS Posted March 4, 2009 Posted March 4, 2009 (edited) Dark_AngelВсе же хочу прояснить. affinity работает именно с bnx2 драйвером? cant Скорее всего при отключеном MSI оно работает, но я не мог попробовать - у меня все на 1 прирывании. Возможно это _фича_ моей матплаты. DELL PowerEdge 1950 dmesg Broadcom NetXtreme II Gigabit Ethernet Driver bnx2 v1.5.8.1 (May 7, 2007) ACPI: PCI Interrupt 0000:05:00.0[A] -> GSI 16 (level, low) -> IRQ 16 eth1: Broadcom NetXtreme II BCM5708 1000Base-T (B2) PCI-X 64-bit 133MHz found at mem f8000000, IRQ 16, node addr 0019b9e09cf0 lspci 05:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12) cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 CPU4 CPU5 CPU6 CPU7 0: 4258 129 103 3563 3747 3704 3675 3695 IO-APIC-edge timer 1: 0 0 0 0 1 0 1 0 IO-APIC-edge i8042 8: 2 2 0 1 2 0 0 0 IO-APIC-edge rtc 9: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi acpi 12: 1 1 0 0 0 1 0 1 IO-APIC-edge i8042 14: 9 6 5 9 10 12 12 11 IO-APIC-edge ide0 17: 1826227 712006 437407 1817138 1821025 1827378 1824792 1827646 IO-APIC-fasteoi megasas 18: 1220731 683744 516871 1229552 1225973 1219423 1221904 1219444 IO-APIC-fasteoi megasas 19: 0 0 0 0 0 0 0 0 IO-APIC-fasteoi libata 20: 133 11 4 134 133 135 134 131 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb4 21: 554 56 44 549 558 547 554 552 IO-APIC-fasteoi uhci_hcd:usb3 212: 22318117 3715726058 22228828 22344487 22290311 22064286 22459284 22264387 PCI-MSI-edge eth1 213: 38858983 38802674 3869402169 38832296 38886691 39112399 38717588 38912323 PCI-MSI-edge eth0 eth1 висит на CPU1 uname -a Linux biling 2.6.21.5 #22 SMP Tue Dec 16 14:22:55 EET 2008 i686 Intel® Xeon® CPU E5320 @ 1.86GHz GenuineIntel GNU/Linux smp_affinity включаю так echo "02" >/proc/irq/212/smp_affinity Могу выслать есле надо конфиг ядра Edited March 4, 2009 by SSTS Вставить ник Quote
yun Posted March 4, 2009 Posted March 4, 2009 Действительно, помогло modprobe igb IntMode=3,3 # dmesg Intel(R) Gigabit Ethernet Network Driver - version 1.3.8.6 Copyright (c) 2007-2008 Intel Corporation. PCI: Enabling device 0000:01:00.0 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 169 PCI: Setting latency timer of device 0000:01:00.0 to 64 igb: 0000:01:00.0: igb_validate_option: Interrupt Mode set to 3 igb: eth0: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth0: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a4 igb: eth0: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) PCI: Enabling device 0000:01:00.1 (0000 -> 0003) ACPI: PCI Interrupt 0000:01:00.1[B] -> GSI 17 (level, low) -> IRQ 193 PCI: Setting latency timer of device 0000:01:00.1 to 64 igb: 0000:01:00.1: igb_validate_option: Interrupt Mode set to 3 igb: eth1: igb_probe: Intel(R) Gigabit Ethernet Network Connection igb: eth1: igb_probe: (PCIe:2.5Gb/s:Width x4) 00:1b:21:2e:9c:a5 igb: eth1: igb_probe: Using MSI-X interrupts. 4 rx queue(s), 1 tx queue(s) # cat /proc/interrupts | grep eth 140: 23 63 0 0 PCI-MSI-X eth0-Q0 148: 23 0 0 63 PCI-MSI-X eth0-Q1 156: 23 43 20 0 PCI-MSI-X eth0-Q2 164: 23 0 0 63 PCI-MSI-X eth0-Q3 172: 2 0 0 0 PCI-MSI-X eth0 180: 21 67 0 0 PCI-MSI-X eth1-Q0 188: 21 0 67 0 PCI-MSI-X eth1-Q1 196: 21 20 0 47 PCI-MSI-X eth1-Q2 204: 21 0 67 0 PCI-MSI-X eth1-Q3 212: 1 0 0 0 PCI-MSI-X eth1 Но почему tx по одной очереди? Вставить ник Quote
Dark_Angel Posted March 4, 2009 Author Posted March 4, 2009 2yun: А сколько должно быть по даташиту? Вставить ник Quote
yun Posted March 4, 2009 Posted March 4, 2009 Цитата из исходников: #define IGB_MAX_RX_QUEUES (hw->mac.type > e1000_82575 ? 8 : 4) #define IGB_MAX_TX_QUEUES (hw->mac.type > e1000_82575 ? 8 : 4) Судя по этому коду - 8 на rx и 8 на tx. А по факту получается 4 на rx и 1 на tx. Вставить ник 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.