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

2Умник: ksoftirqd - это само ядро. Например, как бы Вы не старались, если у Вас есть шейпинг, iptables на машине - у Вас будут идти тики на ksoftirqd. И хотя, название, отвечающее, якобы, за софт прерывания, но тем не менее, присутствует, даже когда софтпрерываний нет или очень мало. Кстати, уже обсуждалось в этой теме. Да, а в ядрах 2.4 было как Вы рассказываете.

 

И больше прерываний - только хуже. Например при прерывании было забрано из буфера 100 пакетов и 1000 пакетов. Какое из них более еффективное? На задержке ни в том, ни в том случае это заметно не отразится, зато прерываний будет напорядок меньше и процессор сможет заниматься делом, а не спешно забирать пакеты из буферов карты которых предостаточно.

 

Насчет функций, я просто уточнил, и к HZ это не имеет отношения.

 

Насчет <= 20K - да, но это на каждую очередь.

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

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


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

options igb IntMode=2,2,2,2 InterruptThrottleRate=3000,3000,3000,3000 RSS=4,4,4,4 QueuePairs=1,1,1,1 LLIPort=80
При таких опциях ethtool -c eth2 что показывает.

ethtool -c eth2

Coalesce parameters for eth2:

Adaptive RX: off TX: off

stats-block-usecs: 0

sample-interval: 0

pkt-rate-low: 0

pkt-rate-high: 0

 

rx-usecs: 325

rx-frames: 0

rx-usecs-irq: 0

rx-frames-irq: 0

 

tx-usecs: 0

tx-frames: 0

tx-usecs-irq: 0

tx-frames-irq: 0

 

rx-usecs-low: 0

rx-frame-low: 0

tx-usecs-low: 0

tx-frame-low: 0

 

rx-usecs-high: 0

rx-frame-high: 0

tx-usecs-high: 0

tx-frame-high: 0

Все верно...

 

Попробуйте порулить ITR-ом без релоада модуля:

ethtool -C eth2 rx-usecs XXX

где XXX=1000000/кол-во прерываний.

 

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


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

У меня видимо неправильное ядро :)

root         4  0.0  0.0      0     0 ?        S    Mar26   0:01  \_ [ksoftirqd/0]
root         7  0.0  0.0      0     0 ?        S    Mar26   0:00  \_ [ksoftirqd/1]
root        10  0.0  0.0      0     0 ?        S    Mar26   0:00  \_ [ksoftirqd/2]
root        13  0.0  0.0      0     0 ?        S    Mar26   0:00  \_ [ksoftirqd/3]

 

Насчет <= 20K - да, но это на каждую очередь.
Почему? Я mpstat смотрю - в сумме на ядре не видел больше 20000.

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


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

2Умник: может у Вас там просто форвардинг?

 

На ядре или в системе? Просто если 4 ядра, то это 80К в системе.

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

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


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

Dark_Angel, нет, там NAT + lISG. Правда pps не слишком высокий: в пиках до 180К (то есть 180 пришло, и еще 180 вышло).

 

 

Просто если 4 ядра, то это 80К в системе.
Именно так. Одно ядро - один интерфейс.
Изменено пользователем Умник

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


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

2Умник: NAT не дает ksoftirqd, уж не знаю почему. Возможно softirqd вылазит когда идет переключение контекста ядра. Что такое ISG не знаю.

 

180К пакетов при 20000 прерываний - это по 9 пакетов за заход. Мне кажется, что это расточительно. Можно минимум до 10 урезать, а то и до 8.

 

У человека другая проблема - у него 2 интерфейса и 8 ядер. Тут можно разойтись по 1-2К на каждое ядро. Будет 4-8К прерываний на каждый интерфейс. Нормально.

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

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


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

Вот, господа, пдф-нашел...

http://www.redhat.com/promo/summit/2008/do...Mark_Wagner.pdf

В какой то степени из нашей темы...

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


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

2Jugernault: Может я что-то пропустил, но по большей части ребята фигней занимаются. Поменяли вызов - получили 10% прирост, поменяли MTU - вообще шоколад. Для своего эксперимента могли сразу с MTU начать и не мучать мозк и уложится в 5 страниц. Не понимаю как это можно применить к сабжу.

 

2Уник: И кстати, зашел на одну машину посмотреть. Там 2.1.9, 82576, ITR стоит автоматом, как ни странно. Там 1 интерфейс размазан на 4 ядра. Драйвер делает по 2К на ядро. Выбор оставлен драйверу, наверное, потому что на данной машине нет проблем с продуктивностью. Там правда всего 100-110Kpps. Думал, что прибито статически, потому что больше прерываний там не видел.

 

А потом я пошел почитать про драйвер и увидел:

"NOTE: Dynamic interrupt throttling is only applicable to adapters operating in MSI or Legacy interrupt mode, using a single receive queue."

"In order to limit the CPU utilization without impacting the overall throughput, we recommend that you load the driver as follows:

modprobe igb InterruptThrottleRate=3000,3000,3000"

 

Так что видимо все же надо прибивать статикой.

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

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


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

2Jugernault: Может я что-то пропустил, но по большей части ребята фигней занимаются. Поменяли вызов - получили 10% прирост, поменяли MTU - вообще шоколад.
Это да... Да и роутингом тут не пахнет...
2Jugernault: Может я что-то пропустил
Вы не обратили внимание на страницу 11 - у них в тестах rxusecs=5, т.е. ITR=200000. И при этом они еще чего то добиваются.

А на 53 странице начинают рулить латентностью и снижают ITR до 1000.

Странно все это - берут экстремально низкое и экстремально высокое значения и при этом всегда добиваются положительного результата. Правда при экстремально высоком только наворачивание МТУ помогло. А в нашем случае это не вариант.

Не понимаю как это можно применить к сабжу.
Не применить, а поразмыслить.

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


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

NOTE: Dynamic interrupt throttling is only applicable to adapters operating in MSI or Legacy interrupt mode, using a single receive queue."

"In order to limit the CPU utilization without impacting the overall throughput, we recommend that you load the driver as follows:

modprobe igb InterruptThrottleRate=3000,3000,3000

Непонятное высказывание, учитывая что сейчас везде MSI-X. Если принимать это за истину, то получается, что значение по-умолчанию для подавляющего числа случаев просто неоптимально. Я спрошу в списке рассылки, что они имели ввиду.

 

UPD: Про первую часть я понял. По умолчанию используется не dynamic, а dynamic conservative, так что все нормально.

Изменено пользователем Умник

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


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

2Jugernault: Понимаете, когда люди страдают фигней, я могу пропустить важный момент, т.к. теряю к занятию интерес. Я вообще слабо представляю машину с 200К прерываний, пусть даже по MSI-X. Я бы не стал данный документ рассматривать как интересный с практической точки зрения. Так, почитать, на других посмотреть.

 

2Умник: Dynamic conservative и dynamic отличаются только количеством прерываний для разных паттернов трафика. Характерно, что на той машине, о которой я говорил, стоит автоматом IntMode. И другого числа, кроме 8K я не видел там за всё время, хотя трафик плавает от 30К до 110К. Так что я думаю, что данная заметка справедлива для обоих dynamic.

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


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

Тоже столкнулся с проблемой ksoftirqd.

 

Система двухпроцессорный Xeon 5502 (2 процессора по 2 ядра), Fedora 12, ядро 2.6.35.6-48.fc12.i686.PAE, сетевая карта, через которую ходит трафик, разбита на 2 вилана (входящий-исходящий), Intel 82574L (прерывания разбиты на tx rx по разным ядрам).

 

Последние события dmesg

 

[ 3541.596770] CE: hpet increased min_delta_ns to 7500 nsec

[25375.071900] CE: hpet increased min_delta_ns to 11250 nsec

[47283.578542] hrtimer: interrupt took 4046 ns

 

 

perf top показывает

 

-----------------------------------------------------------------------------------------
   PerfTop:    1937 irqs/sec  kernel:86.9%  exact:  0.0% [1000Hz cycles],  (all, 4 CPUs)
-----------------------------------------------------------------------------------------

             samples  pcnt function               DSO
             _______ _____ ______________________ ________

             2538.00 14.0% arc4_crypt             [arc4]
             1600.00  8.9% intel_idle             [kernel]
             1058.00  5.9% arc4_set_key           [arc4]
              967.00  5.3% crypto_ecb_crypt       [ecb]
              514.00  2.8% _raw_spin_lock         [kernel]
              510.00  2.8% nf_ct_tuple_equal      [kernel]
              463.00  2.6% sha_transform          [kernel]
              328.00  1.8% e1000_clean_rx_irq     [e1000e]
              273.00  1.5% e1000_intr_msi         [e1000e]
              243.00  1.3% ipt_do_table           [kernel]
              226.00  1.3% kmem_cache_alloc       [kernel]
              225.00  1.2% e1000_clean_tx_irq     [e1000e]
              191.00  1.1% hpet_next_event        [kernel]
              186.00  1.0% e1000_clean            [e1000e]
              185.00  1.0% skb_release_head_state [kernel]
              164.00  0.9% __nf_conntrack_find    [kernel]
              153.00  0.8% kmem_cache_free        [kernel]
              152.00  0.8% ip_route_input_common  [kernel]
              141.00  0.8% system_call            [kernel]

 

arc4 - это шифрование mppe для pptp, ядро оно не трогает.

 

А вот что такое intel_idle ?

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


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

Вроде нашел. https://bugzilla.redhat.com/show_bug.cgi?id=636384

 

В моем ядре по умолчанию включен дебаггинг и из-за этого падает производительность. Сейчас скомпилю новое ядро, посмотрим, исправит ли это ситуацию.

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


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

