Чому мій жорсткий диск настільки повільний під час тестів на швидкість "4K"?


46

Що не так з моєю швидкістю в 4K? Чому це так повільно? Або це повинно бути таким?

Знімок екрана еталону

Це швидкість у порядку? Чому я маю таку низьку швидкість у 4K?


13
Це нормально і очікувано. "4K" в цьому контексті означає випадкове читання / запис (в блоках по 4 кілобайти, звідси і "4K"), на якому механічні жорсткі диски чудово працюють. Ось де вам потрібно SSD. Дивіться тут для більш поглибленого пояснення.
Боб

4Kb використовується тому, що це типовий розмір кластера диска і на багатьох сучасних жорстких дисках фактичного сектора (структура низького рівня на самому диску). Тобто найменший обсяг даних, який, ймовірно, буде переданий за один раз у будь-який режим читання чи запису, навіть якщо запитувані дані менші. Цікаво, що на цій сторінці НІ відповіді навіть не згадуються кластери чи сектори.
thomasrutter

2
@thomasrutter Тому що це не стосується відповіді. Важлива частина полягає в тому, що цей тест включає випадкові пошуки. Не має значення (певною мірою), скільки передається даних і чи є це кратним розмір сектора диска чи ні; Важлива частина полягає в тому, що тест передає мінімальну кількість даних для вимірювання ефективності пошуку.
Мішель Джонсон

Це тест на розділі чи на всьому диску? Тести рівня розділів можуть бути набагато гіршими для доступу до 4К, якщо у вас є диск з фізичними секторами 4К, але логічними секторами 1К, і нерівну межу розділу розділити з секторами.
Toby Speight

Сучасні інструменти розділення прагнуть забезпечити, щоб перегородки починалися та закінчувались на межі сектора; навіть зернистість 1 Мб є загальною. Пройшли часи старого "63 512-байтового сектору", який би спричинив проблеми для 4-кбайтних секторів.
thomasrutter

Відповіді:


85

Те, з чим ви стикаєтеся, є типовим для механічних жорстких дисків, і одна з головних переваг SSD: жорсткі диски мають жахливу ефективність випадкового доступу.

У CrystalDiskMark "Seq" означає послідовний доступ, тоді як "4K" означає випадковий доступ (в шматки 4 кБ за один раз, тому що одиничні байти були б надто повільними та нереальними 1 ).


Визначення

Загалом, існує два різні способи доступу до файлу.

Послідовний доступ

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

З точки зору диска, він бачить команди типу "блок читання №1, блок читання №2, блок читання №3, читання блоку байтів №4" 1 .

Випадковий доступ

Випадковий доступ означає, що немає очевидного шаблону для читання чи запису. Це не повинно означати справді випадкових; це насправді означає "не послідовний". Наприклад, якщо ви запускаєте безліч програм відразу, їм потрібно буде прочитати багато файлів, розкиданих по вашому диску.

З точки зору диска, він бачить команди типу "блок читання № 56, блок читання № 5463, блок читання № 14, блок читання №14, блок читання №5"

Блоки

Я пару разів згадував блоки. Оскільки комп'ютери мають такі великі розміри (1 Мб ~ = 1000000 Б), навіть послідовний доступ неефективний, якщо вам доведеться запитувати диск для кожного окремого байту - занадто багато балачки. На практиці операційна система одночасно запитує блоки даних з диска.

Блок просто діапазон байтів; Наприклад, блок №1 може бути байтами №1- # 512, блок №2 може бути байтами # 513- # 1024 і т. д. Ці блоки є величиною 512 байт або 4096 байтами, залежно від накопичувача. Але навіть після роботи з блоками, а не окремими байтами, послідовний доступ до блоку швидший, ніж випадковий блок-доступ.


Продуктивність

Послідовна

