Перейти до вмісту

Модуль 5.4: Продуктивність I/O

Hands-On Lab Available
Ubuntu advanced 30 min
Launch Lab ↗

Opens in Killercoda in a new tab

Продуктивність Linux | Складність: [MEDIUM] | Час: 25–30 хв

Перед початком цього модуля:


Що ви зможете робити після цього модуля

Розділ «Що ви зможете робити після цього модуля»

Після завершення цього модуля ви зможете:

  • Виміряти продуктивність дискового 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: Гарно для десктопів з багатьма паралельними задачами.
Terminal window
# Перевірити поточний планувальник
cat /sys/block/sda/queue/scheduler

  1. Що означає показник %util у 100% у виводі iostat?

    Відповідь Це означає, що диск був зайнятий обробкою запитів 100% часу спостереження. Це ознака того, що диск став вузьким місцем для системи.
  2. Яка різниця між IOPS та Throughput?

    Відповідь IOPS вимірює кількість окремих операцій (транзакцій), а Throughput — загальний обсяг переданих даних (наприклад, МБ/с). Бази даних потребують високих IOPS, тоді як копіювання великих файлів — високого Throughput.
  3. Чому iowait може вводити в оману?

    Відповідь Високий `iowait` показує тільки те, що CPU простоює, чекаючи на відповідь від диска. Якщо CPU в цей час зайнятий іншою роботою, `iowait` буде низьким, навіть якщо диск працює на межі своїх можливостей. Завжди перевіряйте `iostat`.
  4. Яка команда в Linux показує процеси, що зараз найбільше навантажують диск?

    Відповідь `iotop` (потребує встановлення та прав root).

Завдання: Проаналізувати дискову активність при копіюванні.

  1. Запустіть моніторинг дисків в одному терміналі:
    Terminal window
    iostat -xz 1
  2. В іншому терміналі створіть великий файл (симуляція навантаження):
    Terminal window
    dd if=/dev/zero of=/tmp/testfile bs=1M count=1024 conv=fdatasync
  3. Подивіться, як змінилися показники %util та wkB/s (швидкість запису).
  4. Перевірте, який процес робить запис:
    Terminal window
    sudo iotop -o -b -n 1
  5. Прибирання:
    Terminal window
    rm /tmp/testfile

Критерії успіху: Ви вмієте ідентифікувати завантаження конкретного диска та знаходити процес, що спричиняє I/O навантаження.


  • %util каже, як довго диск був зайнятий, а не скільки він ще може прийняти.
  • avgqu-sz (черга) — найкращий індикатор перевантаження.
  • Page cache “ховає” більшість читань, роблячи їх майже миттєвими.
  • Для баз даних важливі IOPS, для бекапів — throughput.

Розділ «Продуктивність» завершено! Тепер ви маєте повну картину того, як аналізувати CPU, пам’ять та диски за методом USE. Ви готові до вирішення найскладніших проблем у продакшні.

Далі: Розділ 6: Вирішення проблем (Troubleshooting) — навчіться застосовувати ці знання для порятунку систем.