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