Продуктивність дискової підсистеми - короткий лікнеп
Коли заходить мова про продуктивність в першу чергу звертають увагу на частоту процесора, швидкість пам'яті, чіпсет і т.д. і т.п. про дискову підсистему якщо і згадують, то мимохідь, найчастіше звертаючи увагу тільки на один параметр - швидкість лінійного читання. У той же час саме дискова підсистема найчастіше стає вузьким місцем в системі. Чому так відбувається і як цього уникнути ми розповімо в даній статті.
Під час обертання диска сектора проходять повз блоку магнітних головок, які здійснюють запис або читання інформації. Швидкість обертання (кутова швидкість) диска в кінцевий момент часу величина постійна, проте лінійна швидкість різних ділянок диска різна. У зовнішнього краю диска вона максимальна, у внутрішнього - мінімальна. Розглянемо наступний малюнок:
Як бачимо за один і той же проміжок часу певна область диска зробить поворот на один і той же кут, якщо ми позначимо цю область у вигляді сектора, то виявиться що в нього потрапить п'ять секторів з зовнішньої доріжки і тільки три з внутрішньої. Отже за даний проміжок часу магнітна головка вважає із зовнішнього циліндра більшу кількість інформації, ніж з внутрішнього. На практиці це проявляється в тому, що графік швидкості читання будь-якого диска являє собою знижується криву.
Початкові сектора і циліндри завжди розташовуються з зовнішньої сторони, забезпечуючи максимальну швидкість обміну даними, тому рекомендується розміщувати системний розділ саме на початку диска.
Тепер перейдемо на більш високий рівень - рівень файлової системи. Файлова система оперує більшими блоками даних - кластерами. Типовий розмір кластера NTFS - 4 КБ або 8 секторів. Отримавши вказівку вважати певний кластер диск зробить читання 8 послідовних секторів, при послідовному розташуванні даних операційна система дасть вказівку вважати дані починаючи з кластера 100 і закінчуючи кластером 107. Дана дія буде являти собою одну операцію введення-виведення (IO), максимальна кількість таких операцій в секунду (IOPS) звичайно і залежить від того, скільки секторів пройдуть повз головки за одиницю часу (а також від часу позиціонування головки). Швидкість обміну даними вимірюється в МБ / с (MBPS) і залежить від того, яка кількість даних буде лічено за одну операцію введення-виведення. При послідовному розташуванні даних швидкість обміну буде максимальною, а кількість операцій введення-виведення мінімально.
Тут буде не зайвим згадати про такий параметр як щільність запису, яка виражається в площі необхідної для запису 1 біта даних. Чим вище цей параметр, тим більше даних може вмістити одна пластина і тим вище швидкість лінійного обміну даними. Цим пояснюються більш високі швидкісні характеристики сучасних вінчестерів, хоча технічно вони можуть нічим не відрізнятися від старіших моделей. Малюнок нижче ілюструє цю ситуацію. Як неважко помітити, при більш високій щільності запису за один і той-же проміжок часу, при тій же самій швидкості обертання буде лічено / записано більшу кількість даних
Тепер розберемо прямо протилежну ситуацію, нам потрібно вважати велику кількість невеликих файлів випадковим чином розкиданих по всьому диску. У цьому випадку кількість операцій введення-виведення буде велике, а швидкість обміну даними низька. Основний час буде займати очікування доступу до наступного блоку даних, яке залежить від часу позиціонування головки і затримки через обертання диска. Простий приклад: якщо після 100 сектора надійде команда прочитати 98, то доведеться чекати повний оборот диска, поки з'явиться можливість прочитати даний сектор. Сюди ж слід додати час, який потрібен щоб фізично прочитати потрібну кількість секторів. Сукупність цих параметрів складе час випадкового доступу. яке має дуже великий вплив на продуктивність вінчестера.
Слід зазначити, що для ОС і багатьох серверних завдань (СУБД, віртуалізація і т.п.) характерний саме випадковий доступ до розміру блоку в 4 Кб (розмір кластера), при цьому основним показником продуктивності буде не швидкість лінійного обміну даними (MBPS), а максимальна кількість операцій введення-виведення в секунду (IOPS). Чим вище цей параметр, тим більша кількість даних може бути лічено в одиницю часу.
Однак кількість операцій введення-виведення не може рости нескінченно, це значення дуже жорстко обмежена зверху фізичними показниками вінчестера, а саме часом випадкового доступу.
А тепер поговоримо про фрагментацію, суть цього явища загальновідома, ми ж подивимося на нього крізь призму продуктивності. Для великих файлів і лінійних навантажень фрагментація здатна значно знизити продуктивність, так як послідовний доступ перетвориться в випадковий, що викличе різке зниження швидкості доступу і також різко збільшить кількість операцій введення-виведення.
При випадковому характері доступу фрагментація не грає особливої ролі, так як немає ніякої різниці в якому саме місці диска знаходиться той чи інший блок даних.
Реальна продуктивність жорсткого диска - це завжди баланс між швидкістю обміну даними і кількістю операцій введення виведення. Для послідовного читання характерний великий розмір пакета даних, який зчитується за одну операцію введення виведення. Максимальна швидкість (MBPS) буде досяжна при послідовному читанні секторів з зовнішнього краю диска, кількість операцій введення-виведення (IOPS) буде при цьому мінімально - доріжки довгі, позиціонувати головку потрібно рідше, даних при цьому зчитується більше. На внутрішніх доріжках лінійна швидкість буде нижче, кількість IO - вище, доріжки короткі, позиціонувати головку потрібно частіше, даних зчитується менше.
При випадковому доступі швидкість буде мінімальна, так як розмір пакета даних дуже малий (в гіршому випадку кластер) і продуктивність упреться в максимально доступну кількість IOPS. Для сучасних масових дисків це значення дорівнює близько 70 IOPS, неважко порахувати, що при випадковому доступі до розміру пакета в 4 Кб ми отримаємо максимальну швидкість не більше 0,28 MBPS.
Нерозуміння цього моменту часто призводить до того, що дискова підсистема виявляється пляшковим горлечком, яке гальмує роботу всієї системи. Так, вибираючи між двома дисками з максимальною лінійної швидкістю в 120 і 150 MBPS, багато хто не замислюючись виберуть другий, не подивившись на те, що перший диск забезпечує 70 IOPS, а другий всього 50 IOPS (цілком характерна ситуація для економічних серій), а потім будуть сильно дивуватися тому, чому "швидший" диск сильно гальмує.
Що буде, якщо кількості IOPS диска виявиться недостатньо щоб обробити всі запити? Виникне чергу дискових запитів. На практиці все дещо складніше і черга диска буде виникати навіть у тому випадку, коли IOPS досить. Це пов'язано з тим, що різні процеси, які звертаються до диска, мають різний пріоритет, а також те, що операції записи завжди мають пріоритет над операціями читання. Для оцінки ситуації існує параметр довжина черги диска. значення якого не повинно перевищувати (за рекомендаціями Microsoft)
У будь-якому випадку постійна велика довжина черги говорить про те, що системі недостатньо поточного значення IOPS. Збільшення черги диска на вже працюючих системах говорить або про збільшення навантаження, або про вихід з ладу або зносі жорстких дисків. У будь-якому випадку слід задуматися про апгрейд дискової підсистеми.