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

Приоритеты прерываний в Linux

Есть две идентичные машины отличающиеся только по части HDD. Машины занимаются маршрутизацией, трафик небольшой порядка 600 Мбит в пике. На одной из машин заметил странную вещь, при выполнении по крону задачи /etc/cron.d/sysstat, а именно:

# generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib/sa/sa2 -A

появляются дропы на интерфейсах, больше всего на eth1.

Прерывания прибиты так:

  0: 1125295995 1099841777 1097040001 1141488491    IO-APIC-edge  timer
 1:          1          0          0          2    IO-APIC-edge  i8042
 6:          2          0          1          0    IO-APIC-edge  floppy
 8:          0          0          1          2    IO-APIC-edge  rtc
 9:          0          0          0          0   IO-APIC-level  acpi
12:          0          1          2          1    IO-APIC-edge  i8042
14:       6066       6092   45713472    1264945    IO-APIC-edge  ide0
15:          7          7          7          5    IO-APIC-edge  ide1
50:          0          0          0          0   IO-APIC-level  uhci_hcd:usb6
74:         81          0          0          0       PCI-MSI-X  eth0
82: 2552560099          0          0          0       PCI-MSI-X  eth0-rx-0
90:         17 2348549222          0          0       PCI-MSI-X  eth0-rx-1
98:         17          0 2497617730          0       PCI-MSI-X  eth0-rx-2
106:         17          0          0 4083078233       PCI-MSI-X  eth0-tx-0
114:          3          0          0          0       PCI-MSI-X  eth1
122:         14          0 3989438735          0       PCI-MSI-X  eth1-rx-0
130:         14 4103082365          0          0       PCI-MSI-X  eth1-tx-0
177:          0          0          0          0   IO-APIC-level  ehci_hcd:usb1
217:          0          0          0          0   IO-APIC-level  ehci_hcd:usb2, uhci_hcd:usb5
225:          0          0          0          0   IO-APIC-level  uhci_hcd:usb3, uhci_hcd:usb7
233:          0          0          0          0   IO-APIC-level  uhci_hcd:usb4, ata_piix
NMI:          0          0          0          0 
LOC:  168084626  168067551  147237631  167789047 
ERR:          0
MIS:          0

 

В целом проблем с производительностью нет, машинка справляется. Но смущает эта странная фишка.

В связи с этим вопрос, есть ли возможность устанавливать приоритет для прерываний?

У меня подозрения как раз на HDD. Похоже проблема возникает когда пишутся даныне sysstat в /var/log/sa

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


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

Нет, прерывания выполняются по таймеру, по очереди, поэтому понятия приоритета отсутствует. В вашем случае попробуйте вынести ide0 на кокретный процессор. Но в вашем примере мало данных чтобы утверждать однозначно, что это поможет.

 

Еще как вариант, увеличьте ring buffer для сетевой, чтобы если пакеты не были забраны у карты, они оставались в буфере. Ну и queue length на интерфейсе подкрутите. Эти все манипуляции, однако, приведут к увеличению RTT во время дисковой активности, если причина в ней, конечно.

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


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

Нет, прерывания выполняются по таймеру, по очереди, поэтому понятия приоритета отсутствует. В вашем случае попробуйте вынести ide0 на кокретный процессор. Но в вашем примере мало данных чтобы утверждать однозначно, что это поможет.

 

Еще как вариант, увеличьте ring buffer для сетевой, чтобы если пакеты не были забраны у карты, они оставались в буфере. Ну и queue length на интерфейсе подкрутите. Эти все манипуляции, однако, приведут к увеличению RTT во время дисковой активности, если причина в ней, конечно.

С прерываниями понятно. Видимо приоритезация возможна только на rt-ядрах. Все остальное подкручено и ring buffer и queue length. Попробую по вашему совету выделить ide0 в отдельное прерывание и посмотреть что из этого выйдет.

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


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

Я когда-то тоже руками распределял прерывания. А года два назад обнаружил, что irqbalance неплохо справляется с этой задачей в автоматическом режиме.

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


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

Я когда-то тоже руками распределял прерывания. А года два назад обнаружил, что irqbalance неплохо справляется с этой задачей в автоматическом режиме.

 

irqbalance может вам некисло потрепать нервы на роутере. Его нужно обязательно отключать.

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


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

Согласен, на роутере нужно отключать irqbalance и governer ставить в preference, либо совсем не использовать cpuspeed.

 

Как ни странно, но выделение для ide0 отдельного прерывания сняло проблему. В связи с этим вопрос, с чего вдруг такое поведение, ведь на соседней машине такого нет. Как писал выше отличаются только HDD :) Первый раз с таким сталкиваюсь. Получается либо сам HDD либо шлейф.

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


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

Как ни странно, но выделение для ide0 отдельного прерывания сняло проблему. В связи с этим вопрос, с чего вдруг такое поведение, ведь на соседней машине такого нет. Как писал выше отличаются только HDD :) Первый раз с таким сталкиваюсь. Получается либо сам HDD либо шлейф.

 

На одной машине ide на другой sata? Значит драйвер диска занимает процессор на время прерывания так долго, что успевают потеряться пакеты. Чем он может занимать - например, пересылкой данных при отключенном dma.

Сделайте hdparm -d /dev/hda

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


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

Как ни странно, но выделение для ide0 отдельного прерывания сняло проблему. В связи с этим вопрос, с чего вдруг такое поведение, ведь на соседней машине такого нет. Как писал выше отличаются только HDD :) Первый раз с таким сталкиваюсь. Получается либо сам HDD либо шлейф.

 

На одной машине ide на другой sata? Значит драйвер диска занимает процессор на время прерывания так долго, что успевают потеряться пакеты. Чем он может занимать - например, пересылкой данных при отключенном dma.

Сделайте hdparm -d /dev/hda

На самом деле оба диска SATA, но системой определились как IDE, что странно.

Там где все в порядке, этот:

http://www.nix.ru/autocatalog/hdd_seagate/HDD_320_SATAII_Seagate_Barracuda_7200.11_ST3320613AS_3.5_74606.html

 

Там где есть проблема, этот:

http://www.nix.ru/autocatalog/hdd_seagate/HDD_SATAII_Seagate_Maxtor_Barracuda_7200.10_DiamondMax_21_3250310AS_3.5_66197.html

 

DMA не используется в обоих случаях.

# hdparm -d /dev/hdc

/dev/hdc:
using_dma    =  0 (off)

# hdparm -d /dev/hda

/dev/hda:
using_dma    =  0 (off)

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


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

using_dma = 0 (off)

Включить DMA: hdparm -d1 /dev/hda. Ещё бывает полезно сделать -c1 (включить IDE 32-bit IO).

 

DMA не используется в обоих случаях.

 

У меня на sata дисках нет опции using_dma, так как доступ к дискам через scsi. Даже диски называются sdx. Посмотрите на нормальной машине /proc/interrupts, там растет ide, или acpi, или ещё что (ata_piix у меня на старой машинке).

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

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


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

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

Ищите какой драйвер используется и почему.

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


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

Ну почему же, может и в биосе включен пио режим (как в этом случае линь себя поведет? скорее всего не будет насильно дма включать?), или compatible mode для контроллера... Плата, как я понял, с ich7 с сата в режиме IDE...

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


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

Join the conversation

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

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

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

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

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

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

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