SokolovS Posted November 26, 2014 · Report post Есть две идентичные машины отличающиеся только по части 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 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dark_Angel Posted November 27, 2014 · Report post Нет, прерывания выполняются по таймеру, по очереди, поэтому понятия приоритета отсутствует. В вашем случае попробуйте вынести ide0 на кокретный процессор. Но в вашем примере мало данных чтобы утверждать однозначно, что это поможет. Еще как вариант, увеличьте ring buffer для сетевой, чтобы если пакеты не были забраны у карты, они оставались в буфере. Ну и queue length на интерфейсе подкрутите. Эти все манипуляции, однако, приведут к увеличению RTT во время дисковой активности, если причина в ней, конечно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SokolovS Posted November 27, 2014 · Report post Нет, прерывания выполняются по таймеру, по очереди, поэтому понятия приоритета отсутствует. В вашем случае попробуйте вынести ide0 на кокретный процессор. Но в вашем примере мало данных чтобы утверждать однозначно, что это поможет. Еще как вариант, увеличьте ring buffer для сетевой, чтобы если пакеты не были забраны у карты, они оставались в буфере. Ну и queue length на интерфейсе подкрутите. Эти все манипуляции, однако, приведут к увеличению RTT во время дисковой активности, если причина в ней, конечно. С прерываниями понятно. Видимо приоритезация возможна только на rt-ядрах. Все остальное подкручено и ring buffer и queue length. Попробую по вашему совету выделить ide0 в отдельное прерывание и посмотреть что из этого выйдет. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
MATPOC Posted November 28, 2014 · Report post Я когда-то тоже руками распределял прерывания. А года два назад обнаружил, что irqbalance неплохо справляется с этой задачей в автоматическом режиме. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Dark_Angel Posted November 28, 2014 · Report post Я когда-то тоже руками распределял прерывания. А года два назад обнаружил, что irqbalance неплохо справляется с этой задачей в автоматическом режиме. irqbalance может вам некисло потрепать нервы на роутере. Его нужно обязательно отключать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SokolovS Posted November 28, 2014 · Report post Согласен, на роутере нужно отключать irqbalance и governer ставить в preference, либо совсем не использовать cpuspeed. Как ни странно, но выделение для ide0 отдельного прерывания сняло проблему. В связи с этим вопрос, с чего вдруг такое поведение, ведь на соседней машине такого нет. Как писал выше отличаются только HDD :) Первый раз с таким сталкиваюсь. Получается либо сам HDD либо шлейф. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
aabc Posted November 29, 2014 · Report post Как ни странно, но выделение для ide0 отдельного прерывания сняло проблему. В связи с этим вопрос, с чего вдруг такое поведение, ведь на соседней машине такого нет. Как писал выше отличаются только HDD :) Первый раз с таким сталкиваюсь. Получается либо сам HDD либо шлейф. На одной машине ide на другой sata? Значит драйвер диска занимает процессор на время прерывания так долго, что успевают потеряться пакеты. Чем он может занимать - например, пересылкой данных при отключенном dma. Сделайте hdparm -d /dev/hda Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
SokolovS Posted November 30, 2014 · Report post Как ни странно, но выделение для 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) Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
aabc Posted November 30, 2014 (edited) · Report post 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 у меня на старой машинке). Edited November 30, 2014 by aabc Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
kayot Posted November 30, 2014 · Report post Вы умудрились заюзать какой-то legacy драйвер, видать он действительно в эмуляции PIO работает и убивает всю систему при любой дисковой активности. Ищите какой драйвер используется и почему. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted November 30, 2014 · Report post Ну почему же, может и в биосе включен пио режим (как в этом случае линь себя поведет? скорее всего не будет насильно дма включать?), или compatible mode для контроллера... Плата, как я понял, с ich7 с сата в режиме IDE... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...