Нет, не то. Ядро без дебаггинга ведет себя точно также.

            CPU0       CPU1       CPU2       CPU3
   0:   36961339          0          0          0   IO-APIC-edge      timer
   8:         52          0          0          0   IO-APIC-edge      rtc0
   9:          1          0          0          0   IO-APIC-fasteoi   acpi
  16:          0          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb6, uhci_hcd:usb7, uhci_hcd:usb8
  18:       2108          0          0    2197354   IO-APIC-fasteoi   ata_piix
  19:         43          0          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb3, uhci_hcd:usb4, uhci_hcd:usb5
  21:          0          0          0          0   IO-APIC-fasteoi   ata_piix
  64:          0          0          0          0   PCI-MSI-edge      aerdrv
  65:          0          0          0          0   PCI-MSI-edge      aerdrv
  66:          0          0          0          0   PCI-MSI-edge      aerdrv
  67:          0          0          0          0   PCI-MSI-edge      aerdrv
  68:          0          0          0          0   PCI-MSI-edge      pciehp
  69:          0          0          0          0   PCI-MSI-edge      pciehp
  70:     243592  464722482     750209   37565640   PCI-MSI-edge      eth1
  71:          3          0          0          0   PCI-MSI-edge      ioat-msix
  72:        679  471475487  514932072          0   PCI-MSI-edge     eth0-tx0
  73:        126          0          0  983676224   PCI-MSI-edge      eth0-rx0
  74:         64          8          0          0   PCI-MSI-edge      eth0
  75:          3          0          0          0   PCI-MSI-edge      ioat-msix
  76:          3          0          0          0   PCI-MSI-edge      ioat-msix
  77:          3          0          0          0   PCI-MSI-edge      ioat-msix
  78:          3          0          0          0   PCI-MSI-edge      ioat-msix
  79:          3          0          0          0   PCI-MSI-edge      ioat-msix
  80:          3          0          0          0   PCI-MSI-edge      ioat-msix

 

При этом

top - 21:53:28 up 21:08,  3 users,  load average: 0.41, 0.41, 0.76
Tasks: 2345 total,   2 running, 2343 sleeping,   0 stopped,   0 zombie
Cpu0  :  2.8%us,  5.5%sy,  0.0%ni, 89.0%id,  0.0%wa,  0.0%hi,  2.8%si,  0.0%st
Cpu1  : 23.1%us,  6.0%sy,  0.0%ni, 60.7%id,  0.0%wa,  0.0%hi, 10.3%si,  0.0%st
Cpu2  :  0.9%us,  0.9%sy,  0.0%ni, 35.5%id,  0.0%wa,  0.0%hi, 62.7%si,  0.0%st
Cpu3  :  0.9%us,  0.9%sy,  0.0%ni, 97.3%id,  0.0%wa,  0.0%hi,  0.9%si,  0.0%st
Mem:   8240856k total,  8051576k used,   189280k free,   136896k buffers
Swap:  3145724k total,        0k used,  3145724k free,  5622192k cached

 

Как видно сильно загружается только CPU2, то есть eth0-tx0. Почему rx-0 так не нагружен? По идее они должны быть загружены одинаково, ведь eth0 разбит на виланы eth0.10 и eth0.100 и трафик гуляет в обе стороны абсолютно одинаково - сколько пришло столько и ушло. Проблемы начинаются при ~ 20-25kpps и трафике около 320-340 мбит в одном направлении. Это просто смешные показатели для такой машины. Да, на машине стоит ВПН-сервер и ppp, поднимая интерфейс, применяет шейпер

 

/sbin/tc qdisc add dev $REALDEVICE root tbf rate ${shape}kbit burst ${burst}kb latency 80ms minburst 1540 >/dev/null 2>&1
/sbin/tc qdisc add dev $REALDEVICE handle ffff: ingress
/sbin/tc filter add dev $REALDEVICE parent ffff: protocol ip u32 match ip src 0.0.0.0/0 police rate ${shape}kbit burst ${burst}kb drop flowid :1

 

Всё. Ната нет, iptables 10 правил, да и их очищал - не помогает. Пробовал убирать /sbin/tc qdisc add dev $REALDEVICE handle ffff: ingress , думал что с очередью не справляется - бесполезно.

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


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

2Justas: несколько вопросов:

 

1. Почему у вас tx очередь к ядру не прибита?

2. Включен ли irq balance?

3. Сколько суммарно интерфейсов у Вас?

4. Сколько прерываний выполняет каждая очередь?

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


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

2Justas: несколько вопросов:

 

1. Почему у вас tx очередь к ядру не прибита?

Как это не прибита? Прибита. eth0-tx0 сидит на первом ядре второго процессора.

 

2. Включен ли irq balance?

В текущий момент - да. Но ранее я пробовал выключать и регулировать прерывания вручную путем

 

echo "1" > /proc/irq/70/smp_affinity
echo "4" > /proc/irq/72/smp_affinity
echo "8" > /proc/irq/73/smp_affinity

 

К положительному результату не приводит.

 

 

3. Сколько суммарно интерфейсов у Вас?

Физических - два, виртуальных - 2. То есть eth0 разбит на eth0.10 и eth0.100 и весь трафик через них и ходит.

