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

Уважаемые, какой можете поставить диагноз по статистике 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? Потому как, судя по документации, поллинг начинает работать только, когда количество пакетов превышает количество возможных прерываний в системе

Если режим - авто - то нельзя. Иначе можно указать конкретное кол-во пакетов на каждое прерывание.

А где указать можно не подскажите?

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


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

Какой проц?

netstat -s (особо интересует количество установленных коннектов)

mpstat -P ALL 1

cat /proc/interrupts

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


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

nuclearcat

Статистики довольно много, поместил все на pastebin. Сейчас статистика довольно скудная, потому как нагрузка не пиковая и этот аналогичный конфигу сервер добавили в помощь буквально как пару дней. По прирываниям для eth0, eth1 CPU0 тикает. Пробовал их разнести по разным процессорам, но там похоже без патча не обойтись. Отключение MSI не помогает - BIOS с последней прошивкой упорно ставит сетевые да еще и megasas на 1 прирывание. И честно говоря патчить пока страшно, тем более что он не под мое ядро(2.6.18).

На интерфейсах(они в бондинге) есть дропы, но их небольшой процент.

Стоит еще сказать что сейчас nginx работает на всех 8 процессорах. Но видимо его лучьше вынести с процессора разруливающего softirq?

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

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


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

Эммм, у вас 2.6.18 ? Так тот патч был сделан гораздо позже.

С таким древним ядром сложно что-то ожидать хорошее. Есть причины по котороым у вас такое старое ядро?

 

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


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

nuclearcat

Причина только то, что при тестировании старшие ядра показали ощутимо худшую производительность. Но 2.6.18 до сих пор поддерживается. У меня конкретно 2.6.18-53.1.19.el5.

Вот наверно по current_fs_time, думаю подкрутить noatime для fs.

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


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

nuclearcat

Сейчас нет. В том смысле что туда пишет, но толку никакого.

 

Вот вынес nginx с 1 процессора, теперь там только проценты от softirq. Пиковая нагрузка в цифрах.

Завтра попытаюсь уговорить товарища поставить noatime, интересно посмотреть какие после этого цифры будут.

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

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


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

2calculator: noatime дает прирост 20-30% на операциях постоянной записи на HDD. Если у Вас только чтение, то это ничего не даст.

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


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

Dark_Angel

Там очень много логов пишется. В пиках больше 4ГБ за 15 минут интервал получается. Думаю должно ощутимо помочь, тем более оно опять же hpet дергает.

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


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

2calculator: Ну тут важно определить, что пораждает softirq. Если это винт, то да, это поможет, т.к. логи это много мелких обращений к винту. Но если нет, то это ничего не даст.

 

Насчет SMP affinity: 2.6.20 - отлично все работает.

 

По вопросу: Надо убрать сетевые карты с одного процессора. Это однозначно. Надо включить NAPI. Это однозначно. 25К прерываний - это много, надо уменьшать, иначе машина будет задыхаться.

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

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


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

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, то сколько это в процентах от общего числа.

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

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


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

2calculator: На сколько я знаю, это можно посмотреть профайлером. Софт irq - это фактически не обработанные до конца хардовые прерывания. Это если грубоговоря.

 

Я не знаю, насчет Broadcom и настроек драйверов, но Вам явно надо крутить их. Я знаю, что у Интела в этом плане куча наработок, именно под hard load. 60K пакетов - это еще даже не хард лоад. Вам стоит уточнить у ребят, кто работал с этими сетевыми, как быть в данной ситуации. Где крутить настройки драйверов, попробовать поменять параметры очереди и помогают ли они для данной сетевой. Был бы у Вас Интел, я бы рассказал, что к чему.

 

Я считаю, что в данном случае у Вас банальная перегрузка системы прерываниями от сетевой карты ( сетевых карт ). noatime в данном случае особой роли не сыграет, 8.3 K модификаций в секукнду, конечно много, но горлышко не тут. Кстати, на сколько я знаю, можно попросить логи писать порциями из буфера. Тогда удается свести это число к 10-20 модификаций в секунду, в самом плохом случае, но это тема для другого разговора.

 

Про патч: 2.6.20 - без всяких патчей, стандартное федоровское ядро. Я более чем убежден, что если я его заменю на более свежее, то аффинити всеравно будет работать. Не буду ничего утверждать, но мне кажется, что Вы где-то ошибаетесь при конфигурировании аффинити в новых ядрах, из-за чего оно у Вас и не работает.

 

UPD. На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых. Вы бы к нему обратились за помощью, как и что настроить.

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

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


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

Дистрибутив: 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

Может параметр воспринимается только первым портом а второй использует режим по умолчанию?

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


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

На сколько я знаю, это можно посмотреть профайлером.

Конкретный пример очень бы кстати.

 

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

Там сложно где-то ошибиться.

 

На первых страницах сабжа, уважаемый Ivan Rostovikov делится рассказами про 400 kpps на Broadcom сетевых.

pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее...

 

По параметрам для bnx2 там замечено только:

parm: disable_msi:Disable Message Signaled Interrupt (MSI) (int)

Сервера DELL, у них вроде адекватная поддержка по общению так. Попробую завтра именно по этой сетевой пообщаться, может что интересного там можно подкрутить.

 

yun

Попробуйте в /etc/modprobe.conf соотв. options указать.

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


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

Указывал в /etc/modprobe.conf - эффекта ноль

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


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

Конкретный пример очень бы кстати.

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

 

Там сложно где-то ошибиться.

Понимаю Ваше возмущение, но у меня на 2.6.20, на 2.6.25 нормально работает affinity, так что дело тут явно не в ядрах, а в Ваших действиях.

 

pktgen'ом мы на эту машину натравливали ~650k - жила нормально(слабый генератор просто больше не мог). Тут же вопрос что нужно не отработать или отроутить пакеты. Их нужно приложению скормить, а это вроде как тяжелее...

 

Ничего не смогу сказать про данный тест, потому как нет примеров. Из того, что Вы предоставили, я делаю вывод, что проблема в сетевых картах. 25К прерываний - много. Надо сделать меньше прерываний. Проблемы скармливания приложению я не вижу. От скармливания больше прерываний на сетевой карте не становится.

 

По поводу disable MSI, так его лучше не делать, если он включен и работает, но по Вашим данным я этого не вижу.

 

2yun: Там через запятую принимаются параметры для первого и второго интерфейса.

Например

 

modprobe igb IntMode=3,3

 

Но вообще как-то странно. Неужели, если дать драйверу параметр режима работы (1, 3, статика ), он включает дополнительные очереди?

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


Ссылка на сообщение
Поделиться на других сайтах
По прирываниям для 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 его никак иначе нельзя размазать на несколько ядер ?

 

 

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


Ссылка на сообщение
Поделиться на других сайтах
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 слова без подробностей.

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

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


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

Dark_Angel

Все же хочу прояснить. affinity работает именно с bnx2 драйвером?

 

cant

Скорее всего при отключеном MSI оно работает, но я не мог попробовать - у меня все на 1 прирывании. Возможно это _фича_ моей матплаты.

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

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


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

2yun: В доке интела четко написано, что параметры указываются для устройств, а не для интерфейсов или очередей. Другой вопрос соответствует ли это реальности.

 

2calculator: К сожалению, у меня нет таких сетевух, соответственно, что такое bnx2 драйвер, не знаю.

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


Ссылка на сообщение
Поделиться на других сайтах
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

 

Могу выслать есле надо конфиг ядра

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

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


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

Действительно, помогло 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 по одной очереди?

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


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

Цитата из исходников:

#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.

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


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас