То, с чем вы сталкиваетесь, типично для механических жестких дисков, и одно из главных преимуществ 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 ...