Послідовний доступ, як правило, швидший, ніж випадковий доступ. Це тому, що послідовний доступ дозволяє операційній системі та накопичувачу передбачити, що буде потрібно далі, і заздалегідь завантажити великий шматок. Якщо ви попросили блоки "1, 2, 3, 4", ОС може здогадатися, що вам потрібно буде "5, 6, 7, 8" далі, тому він повідомляє диску "1, 2, 3, 4" , 5, 6, 7, 8 "за один раз. Аналогічно, накопичувач може зчитувати фізичну пам’ять за один раз, а не "шукати 1, читати 1,2,3,4, шукати 5, читати 5,6,7,8".

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

Діаграма внутрішньої частини жорсткого диска
Зображення з http://www.realtechs.net/data%20recovery/process2.html

Це означає, що в будь-який час можна прочитати лише біт даних під головою в кінці руки. Дисководі потрібно чекати двох речей: йому потрібно дочекатися, коли рука перейде до правого кільця ("доріжки") диска, а також потрібно дочекатися, коли диск обернеться навколо, щоб необхідні дані знаходилися під зчитуванням голова. Це відомо як пошук 2 . І прядіння, і рухома зброя потребують фізичного часу для переміщення, і їх не можна значно прискорити, не ризикуючи пошкодити.

Зазвичай це займає дуже багато часу, набагато довше, ніж фактичне читання. Ми говоримо> 5 мс просто для того, щоб дістатися до запитуваного байту, а фактичне зчитування байту складає в середньому приблизно 0,00000625 мс за послідовне читання байтів (або 0,003125 мс на блок 512 В).

Випадкові

З іншого боку, випадковий доступ не має такої переваги передбачуваності. Отже, якщо ви хочете прочитати 8 випадкових байтів, можливо, з блоків "8,34,76,996,112,644,888,341", диск повинен перейти "шукати до 8, читати 8, шукати34, читати 34, шукати to76, читати 76, ..." . Зауважте, як це потрібно шукати знову для кожного блоку? Замість середнього 0,003125 мс на послідовному блоці 512 В, тепер це середнє значення (5 мс шукати + 0,003125 мс читати) = 5,003125 мс на блок. Це багато-багато разів повільніше. Насправді в тисячі разів повільніше.

SSD-диски

На щастя, зараз у нас є рішення: SSD-диски.

SSD, твердотільний привід , як випливає з його назви, є твердим станом . Це означає, що у нього немає рухомих частин . Більше того, спосіб розміщення SSD означає, що немає (фактично 3 ) потреби шукати розташування байта; це вже знає . Ось чому SSD має значно менший розрив у продуктивності між послідовним та випадковим доступом.

Проблема все ще існує, але це може бути пов'язано з тим, що ми не можемо передбачити, що буде далі, і передзавантажити ці дані до того, як вони будуть запитані.


1 Точніше, диски LBA розглядаються в блоках по 512 байти (512n / 512e) або 4kB (4Kn) з міркувань ефективності. Також реальні програми майже ніколи не потребують лише одного байта за раз.

2 Технічно пошук не стосується лише руху руки. Чекання, коли дані обертаються під головою, - це затримка обертання, що перевищує час пошуку.

3 Технічно вони мають таблиці пошуку та перезавантаження з інших причин, наприклад, вирівнювання зносу, але вони абсолютно незначні в порівнянні з HDD ...


@KamilMaciorowski Я насправді переосмислюю це спрощення зараз, оскільки це відкидає мою пошук + розрахунок часу для читання. Ну добре. Це не надто важливо для понять.
Боб