eth1 выполняет функцию сбора статистики с mirror-порта коммутатора.

 

 

4. Сколько прерываний выполняет каждая очередь?

 

Примерно 18000 прерываний на очередь судя по /proc/interrupts. И в своем предыдущем посте я погорячился, не туда смотрел. Проблемы начинаются при ориентировочно таких показателях:

 

sar -n DEV 1


07:16:47 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/
07:16:48 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.0
07:16:48 PM      eth1  30007.14      0.00  27774.51      0.00      0.00      0.00      0.0
07:16:48 PM      eth0  56926.53  53398.98  38923.93  38864.55      0.00      0.00      0.0
07:16:48 PM   eth0.10  28160.20  24559.18  25699.67  11626.35      0.00      0.00      0.0
07:16:48 PM  eth0.100  28790.82  28842.86  12483.71  27242.55      0.00      0.00      0.0

 

 

mpstat -P ALL -A


07:18:40 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
07:18:40 PM  all    4.67    0.85    1.89    0.94    0.00    5.63    0.00    0.00   86.02
07:18:40 PM    0    4.54    1.24    1.40    0.51    0.00    0.56    0.00    0.00   91.75
07:18:40 PM    1    9.41    0.65    4.61    0.93    0.00    5.67    0.00    0.00   78.73
07:18:40 PM    2    1.78    1.41    0.71    0.07    0.00   15.60    0.00    0.00   80.43
07:18:40 PM    3    2.74    0.10    0.72    2.25    0.00    0.68    0.00    0.00   93.51

07:18:40 PM  CPU    intr/s
07:18:40 PM  all  39157.37
07:18:40 PM    0    534.81
07:18:40 PM    1      0.00
07:18:40 PM    2      0.00
07:18:40 PM    3      0.00

07:18:40 PM  CPU     0/s     8/s     9/s
07:18:40 PM    0  534.81    0.00    0.00
07:18:40 PM    1    0.00    0.00    0.00
07:18:40 PM    2    0.00    0.00    0.00
07:18:40 PM    3    0.00    0.00    0.00

 

То есть ~30000 pps на eth1 и 55000 pps на eth0. Итого 85 kpps, из них 55 kpps и 350 мбит - это маршрутизация.

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


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

Добрался я до oprofile, наконец-то.

 

# opcontrol --reset

# opcontrol --vmlinux=/usr/lib/debug/lib/modules/2.6.35.10-76.fc12.i686.PAE/vmlinux

# opcontrol --start

Using default event: CPU_CLK_UNHALTED:100000:0:1:1

Using 2.6+ OProfile kernel interface.

Reading module info.

Using log file /var/lib/oprofile/samples/oprofiled.log

Daemon started.

Profiler running.

 

 

 

Подключаюсь к VPN-серверу со своего компьютера. Делаю

 

ping -f www.ru

 

 

Вижу как резко возрастает top

 

top - 23:30:15 up 1 day, 22:48,  3 users,  load average: 1.67, 1.16, 0.76
Tasks: 1694 total,   3 running, 1691 sleeping,   0 stopped,   0 zombie
Cpu0  :  0.9%us,  0.9%sy,  0.0%ni, 93.4%id,  3.8%wa,  0.0%hi,  0.9%si,  0.0%st
Cpu1  : 12.5%us,  6.7%sy,  0.0%ni, 77.5%id,  0.8%wa,  0.0%hi,  2.5%si,  0.0%st
Cpu2  :  0.0%us,  0.9%sy,  0.0%ni, 10.2%id,  0.0%wa,  0.0%hi, 88.9%si,  0.0%st
Cpu3  :  2.7%us,  4.5%sy,  0.0%ni, 87.3%id,  3.6%wa,  0.0%hi,  1.8%si,  0.0%st
Mem:   8240856k total,  7714504k used,   526352k free,   121516k buffers
Swap:  3145724k total,        0k used,  3145724k free,  5556320k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
   10 root      20   0     0    0    0 S 70.5  0.0 109:44.53 ksoftirqd/2
2248 root      20   0  142m  53m  380 S 30.1  0.7 468:35.97 LBcd
11827 root      20   0  4336 2840  848 R  6.6  0.0  23:55.65 top
   17 root      20   0     0    0    0 R  3.8  0.0  61:39.04 events/2
4636 root      20   0  8068 2532 1852 S  2.8  0.0   0:00.52 pppd
29514 root      20   0  4400  824  632 S  2.8  0.0   0:09.11 sadc
9385 root      20   0  1936  460  404 S  1.9  0.0   0:00.08 pptpctrl
1505 root      20   0  3048  568  328 S  0.9  0.0   3:31.87 irqbalance
18999 root      20   0  8068 2580 1904 S  0.9  0.0   0:06.01 pppd
29512 root      20   0  4640  972  552 S  0.9  0.0   0:03.34 sar
    1 root      20   0  2092  724  508 S  0.0  0.0   0:01.52 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S  0.0  0.0   0:29.05 ksoftirqd/0
    4 root      RT   0     0    0    0 S  0.0  0.0   0:00.39 migration/0
    5 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    6 root      RT   0     0    0    0 S  0.0  0.0   0:02.82 migration/1
    7 root      20   0     0    0    0 S  0.0  0.0   0:32.16 ksoftirqd/1
    8 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/1

 

 

Смотрю статистику своего интерфейса

 

# sar -n DEV 1 | grep ppp402

11:31:15 PM    ppp402  25290.10  25287.13   2074.39   2074.18      0.00      0.00      0.00
11:31:16 PM    ppp402  20298.00  20317.00   1664.88   1666.47      0.00      0.00      0.00
11:31:17 PM    ppp402  20583.00  20552.00   1688.25   1685.75      0.00      0.00      0.00
11:31:18 PM    ppp402  14252.53  14254.55   1168.96   1169.16      0.00      0.00      0.00
11:31:19 PM    ppp402  17409.71  17425.24   1427.93   1429.23      0.00      0.00      0.00
11:31:20 PM    ppp402  18971.28  18967.02   1556.22   1555.75      0.00      0.00      0.00
11:31:21 PM    ppp402  17168.93  17170.87   1408.22   1408.41      0.00      0.00      0.00
11:31:22 PM    ppp402  17822.00  17808.00   1461.77   1460.65      0.00      0.00      0.00

 

 

 

То есть тупой флуд на 20 kpps укладывает сервер.

 

 

Далее

 

# opcontrol --shutdown

 

# opreport -l

 

CPU: Intel Core/i7, speed 1866.45 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit mask of 0x00 (No unit mask) count 100000
samples  %        image name               app name                 symbol name
3002815  16.1279  arc4                     arc4                     /arc4
2526091  13.5674  LBcd                     LBcd                     /usr/LBcd
1343587   7.2163  vmlinux                  vmlinux                  poll_idle
1078459   5.7923  e1000e                   e1000e                   /e1000e
815201    4.3784  ecb                      ecb                      /ecb
366514    1.9685  vmlinux                  vmlinux                  sha_transform
354812    1.9057  vmlinux                  vmlinux                  nf_ct_tuple_equal
287738    1.5454  vmlinux                  vmlinux                  intel_idle
281076    1.5096  vmlinux                  vmlinux                  mutex_spin_on_owner
265681    1.4269  vmlinux                  vmlinux                  ipt_do_table
215145    1.1555  vmlinux                  vmlinux                  sch_direct_xmit
177920    0.9556  ppp_generic              ppp_generic              /ppp_generic
166282    0.8931  vmlinux                  vmlinux                  skb_release_head_state
144344    0.7753  vmlinux                  vmlinux                  dev_queue_xmit
140270    0.7534  vmlinux                  vmlinux                  kmem_cache_alloc
132683    0.7126  vmlinux                  vmlinux                  __nf_conntrack_find
122292    0.6568  vmlinux                  vmlinux                  system_call
122009    0.6553  vmlinux                  vmlinux                  kmem_cache_free
119600    0.6424  vmlinux                  vmlinux                  __kmalloc_track_caller
111203    0.5973  vmlinux                  vmlinux                  __netif_receive_skb
110837    0.5953  vmlinux                  vmlinux                  bit_spin_lock.clone.2

 

/arc4 - это arcfour шифрование mppe. Я подключался к серверу с ним. Позже я подключился без него и при генерации такого же количества пакетов загрузка softirqd была примерно в 2-3 раза ниже.

 

Предварительный вывод - шифрование определенно сильно напрягает ядро.

 

Подтвердит ли кто?

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


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

2Justas:

 

1. А как Вы прибиваете очередь, если у вас запущен irq balance да еще и

72: 679 471475487 514932072 0 PCI-MSI-edge eth0-tx0

 

Второе и третье ядро примерно поровну прерываний?

 

2. Однозначно выключить и прибить руками, причем желательно к последним ядрам самые нагруженые очереди, потому что эти ядра обычно нагружены меньше всего.

3. Езернет интерфейсы не интересны ( вы про них написали до этого ), я спросил про ppp интерфейсы.

4. Это много, опускайте до 4К на очередь.

5. Покажите сколько переключений контекста у Вас сразу. Процессор 1.8 Ггц, это правда?

6. Откуда у вас набегают iowait?

7. Сколько HZ у вас стоит в ядре?

8. А что еще запущено на машине помимо PPTPd?

 

Шифрование, очевидно, сильно грузит систему и это неоднократно обсуждалось тут. Если у вас сетевой НАС, то с шифрованием вам надо будет ставить в 4 раза больше НАСов, чем без него. Поэтому обычно шифрование на НАСах у всех выключено - и без того проблем достаточно.

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

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


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

1. А как Вы прибиваете очередь, если у вас запущен irq balance да еще и

72: 679 471475487 514932072 0 PCI-MSI-edge eth0-tx0

Второе и третье ядро примерно поровну прерываний?

 

2. Однозначно выключить и прибить руками, причем желательно к последним ядрам самые нагруженые очереди, потому что эти ядра обычно нагружены меньше всего.

Нет, это я с smp_affinity игрался и с ядра на ядро перекидывал прерывания.

 

Эту тему я перечитал 2 раза с самого начала, основные требования к настройкам системы понял.

 

 

3. Езернет интерфейсы не интересны ( вы про них написали до этого ), я спросил про ppp интерфейсы.

А, прошу прощения, туплю. Около 1100.

 

 

 

4. Это много, опускайте до 4К на очередь.

Сейчас применяю опции драйвера options e1000e IntMode=2,2 InterruptThrottleRate=3,3.

Подойдет InterruptThrottleRate=4000,4000 ?

 

 

5. Покажите сколько переключений контекста у Вас сразу. Процессор 1.8 Ггц, это правда?

# vmstat -S M

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
5  0      0   5231    167    958    0    0   244   136   43   33  5  8 86  1  0

 

 

Чистая правда.

 

Processor Information
        Socket Designation: CPU1
        Type: Central Processor
        Family: Xeon
        Manufacturer: Intel(R) Corporation
        ID: A5 06 01 00 FF FB EB BF
        Signature: Type 0, Family 6, Model 26, Stepping 5   
        Version: Intel(R) Xeon(R) CPU           E5502  @ 1.87GHz
        Voltage: 1.2 V
        External Clock: 133 MHz
        Max Speed: 4000 MHz
        Current Speed: 1866 MHz
        Status: Populated, Enabled
        L1 Cache Handle: 0x0050
        L2 Cache Handle: 0x0051
        L3 Cache Handle: 0x0052
        Core Count: 2
        Core Enabled: 2
        Thread Count: 2

 

 

 

6. Откуда у вас набегают iowait?

Отличный вопрос. Не знаю. Может, из-за большого количества "пустых", по сути не нужных прерываний? Потому как дисковая подсистема - это софтварный зеркальный raid-1

 

# iostat

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.43    0.91    8.07    0.94    0.00   85.65

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda              13.00       965.87      1095.93  205612762  233301804
sdb              13.39      1010.07      1095.93  215023754  233301804
md0               0.01         0.03         0.00       6196        108
md126           157.46      1972.03      1091.23  419804514  232301032
dm-0            156.89      1972.02      1091.23  419801650  232301032
dm-1              0.00         0.01         0.00       1088          0

 

Не думаю что он так сильно тормозит. Да и операций чтения-записи мало.

 

 

 

7. Сколько HZ у вас стоит в ядре?

CONFIG_HZ_1000=y

CONFIG_HZ=1000

 

 

Шифрование, очевидно, сильно грузит систему и это неоднократно обсуждалось тут. Если у вас сетевой НАС, то с шифрованием вам надо будет ставить в 4 раза больше НАСов, чем без него. Поэтому обычно шифрование на НАСах у всех выключено - и без того проблем достаточно.

Такой вопрос. Меня смущает, что arc4 грузит именно одну очередь на конкретном интерфейсе сетевого адаптера. Очевидно, реализация алгоритма шифрования напрямую связана с сетевой подсистемой и ее прерываниями. Раз нагружается TX, то это исходящий от сервера к абоненту зашифрованный трафик и львиную долю процессорного времени занимает шифрование. Хотя я могу ошибаться. Вопрос: как считаете, если установить карту 1000ET и распределить TX-очередь на 3 ядра, функция шифрования тоже будет распределена на 3 ядра?

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


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

3. Многовато. Я так понимаю это НАС в локальной сети? Зачем там шифрование?

4. Да, статикой прибивайте и после прибивки посмотрите статистику драйвера, нет ли потерь из-за отстутсвия места в буфере. Если будет, подымете до 6К. Для вашего трафика и сетевой 4К - должно быть нормально. Сразу же подкрутите ring buffer.

5. Это что-то левое. Сделайте vmstat 1 и покажите в динамике, потому что судя по тому что Вы показали у Вас 43 прерывания непонятно в какую единицу времени.

6. Нет, iowait от этого не набегает. Дисковые операции плохи не только нагрузкой на ЦП, а переключением контекстов, вымываением кеша у процов, дополнительными прерываниями. Нужно выяснить откуда они идут и постараться их убрать. Это от проблемы, конечно, не излечит, но даст еще немного запаса производительности. Кроме того 190 операций - это не мало, тем более для 1.8 Ггц.

 

8. ?

 

Но вообще oprofile правильно наводит на проблему - это шифрование. На 1.1К туннелей, я думаю что там порядка 120-150К переключений контекста, если не больше в моменты до захлеба. Уберете шифрование, получите порядка 60% доп мощности. То есть еще столько же тунелей сможете посадить и + столько же трафика пропустить. Еще узкое место - медленный процессор. Не помню есть ли в этой теме инфа или есть в другой, но для роутеров нужны быстрая память и быстрый процессор. Можно не супер производительный, но быстрый. И кешей побольше.

 

Разнести нагрузку по процессорам поможет только наличие гибридных RxTx очередей, если карта умеет или увеличение tx очередей, опять таки есть можно, т.к. у Вас еще есть свободные ядра.

 

UPD. Да, если разнести TX по ядрам - шифрование будет идти на нескольких ядрах, то есть другая сетевая проблему решит, но лиш временно, пока всё не захлебнется. Догадка по поводу шифрования при отдаче пакета в виртуальный интерфейс похожа на правду тем более что arc4 модуль ядра. Я думаю процедура там такова: получаем пакет, пропускаем через iptables, шифруем, переключаем контекст, отправляем в user-space. Зная как сделан pptp - я думаю там еще прикрутили десяток другой переключений туда-обратно. Цифра с количеством переключений контекстом - даст окончательный ответ. Т.к. если их уже и так много, то дополнительные сетевые не разгрузят систему линейно. Хватит на лишних 50Мбит и нагрузка начнет расти экспотенциально. Спасут только радикальные меры. Смена процессора на более быстрый опять таки только отсрочит проблему на лишних 100-150 Мбит.

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

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


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

3. Многовато. Я так понимаю это НАС в локальной сети? Зачем там шифрование?

Да, это НАС в локалке. Исторически сложилось, что шифрование использовалось с 2003 года ввиду повального перехода на WinXP, в которой галка "Использовать шифрование" в vpn-подключениях стояла (и стоит) по умолчанию. С целью упрощения настройки для пользователей 8 лет назад было принято решение включить mppe на сервере. Как-то вот тогда не особо задумывался об нагрузках и радел исключительно об удобстве пользователей :(

 

4. Да, статикой прибивайте и после прибивки посмотрите статистику драйвера, нет ли потерь из-за отстутсвия места в буфере. Если будет, подымете до 6К. Для вашего трафика и сетевой 4К - должно быть нормально. Сразу же подкрутите ring buffer.

Да, уже подкрутил: ethtool -G eth0 rx 2048 tx 2048 . До этого стояло 256 и потери вообще страшные были. Осталось ITR изменить, но это ночью на днях.

 

 

5. Это что-то левое. Сделайте vmstat 1 и покажите в динамике, потому что судя по тому что Вы показали у Вас 43 прерывания непонятно в какую единицу времени.

Вот момент, когда трафик генерировать начинаю.

 

# vmstat 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r  b   swpd    free   buff  cache    si   so    bi    bo    in   cs  us sy id wa st
1  0      0 5151680 179268 1013272    0    0   236   132     4   36   5  8 86  1  0
1  0      0 5151812 179268 1013268    0    0     0     0 47303 16136  3  7 89  0  0
1  0      0 5151820 179268 1013268    0    0     0     0 46842 15122  4  6 90  0  0
0  0      0 5151820 179272 1013268    0    0     0   160 47314 15379  3  6 84  7  0
0  0      0 5151820 179272 1013268    0    0     0     0 47645 15236  4  7 89  0  0
1  0      0 5151812 179272 1013268    0    0     0     0 46383 15110  3  5 91  0  0
0  0      0 5151464 179272 1013272    0    0     0     0 47978 15591  4  6 90  0  0
0  0      0 5150996 179272 1013272    0    0     0    72 46941 15231  5  8 85  2  0
2  0      0 5151040 179272 1013280    0    0     0    24 45395 14617  3  5 92  0  0
0  0      0 5150980 179272 1013280    0    0     0     0 46568 14437  3  6 91  0  0
1  0      0 5150980 179272 1013280    0    0     0     0 47926 16496  4  6 91  0  0
0  0      0 5151044 179272 1013280    0    0     0     0 46730 15019  3  5 91  0  0
1  0      0 5151044 179272 1013280    0    0     0     0 45979 14742  3  5 91  0  0
0  0      0 5151044 179276 1013280    0    0     0    84 47680 15426  4  6 87  3  0
2  0      0 5151052 179276 1013280    0    0     0     0 47762 15451  4  6 91  0  0
1  0      0 5151052 179276 1013280    0    0     0     0 48092 15607  3  7 90  0  0
0  0      0 5150928 179284 1013272    0    0     0   204 47222 16195  3  7 83  7  0
0  0      0 5151084 179284 1013276    0    0     0     8 46845 15120  4  6 90  0  0
0  0      0 5150704 179284 1013280    0    0     0    20 47187 15143  3  6 91  0  0
0  0      0 5151440 179284 1013284    0    0     0     0 46833 15196  4  6 90  0  0
0  0      0 5151328 179284 1013280    0    0     0     0 47305 15939  6 10 85  0  0
0  0      0 5151240 179284 1013284    0    0     0     0 46895 14674  3  5 91  0  0
0  0      0 5151264 179288 1013280    0    0     0   108 46860 15053  3  6 87  3  0

 

 

Сейчас не час-пик, поэтому полностью воссоздать самый загруженный промежуток времени пока проблематично. Но вроде cs немного, а ksoftirqd собственно забирает процессор на себя.

 

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    10 root      20   0     0    0    0 R 52.8  0.0 112:21.64 ksoftirqd/2

 

 

6. Нет, iowait от этого не набегает. Дисковые операции плохи не только нагрузкой на ЦП, а переключением контекстов, вымываением кеша у процов, дополнительными прерываниями. Нужно выяснить откуда они идут и постараться их убрать. Это от проблемы, конечно, не излечит, но даст еще немного запаса производительности. Кроме того 190 операций - это не мало, тем более для 1.8 Ггц.

Учту, спасибо.

 

 

8. ?

8. А что еще запущено на машине помимо PPTPd?

MySQL, Apache и биллинг :) Не ругайте меня, я знаю :) Мускуль по хорошему вообще на другой машине должен быть. Я сейчас над этим работаю.

 

 

