Модуль 5.4: Продуктивність I/O
Продуктивність Linux | Складність:
[MEDIUM]| Час: 25–30 хв
Передумови
Розділ «Передумови»Перед початком цього модуля:
- Обов’язково: Модуль 5.1: Метод USE
- Обов’язково: Модуль 1.3: Ієрархія файлової системи
- Бажано: Модуль 5.3: Керування пам’яттю для розуміння кешу сторінок (page cache).
Що ви зможете робити після цього модуля
Розділ «Що ви зможете робити після цього модуля»Після завершення цього модуля ви зможете:
- Виміряти продуктивність дискового I/O за допомогою iostat, iotop та бенчмарків fio
- Діагностувати вузькі місця I/O, інтерпретуючи метрики await, %util та глибину черги
- Налаштувати планувальники I/O та ліміти blkio cgroup для контейнерних навантажень
- Оцінити вимоги до продуктивності сховища для різних типів навантажень (база даних, логування, кеш)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Коли додатки працюють повільно, але з CPU та пам’яттю все гаразд — проблема зазвичай у дисках. Продуктивність вводу/виводу (I/O) аналізувати складніше, ніж CPU, оскільки багато шарів (файлова система, черги ядра, залізо) додають власні затримки.
Розуміння продуктивності I/O допоможе вам:
- Діагностувати повільну роботу — знаходити дискові вузькі місця.
- Обирати сховища — розуміти різницю між SSD та HDD, локальними та мережевими дисками.
- Правильно розраховувати ресурси — знати вимоги до IOPS та пропускної здатності.
- Відлагоджувати контейнери — розуміти, як монтування томів впливає на швидкість.
Дисковий I/O — це часто приховане вузьке місце, яке “кладе” продакшн.
Продуктивність диска: IOPS проти Throughput
Розділ «Продуктивність диска: IOPS проти Throughput»| Показник | Що це таке | Коли важливий |
|---|---|---|
| IOPS | Кількість операцій за секунду | Бази даних, багато дрібних запитів |
| Throughput | Обсяг даних за секунду (МБ/с) | Стрімінг відео, бекапи, великі файли |
┌─────────────────────────────────────────────────────────────┐│ IOPS ПРОТИ THROUGHPUT │├─────────────────────────────────────────────────────────────┤│ ││ Робота з БД: Відео стрімінг: ││ ┌───────────────────────┐ ┌───────────────────────────┐││ │ 10,000 IOPS │ │ 500 IOPS │││ │ Дрібні випадкові читання│ │ Великі послідовні читання │││ │ Блоки по 4 КБ │ │ Блоки по 1 МБ │││ │ Швидкість: 40 МБ/с │ │ Швидкість: 500 МБ/с │││ └───────────────────────┘ └───────────────────────────┘││ ││ Один і той самий диск може бути ідеальним для стрімінгу, ││ але занадто повільним для бази даних. ││ │└─────────────────────────────────────────────────────────────┘Аналіз за допомогою iostat
Розділ «Аналіз за допомогою iostat»Команда iostat -x 1 — ваш головний інструмент аналізу.
| Метрика | Що вона каже | Коли хвилюватися |
|---|---|---|
| %util | Відсоток часу, коли диск був зайнятий | > 80% для HDD |
| await | Середній час на одну операцію (мс) | > 10мс для SSD, > 50мс для HDD |
| avgqu-sz | Середня довжина черги | > 1 означає, що диски не встигають |
| r/s, w/s | Кількість читань/записів (IOPS) | Залежить від лімітів вашого заліза |
Планувальники I/O (Schedulers)
Розділ «Планувальники I/O (Schedulers)»Ядро Linux вирішує, у якому порядку відправляти запити на диск.
- mq-deadline: Добре для звичайних жорстких дисків (HDD).
- none / kyber: Найкраще для швидких SSD та NVMe дисків.
- bfq: Гарно для десктопів з багатьма паралельними задачами.
# Перевірити поточний планувальникcat /sys/block/sda/queue/schedulerТест
Розділ «Тест»-
Що означає показник %util у 100% у виводі
iostat?Відповідь
Це означає, що диск був зайнятий обробкою запитів 100% часу спостереження. Це ознака того, що диск став вузьким місцем для системи. -
Яка різниця між IOPS та Throughput?
Відповідь
IOPS вимірює кількість окремих операцій (транзакцій), а Throughput — загальний обсяг переданих даних (наприклад, МБ/с). Бази даних потребують високих IOPS, тоді як копіювання великих файлів — високого Throughput. -
Чому iowait може вводити в оману?
Відповідь
Високий `iowait` показує тільки те, що CPU простоює, чекаючи на відповідь від диска. Якщо CPU в цей час зайнятий іншою роботою, `iowait` буде низьким, навіть якщо диск працює на межі своїх можливостей. Завжди перевіряйте `iostat`. -
Яка команда в Linux показує процеси, що зараз найбільше навантажують диск?
Відповідь
`iotop` (потребує встановлення та прав root).
Практична вправа
Розділ «Практична вправа»Завдання: Проаналізувати дискову активність при копіюванні.
- Запустіть моніторинг дисків в одному терміналі:
Terminal window iostat -xz 1 - В іншому терміналі створіть великий файл (симуляція навантаження):
Terminal window dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync - Подивіться, як змінилися показники
%utilтаwkB/s(швидкість запису). - Перевірте, який процес робить запис:
Terminal window sudo iotop -o -b -n 1 - Прибирання:
Terminal window rm /tmp/testfile
Критерії успіху: Ви вмієте ідентифікувати завантаження конкретного диска та знаходити процес, що спричиняє I/O навантаження.
Підсумок
Розділ «Підсумок»- %util каже, як довго диск був зайнятий, а не скільки він ще може прийняти.
- avgqu-sz (черга) — найкращий індикатор перевантаження.
- Page cache “ховає” більшість читань, роблячи їх майже миттєвими.
- Для баз даних важливі IOPS, для бекапів — throughput.
Розділ «Продуктивність» завершено! Тепер ви маєте повну картину того, як аналізувати CPU, пам’ять та диски за методом USE. Ви готові до вирішення найскладніших проблем у продакшні.
Далі: Розділ 6: Вирішення проблем (Troubleshooting) — навчіться застосовувати ці знання для порятунку систем.