Ви повинні виправити випадкову частину:: Notice how it needs to look for every single byte?замінити byteна block(і відповідно змінити зразок). Привід шукає 4k частину (яку можна далі розсипати на фрагмент 512 байт, але не нижче цього. Він не шукає між кожними байтами! Він шукає між кожними блоками, якщо наступний блок не знаходиться позаду (що трапляється багато на роздроблені диски) І шукати (рухати головою навколо тарілки і чекати, коли блок пройде під ним) - це те, що забирає дуже багато часу (кілька мілісекунд)
Олів'є Дулак

2
Невеликий позначає до 4 кіБ / 512В. 4kiB також розмір сторінки на, ну, майже все, тому OS $, ймовірно, перечитає повний 4-кілобаловий блок, навіть якщо драйвери LBA читають 512 B шматки. Крім того, я не думаю, що проблема полягає в тому, що на жорсткому диску потрібно «знайти» будь-який байт більше, ніж SDD, ніж для фізичного обертання, щоб виправити положення. Якщо ви знову отримаєте доступ до блоку, вам потрібно знову звернутися до нього, оскільки жорсткий диск постійно обертається. Будь-який перекомпонування блоку, ймовірно, буде вторинним ефектом (і перезавантажений блок, як правило, відразу після пошкодження, все одно я вірю, щоб мінімізувати пошук).
Мацей П'єхотка

(Можливо, повна бічна зауваження - я не впевнений у NAND / NOR, але принаймні DDR-адресація також не є абсолютно випадковою, як вказало б ім'я, але працює у "спалах" адрес. У більшості випадків це 64 B через те, що розмір рядка $ більшості процесорів, але може бути набагато більшим для інших програм.)
Мацей П'єхотка

1
@OlivierDulac Я все ще думаю, що введення блоків потенційно заплутує, але я намагався пояснити це. Відповідь оновлено.
Боб

3

Як уже вказувалося в інших відповідях, "4K" майже напевно відноситься до випадкового доступу в блоки розміром 4 KiB.

Щоразу, коли жорсткий диск (не SSD) запитується для читання або запису даних, виникають дві значні затримки:

  • Знайдіть затримку, щоб голова для читання / запису "шукала" правильну кругову доріжку (або "циліндр") на тарілці, включаючи будь-який час, необхідний для стабілізації голови над доріжкою та синхронізації з даними, що зберігаються на тарілці.
  • Затримка обертання, що обертається пластина під головою для читання / запису обертається таким чином, щоб потрібна частина доріжки ("сектор") проходила під головою

Обидва вони мають відносно постійну кількість часу для будь-якого даного накопичувача. Шукати затримки - це функція того, наскільки швидко можна перемістити голову і наскільки далеко її потрібно перемістити, а затримка обертання - це функція того, наскільки швидко обертається блюдо. Більше того, вони не сильно змінилися за останні кілька десятиліть. Виробники, які фактично використовували середній час пошуку, наприклад, в рекламі; вони в значній мірі перестали це робити, коли в районі було мало або зовсім не було розвитку. Жоден виробник, особливо в умовах високої конкуренції, не хоче, щоб їх продукція виглядала не краще, ніж продукція конкурентів.

Типовий настільний жорсткий диск обертається зі швидкістю 7200 об / хв, тоді як типовий привід ноутбука може обертатися зі швидкістю близько 5000 об / хв. Це означає, що щосекунди він проходить загалом 120 обертів (настільний привід) або приблизно 83 обороту (привід ноутбука). Оскільки в середньому диску потрібно буде обертати пів оберта, перш ніж бажаний сектор пройде під голову, це означає, що ми можемо очікувати, що диск зможе обслуговувати приблизно вдвічі більше запитів вводу / виводу за секунду, якщо вважати, що

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

Таким чином, ми повинні очікувати, що ми зможемо виконати з порядком 200 вводу-виводу за секунду, якщо дані, до яких запитується доступ (для читання чи запису), фізично локалізовані фізично, внаслідок чого обмежувальний чинник є затримкою обертання. У загальному випадку, ми очікуємо, що накопичувач зможе виконувати з замовленням 100 вводу-виводу в секунду, якщо дані будуть розповсюджені по тарілці або тарілках, що вимагає значного пошуку та спричинення затримки запиту як обмежувальний фактор . З точки зору зберігання, це " IOPSпродуктивність "жорсткого диска; ця, а не послідовна продуктивність вводу-виводу, як правило, є обмежуючим фактором у реальних системах зберігання даних (Це велика причина, чому SSD-диски настільки швидше використовувати: вони усувають затримку обертання, і значно скорочують затримку пошуку, оскільки фізичний рух голови читання / запису стає пошуком таблиці в таблицях шарів флеш-відображення, які зберігаються в електронному вигляді.)

Записи, як правило, повільніше, коли в ньому йде флеш кешу. Зазвичай операційні системи та жорсткі диски намагаються змінити порядок випадкових записів, щоб перетворити випадкові введення-виведення в послідовний ввід / вивід, де це можливо, для підвищення продуктивності. Якщо є явний бар'єр для змивання або запису кешу , ця оптимізація виключається з метою забезпечення того, щоб стан даних у постійному сховищі відповідав тому, що очікує програмне забезпечення. В основному ті ж міркування застосовуються під час читання, коли немає жодного кеш-диска, або тому, що такого немає (рідкість сьогодні в системах настільних ПК), або тому, що програмне забезпечення навмисно обходить його (що часто робиться під час вимірювання продуктивності вводу-виводу). Обидва вони знижують максимальну потенційну продуктивність IOPS до більш песимістичного випадку, або 120 IOPS для 7200 об / хв.

  • При 100 IOPS при 4 KiB на введення / виведення ми отримуємо продуктивність близько 400 КБ / с.
  • При 200 IOPS при 4 KiB на введення / виведення ми отримуємо продуктивність близько 800 Кб / с.

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

Що стосується суто послідовного вводу / виводу, пропускна здатність у діапазоні 150 Мб / с зовсім не є розумною для сучасних обертових жорстких дисків. Але дуже мало реального вводу / виводу є строго послідовним, тому в більшості ситуацій чисто послідовне виконання вводу / виводу стає швидше академічним вправою, ніж показником ефективності в реальному світі.


Це чудова відповідь, і він читає набагато краще, ніж мій :) Лише невелика примітка, принаймні, Seagate як і раніше вказує середні показники затримки у своїх таблицях . WD не здається.
Боб

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

2

4K відноситься до випадкових вводу-виводу . Це означає, що диск пропонується отримати доступ до невеликих блоків (розміром 4 КБ) у випадкових точках у тестовому файлі. Це слабкість жорстких дисків; можливість доступу до даних в різних регіонах диска обмежена швидкістю, з якою обертається диск, і тим, наскільки швидко можуть рухатися голови читання-запису. Послідовні введення / виведення , де доступ до послідовних блоків, доступні набагато простіше, оскільки привід може просто читати або записувати блоки під час обертання диска.

Твердотільний накопичувач (SSD) не має такої проблеми з випадковим входом / виводом, тому що все, що потрібно зробити, це шукати, де дані зберігаються в базовій пам'яті (як правило, NAND flash, може бути 3D XPoint або навіть DRAM) і читати або записати дані у відповідне місце. SSD повністю електронні і не потребують очікування на обертовому диску або рухомій голові для читання-запису для доступу до даних, що робить їх набагато швидшими, ніж жорсткі диски в цьому плані. Саме тому оновлення до SSD різко підвищує продуктивність системи.

Побічна примітка: послідовна продуктивність вводу / виводу на SSD часто набагато вище, ніж на жорсткому диску. У типовому SSD є кілька NAND-мікросхем, підключених паралельно до контролера флеш-пам’яті, і вони можуть отримати доступ до них одночасно. Шляхом поширення даних по цих мікросхемах досягається макет диска, схожий на RAID 0, що значно підвищує продуктивність. (Зверніть увагу, що багато новіших дисків, особливо більш дешевих, використовують тип NAND під назвою TLC NAND, який, як правило, повільно записує дані. Диски з TLC NAND часто використовують невеликий буфер швидшого NAND, щоб забезпечити більш високу продуктивність для менших операцій запису, але можуть різко сповільнити, коли буфер буде заповнений.)


IIRC, деякі NVMe SSD навіть використовують кеш DRAM.
тімужті

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