Налагодження затримки вводу / виводу Linux


13

У мене є деякі проблеми вводу / виводу для пари систем Linux, якими я адмініструю. Вони проявляються в тому, що процеси часто блокують до декількох секунд у таких простих системних викликах, як відкриті (), відключення () або закриття () у файлах (що є проблемою, оскільки деяким із залучених програм потрібна досить низька затримка вводу / виводу для роботи належним чином). Це правда, що системи, про які йдеться, відчувають деяке помірне навантаження вводу / виводу, але навряд чи можна подумати, що це було б достатньо для виправдання таких величезних затримок. Іноді завершення дзвінків може зайняти більше 15 секунд (хоча частіше вони можуть зайняти 1 або 2 або 3 секунди або близько того).

Моє запитання: Як я можу дізнатися, чому це відбувається? Мені б хотілося, що це якийсь інструмент, який міг би сказати мені про те, які саме процеси блокуються в ядрі, і чому те, на чому вони сплять, зайняте, що з ним відбувається, і подібні речі. Чи є такий інструмент чи є якийсь інший спосіб спробувати налагодити те, що відбувається?

З іншого боку , звичайно, якщо у вас є якісь - або підказки щодо того , що на насправді це відбувається, як це може уникнути?

Для запису файлова система, яку я використовую, - це XFS.

Відповіді:


14

Зараз у свій час мені вдалося вирішити це самостійно, тож я можу принаймні сам слідкувати за цим для нащадків.

На жаль, я втратив початкову проблему в процесі оновлення ядра, але натомість отримав нову, ще гіршу продуктивність і так само важко відстежити. Я знайшов такі методи:

Перш за все, blktrace/ blkparseце інструмент, який мені здався досить корисним. Це дозволяє простежити хід окремих запитів вводу / виводу з багатьма корисними деталями, наприклад, процес, який подав запит. Корисно поставити вихід tmpfs, щоб обробка зберігання сліду не почала простежувати себе.

Це допомогло лише поки що, тому я склав ядро ​​з більшою функцією налагодження. Зокрема, я виявив себе ftraceдосить корисним, оскільки дозволив мені простежити погано працюючий процес у просторі ядра, побачити, що він зробив та де його заблокував. Компіляція ядра налагодження також забезпечує робочий WCHANрезультат для роботи ps, що також може працювати як простіший спосіб побачити, що відбувається процес всередині ядра, принаймні для більш простих випадків.

Я також сподівався, що LatencyTop стане корисною, але мені здалося , що це досить непомітно, а також, що він відображав лише причини затримки, які були занадто "високого рівня", щоб бути справді корисними, на жаль.

Також мені здається кориснішим, ніж iostatпросто переглядати вміст /sys/block/$DEVICE/statчерез дуже близькі проміжки часу, просто так:

while :; do cat /sys/block/sda/stat; sleep .1; done

Дивіться Documentation/iostats.txtу дереві джерела ядра про формат statфайлу. Перегляд його з близькими інтервалами дозволив мені побачити точний час та розміри сплетів вводу / виводу та подібні речі.

Врешті-решт я з'ясував, що проблему, яку виникли після оновлення ядра, спричиняли стабільні сторінки , функція, введена в Linux 3.0, внаслідок чого, в моєму випадку, Berkeley DB зупинявся протягом тривалого періоду, коли забруднення сторінок у mmap'ed файли регіону Незважаючи на те, що можливо виправити цю функцію, а також, що проблеми, які вона спричиняє, можуть бути виправлені в Linux 3.9, я вирішив найгіршу проблему, яку я мав на даний момент, переправивши папку Berkeley DB, щоб дозволити мені помістити файли регіону в інший каталог (в моєму випадку /dev/shm), що дозволяє мені взагалі уникнути проблеми.


3

Згідно з моїм досвідом, найпростіший і детальний інструмент статистики, який ви можете встановити для відстеження таємничих проблем продуктивності системи, це http://freecode.com/projects/sysstat aka. сар

Ви впевнені, що Ви також хочете подивитися на вихідний показник команд iostat, особливо, скільки Ваша% iowait повинна бути нижче 5-10% при нормальному навантаженні системи (нижче 1,0 або більше).

подивіться на вихід PS, якщо у стовпці STAT ви бачите статуси D, що означає, що ці процеси заблоковані та очікують на IO, швидше за все, проблеми з обладнанням з контролером чи диском, перевірте статистику SMART, а також dmesg та syslog на наявність підказок

перевірте журнал sar та визначте пікові часи, якщо колись це станеться, і спробуйте співставити цей час із завданнями, пов’язаними з диском, що працюють з диском, наприклад, резервними копіями по мережі

ви можете порівняти продуктивність свого диска за допомогою bonnie ++


3

Думав, я б зазначив про страйк, хоча це питання вже місяці. Це може допомогти комусь із подібною проблемою, хто знайде цю сторінку.

спробуйте.

strace "application"

ви також можете зробити

strace -e read,write "application"

просто показувати події читання / запису.

Додаток завантажується як звичайне (хоч і трохи повільніше запускається), і ви можете використовувати його як звичайне, щоб викликати проблему. Вихід з'явиться в оболонці, яку ви використовували для запуску штриха.

Хороша річ у strace полягає в тому, що ви можете бачити найсвіжіший виклик функції / ядра в той момент, коли програма запускає уповільнення. Ви можете виявити, що якщо ваші /homeоблікові записи є на NFS, то у програми з певних причин виникають певні труднощі з файлом вводу / виводу над NFS.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.