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

46

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

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

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

User6539
источник
13
Это нормально и ожидаемо. «4K» в данном контексте означает случайное чтение / запись (в блоках по 4 килобайта, следовательно, «4K»), на которых механические жесткие диски работают ужасно. Вот где вы хотите SSD. Смотрите здесь для более глубокого объяснения.
Боб
Используется 4Kb, потому что это типичный размер дискового кластера и на многих современных жестких дисках реального сектора (низкоуровневая структура самого диска). То есть наименьшее количество данных, которые могут быть переданы за один раз при любом чтении или записи, даже если запрашиваемые данные меньше. Интересно, что НЕТ ответа на этой странице до сих пор даже упоминает кластеры или сектора.
Томасруттер
2
@thomasrutter Потому что это не имеет отношения к ответу. Важной частью является то, что этот тест включает в себя случайный поиск. Неважно (в некоторой степени), сколько данных передается и кратно ли это размеру сектора диска; важная часть состоит в том, что тест передает минимальный объем данных для измерения эффективности поиска.
Майкл Джонсон
Это тест на раздел или на весь диск? Тесты на уровне разделов могут работать намного хуже при доступе 4K, если у вас есть диск с физическими секторами 4K, но логическими секторами 1K, и смещение границы раздела в два сектора.
Тоби Спейт
Современные инструменты разделения, как правило, гарантируют, что разделы начинаются и заканчиваются на границе сектора; даже гранулярность в 1 МБ сейчас распространена. Прошли времена старых «63 512-байтовых секторов», которые создавали проблемы для собственных секторов размером 4 КБ.
Томасруттер

Ответы:

85

То, с чем вы сталкиваетесь, типично для механических жестких дисков, и одно из главных преимуществ 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 Сейчас я действительно переосмысливаю это упрощение, потому что оно отбрасывает мои вычисления времени поиска + чтения. Ну что ж. Это не слишком важно для концепций.
Боб
Вы должны исправить случайную часть:: Notice how it needs to look for every single byte?заменить byteна block(и соответственно изменить пример). Накопитель ищет часть 4k (которая может быть в дальнейшем разбита на 512-байтовый фрагмент, но не ниже этого. Он не ищет между каждым байтом! Он ищет между каждым блоками, если следующий блок не сразу (что часто случается при фрагментированные диски). И поиск (перемещение головы вокруг диска и ожидание прохождения блока под ним) - это то, что занимает очень много времени (несколько миллисекунд)
Оливье Дюлак
2
Небольшая диенота до 4 КБ / 512 В. 4kiB - это также размер страницы, ну почти во всем, так что OS $, скорее всего, будет читать весь блок размером 4 КБ, даже если драйверы LBA будут считывать фрагменты 512 B. Кроме того, я не думаю, что проблема в том, что HDD должен «найти» любой байт больше, чем SDD, чем то, что ему нужно физически повернуть, чтобы исправить положение. Если вы снова получаете доступ к блоку, вам нужно искать его снова, поскольку HDD постоянно вращается. Любое переназначение блоков, вероятно, будет вторичным эффектом (и переназначенный блок обычно сразу после поврежденного, во всяком случае, я полагаю, чтобы минимизировать поиск).
Мацей Пехотка
(Возможно, полное примечание - я не уверен насчет NAND / NOR, но, по крайней мере, адресация DDR также не является полностью случайной, как могло бы указывать имя, но работает в «пачке» адресов. В большинстве случаев это 64 B, поскольку размер большинства линейных процессоров в $, но может быть гораздо больше для других приложений.)
Maciej Piechotka
1
@OlivierDulac Я все еще думаю, что введение блоков может привести к путанице, но я попытался объяснить это. Ответ обновлен.
Боб
3

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

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

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

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

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

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

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

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

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

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

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

CVn
источник
Это отличный ответ, и он читается намного лучше, чем мой :) Просто небольшая заметка, по крайней мере, Seagate по-прежнему определяет среднюю задержку поиска в своих таблицах данных . WD не кажется.
Боб
@Bob Спасибо. Я действительно имел в виду рекламу и тому подобное; Я отредактировал ответ, чтобы уточнить это. Я думаю , что можно с уверенностью сказать , что очень немногие люди читают радиокомпоненты, даже если делать это , вероятно , будет отрезвляющим опытом для многих ...
CVn
2

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

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

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

bwDraco
источник
IIRC, некоторые твердотельные накопители NVMe даже используют кэш-память DRAM.
тимужти
1
Большинство делают. SSD без драмов вроде как на низком уровне.
подмастерье Компьютерщик