NVMe ssd: почему 4k пишет быстрее, чем читает?


51

У меня есть Samsung 960 Pro 512 ГБ SSD на NVMe с PCIe Gen.3x4 под управлением. Я использую Samsung NVMe Driver 2.0.0.1607. SSD работает нормально. Тем не менее, я не понимаю, почему запись 4k быстрее, чем чтение 4k. Я использую AS Benchmark:

введите описание изображения здесь

Это фактор 3! Что-то не так (с моей системой или AS Benchmark) или это нормально?


И все же намного быстрее, чем вращающийся жесткий диск!
Zan Lynx

Ответы:


76

Чтение 4k будет самой трудной вещью, которую может сделать привод. Они относятся к самым маленьким размерам блоков, которые может обрабатывать диск, и у диска нет возможности предварительно загрузить большие объемы данных, фактически они, вероятно, весьма неэффективны, если логика упреждающей загрузки диска намеревается что-либо прочитать. больше 4кб.

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

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

Записи 4K, с другой стороны, могут эффективно буферизоваться, помещаться в очередь и записываться последовательно. Буфер накопителя может выполнять большую часть работы по отлову и записи, для которой он был разработан, и выравниватель износа может даже распределять все эти записи 4K на один и тот же блок стирания диска, иногда превращая «случайную» запись 4K в что-то ближе к последовательной записи.

На самом деле я подозреваю, что это то, что происходит в записи «4K-64Thrd», «64-Thrd», очевидно, использует большую глубину очереди , таким образом сигнализируя диску, что он имеет большой объем данных для чтения или записи , Это вызывает большую кластеризацию записей и, таким образом, приближается к скорости последовательной записи диска. Выполнение записи в 4K все еще требует дополнительных затрат, но теперь вы полностью раскрыли потенциал буфера. В тестовой версии для чтения контроллер накопителя, теперь признавая, что он находится под очень постоянной большой нагрузкой, останавливает предварительную загрузку данных, возможно, избегает буфера и вместо этого переключается в «сырой» режим чтения, снова приближаясь к скорости последовательного чтения.

По сути, контроллер дисковода может сделать что-то, чтобы сделать запись 4K более эффективной, особенно если их кластер прибывает в одно и то же время, в то время как он не может сделать что-либо для чтения одного 4K более эффективным, особенно если он пытается оптимизировать поток данных путем предварительной загрузки данных в кэш.


5
Не является частью самого ответа, но я подозреваю, что «чтение 4K» (не 64-й версии) фактически выставляет размер блока чтения диска по умолчанию как 32K или 64K. Это может быть либо 2600/50 = 52 (64 КБ с некоторыми издержками + исходное чтение 4 КБ), либо 1200/50 = 24 (32 КБ с некоторыми издержками + чтение 4 КБ, уменьшающее его).
Мокубай

16
Хороший ответ в целом, но я не верю, что «очень мало таких маленьких файлов». На самом деле я подозреваю, что в большинстве систем большинство файлов 4k или меньше. Они не занимают большую часть пространства , но это другое дело.
Хоббс

3
Самый простой ответ, вероятно, таков: если вы делаете их по одному, вы не можете перекрывать чтения вообще, потому что вы даже не узнаете, для какого блока следующее чтение, пока не вернете данные из предыдущего чтения. Но вы можете полностью перекрывать записи, так как вы можете получить все данные для следующей записи, пока вы еще работаете с предыдущей.
Дэвид Шварц

2
@hobbs Если вы берете, например, NTFS, размер кластера по умолчанию равен 4 КБ (или их кратному числу), что означает, что сама файловая система NTFS работает в блоках по 4 КБ, даже если сами файлы и / или метаданные меньше. Так что небольшие файлы не имеют никакого значения. Для всех целей и задач система Windows читает / записывает в 4K-блоках или их кратных.
Тонни

1
@hobbs: С NTFS вы, вероятно, получите чтение таких маленьких файлов бесплатно (!). Небольшие файлы хранятся в самой записи каталога, рядом с именем файла. Вы должны указать довольно определенный размер файла, близкий к 4 КБ, чтобы на диске был настоящий файл размером 4 КБ.
MSalters

16

Другие ответы уже объяснили, почему может быть, что письмо быстрее чтения; Хочу добавить, что для этого накопителя это абсолютно нормально, что подтверждается тестами, которые вы можете найти в обзорах.

ArsTecnica отзыв

ArsTechnica проверила диск, как вашу версию (512 ГБ), так и 2 ТБ:

ArsTechnica (Этот график не сразу виден в обзоре, он 5-й в первой галерее, вы должны нажать на него)

Производительность этих двух моделей очень похожа, а их числа выглядят так же, как у вас: накопитель может читать со скоростью 37 МБ / с и записывать со скоростью 151 МБ / с.

AnandTech обзор

AnandTech также проверил диск: они использовали модель 2TB, усредняя результаты тестов с глубиной очереди 1, 2 и 4. Это графики:

AnandTech 4K читать AnandTech 4K написать

Накопитель читает со скоростью 137 МБ / с и записывает со скоростью 437 МБ / с. Число намного выше, чем у вас, но это, вероятно, из-за более высокой глубины очереди. В любом случае, скорость записи в 3 раза выше скорости чтения, как в вашем случае.

Обзор PC World

Еще один обзор от PC World : они протестировали версию на 1 ТБ, и результаты для 4K составляют 30 МБ / с для чтения и 155 МБ / с для записи: Граф мира ПК скорость записи соответствует вашей, но здесь привод даже медленнее при чтении. В результате соотношение составляет пять к одному, а не три к одному.

Заключение

Отзывы подтверждают, что для этого диска нормально, что скорость записи для случайных 4K намного выше, чем скорость чтения: в зависимости от теста она может быть даже в 5 раз быстрее.

Ваш диск в порядке. Нет никаких оснований полагать, что это неисправно или что у вашей системы есть проблема.


8

Контроллер SSD кэширует записи во встроенной памяти NVRAM и сбрасывает их на флэш-носители в удобное время. Таким образом, задержка записи - это задержка доступа к кешу, обычно 20us. Чтения, напротив, подаются с носителя, в лучшем случае время доступа составляет 120-150 мкс.


1

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

Для записи данные должны быть просто записаны во внутреннюю кэш-память. Позже он будет записан во флэш-память вместе с другими 4k-блоками и метаданными, необходимыми для проверки, исправления ошибок и определения местоположения.

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.