Но вообще oprofile правильно наводит на проблему - это шифрование. На 1.1К туннелей, я думаю что там порядка 120-150К переключений контекста, если не больше в моменты до захлеба. Уберете шифрование, получите порядка 60% доп мощности. То есть еще столько же тунелей сможете посадить и + столько же трафика пропустить. Еще узкое место - медленный процессор. Не помню есть ли в этой теме инфа или есть в другой, но для роутеров нужны быстрая память и быстрый процессор. Можно не супер производительный, но быстрый. И кешей побольше.

 

Разнести нагрузку по процессорам поможет только наличие гибридных RxTx очередей, если карта умеет или увеличение tx очередей, опять таки есть можно, т.к. у Вас еще есть свободные ядра.

 

UPD. Да, если разнести TX по ядрам - шифрование будет идти на нескольких ядрах, то есть другая сетевая проблему решит, но лиш временно, пока всё не захлебнется. Догадка по поводу шифрования при отдаче пакета в виртуальный интерфейс похожа на правду тем более что arc4 модуль ядра. Я думаю процедура там такова: получаем пакет, пропускаем через iptables, шифруем, переключаем контекст, отправляем в user-space. Зная как сделан pptp - я думаю там еще прикрутили десяток другой переключений туда-обратно. Цифра с количеством переключений контекстом - даст окончательный ответ. Т.к. если их уже и так много, то дополнительные сетевые не разгрузят систему линейно. Хватит на лишних 50Мбит и нагрузка начнет расти экспотенциально. Спасут только радикальные меры. Смена процессора на более быстрый опять таки только отсрочит проблему на лишних 100-150 Мбит.

Получается, "старые" Ксеоны 2005 года выпуска на 3.6ГГц с 16КБ L1 и 2МБ L2 кэша для роутинга быстрее, чем более производительный современный Ксеон 2009 года 1.8ГГц с 32КБ L1 и 2МБ L2 кэшем?

 

И спасибо за развернутый ответ, есть над чем подумать.

 

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


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

3. Проблема известна, но с решением вы поторопились. Даже не знаю что вам теперь делать, учитывая отсутствие возможности масштабирования у pptp. Roundrobin DNS и второй сервер?

4. Учтите, что увеличение буфера усугубляет ситуацию. Чем меньше буфер, тем быстрее работает. При вашем трафике однако тут не большой вклад будет. Сразу хотел спросить: ложит ли смена буфера интерфейс или происходит налету?

5. Давайте уберем прервания, посмотрим что будет, переключений контекста действительно не много.

8. Дает ответ на 6) тут кто-то высказывался по этой теме на первых страницах, что из-за неидеальности софта приходиться разносить. Вовсе не потому что загружает под самые яйца, так что разносите, иначе проблему можно искать долго и в результате всеравно не найти.

 

Насчет Ксеонов, да, даже несмотря на больший в 2 раза L1 кеш у последнего. Но у вас-то не чистый роутинг.

 

UPD. Кстати, а откуда это? Этот ксеон может 4Ггц но работает на 1.8?

External Clock: 133 MHz

Max Speed: 4000 MHz

Current Speed: 1866 MHz

 

Если у него 2 ядра, а остальные HT, то HT на роутерах вреден и его надо отключать. С другой стороны, у вас опять-таки не чистый роутер.

Core Count: 2

Core Enabled: 2

Thread Count: 2

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

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


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

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

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


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

Тут не про новые и старые вопрос, а про 1.8 новый и 3.6 старый. Так вот старый на 3.6 сделает новый при такой же количестве ядер на чистом роутинге. У вас есть обратный опыт?

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


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

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

Зачем вы такую странную схему придумали, весь трафик через одну сетевку пустить? В этом случае количество трафика через интерфейс еще и удваивается, и через интерфейс бегает (вход + исход) * 2. При ваших '340 мбит в одну сторону' суммарно трафика может получиться и больше гига, тут уже самим сетевкам простым может плохеть))

Перевесьте виланы входящий на eth0, исходящий на eth1, а интерфейс используемый для сбора статистики или повесьте виланом на любой из них, или вообще схему поменяйте. Туда льется тот же трафик что и через сервер проходит?

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


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

Join the conversation

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

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

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

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

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

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

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