Почему мой жесткий диск так медленно работает на скоростных тестах "4K"?

12718
User6539

Что не так с моей скоростью на 4К? Почему это так медленно? Или так должно быть?

Скриншот теста

С этой скоростью все в порядке? Почему у меня такая низкая скорость на 4K?

45
Это нормально и ожидаемо. «4K» в данном контексте означает случайное чтение / запись (в блоках по 4 килобайта, следовательно, «4K»), на которых механические жесткие диски работают ужасно. Вот где вы хотите SSD. См. [Здесь] (https://wiki.mikejung.biz/CrystalDiskMark) для более подробного объяснения. Bob 6 лет назад 13
Используется 4Kb, потому что это типичный размер дискового кластера и на многих современных жестких дисках реального сектора (низкоуровневая структура самого диска). То есть наименьшее количество данных, которые могут быть переданы за один раз при любом чтении или записи, даже если запрашиваемые данные меньше. Интересно, что НЕТ ответа на этой странице пока даже упоминает кластеры или сектора. thomasrutter 6 лет назад 0
@thomasrutter Потому что это не имеет отношения к ответу. Важной частью является то, что этот тест включает в себя случайный поиск. Неважно (до некоторой степени), сколько данных передается и кратно ли это размеру сектора диска; важная часть заключается в том, что тест передает минимальный объем данных для измерения эффективности поиска. Micheal Johnson 6 лет назад 2
Это тест на раздел или на весь диск? Тесты на уровне разделов могут работать намного хуже при доступе 4K, если у вас есть диск с физическими секторами 4K, но логическими секторами 1K, и смещение границы раздела в два сектора. Toby Speight 6 лет назад 0
Современные инструменты разделения, как правило, гарантируют, что разделы начинаются и заканчиваются на границе сектора; даже гранулярность в 1 МБ сейчас распространена. Прошли те времена старых "63 512-байтовых секторов", которые создавали проблемы для собственных секторов размером 4 КБ. thomasrutter 6 лет назад 0
Какой бренд / модель это жесткий диск? i486 6 лет назад 0

3 ответа на вопрос

84
Bob

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

В CrystalDiskMark «Seq» означает последовательный доступ, в то время как «4K» означает произвольный доступ (порциями по 4 КБ за раз, потому что отдельные байты будут слишком медленными и нереальными 1 ).


Определения

Существует два основных способа доступа к файлу.

Последовательный доступ

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

С точки зрения диска, он видит такие команды, как «чтение блока № 1, чтение блока № 2, чтение блока № 3, чтение блока байтов № 4» 1 .

Произвольный доступ

Произвольный доступ означает, что нет никаких очевидных закономерностей для чтения или записи. Это не должно означать действительно случайный; это действительно означает «не последовательно». Например, если вы запускаете много программ одновременно, им нужно будет прочитать много файлов, разбросанных по вашему диску.

С точки зрения привода, он видит такие команды, как «чтение блока № 56, чтение блока № 5463, чтение блока № 14, чтение блока № 5»

Блоки

Я упоминал блоки пару раз. Поскольку компьютеры работают с такими большими размерами (1 МБ ~ = 1000000 B), даже последовательный доступ неэффективен, если вам нужно запрашивать диск для каждого отдельного байта - слишком много болтовни. На практике операционная система запрашивает блоки данных с диска одновременно.

Блок просто диапазон байтов; например, блок # 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».

О, я упоминал, что стремился к чему-то. Механические жесткие диски имеют очень медленное время поиска из-за того, как они физически расположены: они состоят из множества тяжелых металлизированных дисков, вращающихся вокруг, с физическими руками, перемещающимися вперед и назад для чтения диска. Вот видео открытого HDD, где вы можете увидеть вращающиеся диски и движущиеся руки.

Схема внутренних жестких дисков
Изображение с 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, искать 76, читать 76, ...», Заметьте, как нужно искать каждый отдельный блок? Вместо среднего значения 0,003125 мс на последовательный блок 512 В теперь оно составляет в среднем (5 мс поиска + 0,003125 мс считывания) = 5,003125 мс на блок. Это много, много раз медленнее. Фактически, в тысячи раз медленнее.

SSD-накопители

К счастью, у нас есть решение: твердотельные накопители.

SSD, твердотельный накопитель, является, как следует из ее названия, в твердом состоянии . Это означает, что у него нет движущихся частей . Более того, способ размещения SSD означает, что (фактически 3 ) нет необходимости искать местоположение байта; это уже знает . Вот почему SSD имеет гораздо меньший разрыв в производительности между последовательным и произвольным доступом.

Разрыв все еще существует, но это можно объяснить тем, что он не может предсказать, что будет дальше, и предварительно загрузить эти данные до того, как они будут запрошены.


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

2 Технически, поиск относится только к перемещению руки. Ожидание вращения данных под головкой - это задержка вращения в верхней части времени поиска.

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

@KamilMaciorowski Сейчас я действительно переосмысливаю это упрощение, потому что оно отбрасывает мои расчеты времени поиска + чтения. Ну что ж. Это не слишком важно для концепций. Bob 6 лет назад 0
Вы должны исправить случайную часть: `Заметьте, как должен выглядеть каждый байт?`: Замените `byte` на` block` (и измените пример соответственно). Накопитель ищет часть 4 КБ (которая может быть в дальнейшем разбита на 512-байтовый фрагмент, но не ниже этого. Он не ищет между каждым байтом! Он ищет между каждым блоками, если следующий блок не сразу (что часто случается при фрагментированные диски). И поиск (перемещение головы вокруг диска и ожидание прохождения блока под ним) - это то, что занимает очень много времени (несколько миллисекунд) Olivier Dulac 6 лет назад 0
Небольшая диенота до 4 КБ / 512 В. 4kiB - это также размер страницы, ну почти во всех, так что OS $, скорее всего, будет читать весь блок 4 kB, даже если драйверы LBA читают в 512 В кусках. Кроме того, я не думаю, что проблема в том, что HDD должен «найти» любой байт больше, чем SDD, чем то, что ему нужно физически повернуть, чтобы исправить положение. Если вы снова получаете доступ к блоку, вам нужно искать его снова, поскольку жесткий диск постоянно вращается. Любое перераспределение блоков, вероятно, будет вторичным эффектом (и, в любом случае, переназначенный блок, как правило, сразу после поврежденного, я считаю, чтобы свести к минимуму поиск). Maciej Piechotka 6 лет назад 2
(Возможно, полное примечание - я не уверен насчет NAND / NOR, но, по крайней мере, адресация DDR также не является полностью случайной, как могло бы указывать имя, но работает в «пакете» адресов. В большинстве случаев это 64 B из-за того, что размер линии $ большинства процессоров, но может быть намного больше для других приложений.) Maciej Piechotka 6 лет назад 0
@OlivierDulac Я знаю, что это не совсем точно, но я подумал, что разобраться с байтами будет проще для ОП. Вот почему сноска там. Я мог бы все еще пересмотреть это к блокам, когда у меня есть немного времени, но тогда я должен был бы должным образом объяснить, что и почему: \ Bob 6 лет назад 0
@ Боб, может быть, достаточно просто s / byte / block / во всем ответе? Байт 67 становится блоком (числом) 67, и это тоже работает? Olivier Dulac 6 лет назад 0
@OlivierDulac Я до сих пор думаю, что введение блоков может привести к путанице, но я пытался это объяснить. Ответ обновлен. Bob 6 лет назад 1
@MaciejPiechotka Я использовал «найти» в смысле непрофессионала - конечно, накопитель внутренне знает, на каком диске, дорожке и в каком секторе он находится, но ему все равно нужно физически «найти» его. Я обновил ответ, чтобы использовать более технический * поиск *. Не уверен, будет ли это легче или труднее понять - опять же, с точки зрения того, кто вообще ничего не знает о внутренностях приводов. Bob 6 лет назад 0
Производительность произвольного доступа к вращающемуся диску не является «ужасной» в общей схеме вещей. Это, конечно, плохо по сравнению с твердотельной памятью, но 5-10 миллисекунд все еще намного лучше, чем время поиска на носителе, который заменяет вращающиеся диски. ** С лентами время поиска часто измерялось в минутах **. Теперь это * ужасно * для произвольного доступа (и все же лучше, чем sneaker-net для библиотеки). Ben Voigt 6 лет назад 0
2
bwDraco

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

Твердотельный накопитель (SSD) не имеет такой проблемы со случайным вводом / выводом, поскольку все, что ему нужно сделать, это посмотреть, где данные хранятся в основной памяти (обычно флэш-память NAND, может быть 3D XPoint или даже DRAM), и прочитать или запишите данные в соответствующем месте. Твердотельные накопители являются полностью электронными и не нуждаются в ожидании на вращающемся диске или движущейся головке чтения-записи для доступа к данным, что делает их намного быстрее, чем жесткие диски в этом отношении. Именно по этой причине обновление до SSD значительно повышает производительность системы.

Примечание: производительность последовательного ввода-вывода на SSD часто намного выше, чем на жестком диске. Типичный SSD имеет несколько чипов NAND, подключенных параллельно к контроллеру флэш-памяти, и может получать к ним доступ одновременно. Распределяя данные по этим чипам, достигается расположение дисковода, похожее на RAID 0, что значительно повышает производительность. (Обратите внимание, что многие новые накопители, особенно более дешевые, используют тип NAND, называемый TLC NAND, который имеет тенденцию быть медленным при записи данных. Диски с TLC NAND часто используют небольшой буфер с более быстрым NAND, чтобы обеспечить более высокую производительность для небольших операций записи, но могут резко замедлиться, как только этот буфер заполнится.)

IIRC, некоторые твердотельные накопители NVMe даже используют кэш-память DRAM. Alpha3031 6 лет назад 0
Большинство делают. SSD без драмов вроде как на низком уровне. Journeyman Geek 6 лет назад 1
2
a CVn

Как уже указывалось в других ответах, «4K» почти наверняка относится к произвольному доступу в блоках размером 4 КиБ.

Каждый раз, когда жесткий диск (не SSD) запрашивается для чтения или записи данных, возникают две значительные задержки:

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

Оба из них имеют относительно постоянное количество времени для любого данного диска. Задержка поиска зависит от того, насколько быстро может быть перемещена головка и как далеко она должна быть перемещена, а задержка вращения зависит от скорости вращения диска. Более того, они не сильно изменились за последние несколько десятилетий. Производители фактически использовали среднее время поиска, например, в рекламных объявлениях; они в значительной степени прекратили это делать, когда в этом районе было мало или вообще не было развития. Ни один производитель, особенно в условиях высокой конкуренции, не хочет, чтобы его продукция выглядела не лучше, чем у конкурентов.

Типичный настольный жесткий диск вращается со скоростью 7200 об / мин, тогда как обычный ноутбук может вращаться со скоростью около 5000 об / мин. Это означает, что каждую секунду он совершает 120 оборотов (настольный диск) или около 83 оборотов (ноутбук). Поскольку в среднем диск должен вращаться на пол оборота, прежде чем требуемый сектор пройдет под головкой, это означает, что мы можем ожидать, что диск сможет обслуживать примерно вдвое больше запросов ввода-вывода в секунду, предполагая, что

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

Таким образом, мы должны ожидать, что сможем выполнять порядка 200 операций ввода-вывода в секунду, если данные, к которым они запрашивают доступ (для чтения или записи), физически относительно локализованы, в результате чего задержка вращения является ограничивающим фактором. В общем случае мы ожидаем, что диск сможет работать на уровне порядка 100 операций ввода-вывода в секунду, если данные распределены по пластине или пластинам, что требует значительного поиска и приводит к тому, что задержка поиска является ограничивающим фактором, С точки зрения хранения, это « IOPSпроизводительность »жесткого диска; это, а не производительность последовательного ввода-вывода, как правило, является ограничивающим фактором в реальных системах хранения. (Это главная причина, по которой твердотельные накопители используются намного быстрее: они устраняют задержку вращения и значительно уменьшить задержку поиска, поскольку физическое движение головки чтения / записи становится поиском в таблицах слоев флэш-отображения, которые хранятся в электронном виде.)

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

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

Которые просто так совпадают с вашими цифрами почти точно. Случайный ввод / вывод с небольшими размерами блоков является абсолютным фактором снижения производительности для ротационных жестких дисков, поэтому он также является важным показателем.

Что касается чисто последовательного ввода-вывода, пропускная способность в диапазоне 150 МБ / с вовсе не является необоснованной для современных ротационных жестких дисков. Но очень мало реальных операций ввода-вывода строго последовательны, поэтому в большинстве ситуаций чисто последовательная производительность ввода-вывода становится скорее академическим упражнением, чем показателем реальной производительности.

Это отличный ответ, и он читается намного лучше, чем мой :) Просто небольшая заметка, по крайней мере, Seagate по-прежнему задает среднюю задержку поиска [в своих таблицах данных] (https://www.seagate.com/files/staticfiles/docs/ PDF / техническое описание / диск / настольный HDD-техническое описание-ds1770-1-1212us.pdf). WD не кажется. Bob 6 лет назад 0
@Bob Спасибо. Я на самом деле имел в виду рекламу и тому подобное; Я отредактировал ответ, чтобы уточнить это. Я думаю, можно с уверенностью сказать, что очень немногие люди читают таблицы, хотя это, вероятно, было бы отрезвляющим опытом для многих ... a CVn 6 лет назад 0