Почему 4k читает в бенчмарках hdd / ssd медленнее, чем пишет?

8310
mgutt

Существует несколько инструментов для тестирования скорости жесткого диска.

Вот эталонный пример SATA SSD:

  • Последовательное чтение: 718,498 МБ / с
  • Последовательная запись: 777,414 МБ / с
  • Случайное чтение 512 КБ: 160,541 МБ / с
  • Произвольная запись 512 КБ: 838,930 МБ / с
  • Случайное чтение 4 КБ (QD = 1): 26,985 МБ / с [6588,1 IOPS]
  • Произвольная запись 4 КБ (QD = 1): 135,603 МБ / с [33106,2 IOPS]
  • Случайное чтение 4 КБ (QD = 32): 177,003 МБ / с [43213,6 IOPS]
  • Произвольная запись 4 КБ (QD = 32): 178,397 МБ / с [43554,0 IOPS]

м.2 SSD:

  • Последовательное чтение (Q = 32, T = 1): 829,119 МБ / с
  • Последовательная запись (Q = 32, T = 1): 677,645 МБ / с
  • Случайное чтение 4 КБ (Q = 32, T = 1): 744,328 МБ / с [181720,7 IOPS]
  • Случайная запись 4KB (Q = 32, T = 1): 144,876 МБ / с [35370,1 IOPS]
  • Последовательное чтение (T = 1): 785,600 МБ / с
  • Последовательная запись (T = 1): 789,973 МБ / с
  • Случайное чтение 4 КБ (Q = 1, T = 1): 56,585 МБ / с [13814,7 IOPS]
  • Случайная запись 4KB (Q = 1, T = 1): 170,449 МБ / с [41613,5 IOPS]

HDD:

  • Последовательное чтение: 114,988 МБ / с
  • Последовательная запись: 111,043 МБ / с
  • Случайное чтение 512 КБ: 39,260 МБ / с
  • Произвольная запись 512 КБ: 57,409 МБ / с
  • Случайное чтение 4 КБ (QD = 1): 0,546 МБ / с [133,4 IOPS]
  • Произвольная запись 4 КБ (QD = 1): 0,757 МБ / с [184,9 IOPS]
  • Случайное чтение 4 КБ (QD = 32): 1,582 МБ / с [386,3 IOPS]
  • Произвольная запись 4 КБ (QD = 32): 0,700 МБ / с [171,0 IOPS]

В любом случае «Случайное чтение 4 КБ Q1» медленнее, чем запись, и в большинстве случаев это противоположность «QD32».

На некоторых форумах люди говорят, что это ограничение в отношении структуры чипов SSD, но, как обычно, жесткие диски показывают то же поведение, это, кажется, другая причина ?!

7

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

5
Mr Alpha

TL; DR: Это потому, что SSD лжет вам и говорит, что запись сделана до того, как это произойдет. Это не может сойти с рук то же самое для чтения.

Более длинная версия ответа - кэширование записи.

Начнем с дела QD1. SSD сообщит о завершении записи в ОС, как только он получит данные и сохранит их в кеше локально на диске, но до того, как он фактически записал их в NAND. Это имеет большое значение, потому что на самом деле запись данных в NAND довольно медленная. Для чтения он фактически должен прочитать данные из NAND, прежде чем он сможет отправить их обратно (если он не прочитал их ранее и все еще хранит их в кэше, но это очень маловероятно при случайном чтении).

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

Вы видите то же самое для жестких дисков, потому что они также делают кэширование записи. Они просто не так агрессивны по этому поводу. Почему SSD такой агрессивный? Чтобы ответить на это, нам нужно перейти к рассмотрению случая QD32, который является одновременно более сложным и интересным.

Неверно то, что вы говорите, что случайное чтение обычно быстрее, чем случайное чтение в QD32. Это зависит от того, на какие конкретно SSD вы смотрите.

Если вы посмотрите на случайное чтение 4k QD1 на многих SSD-накопителях SATA, похоже, что все они работают в диапазоне 20–30 МБ / с. Это почему? Это связано с тем, что случайное чтение 4k QD1 в основном связано с задержками, а не с пропускной способностью. Задержка состоит из трех частей:

  1. Задержка интерфейса SATA / AHCI, которая включает в себя указание драйверу, что делать, и отправку данных.
  2. Сам контроллер должен выяснить, что делать с данными и инструкциями, которые он получил.
  3. Время, необходимое для фактического чтения или записи данных в матрицу NAND.

Ни 1., ни 3. много не менялись в течение длительного времени, и поэтому случайные чтения 1k QD1 также не сильно изменились.

Недавний переход на твердотельные накопители с SATA / AHCI на PCIe / NVMe значительно сократил задержку 1., поэтому некоторые твердотельные накопители m.2 и PCIe в последнее время показали здесь значительные улучшения.

Одна вещь, которую контроллер SSD может сделать, чтобы сильно помочь с задержкой, - это чтение или запись в несколько матриц NAND параллельно и таким образом маскировать большую часть задержки 3. Если вы выполняете QD32 4k случайного чтения с NCQ, SSD может обслуживать чтение запросы вышли из строя и убедитесь, что они читают как можно больше параллельных штампов NAND.

Для QD32 4k произвольная запись SSD выполняет то, что называется объединением записи. Когда в SSD-контроллер поступает множество небольших запросов на запись, локально кеширует их, а когда накопился достаточно большой буфер записи, контроллер разбивает его на куски хорошего размера и записывает куски в несколько матриц NAND параллельно, снова, чтобы помочь маскировать NAND латентность. Еще одним преимуществом объединения записей является то, что в настоящее время большинство твердотельных накопителей имеют размер страницы (наименьшее количество, которое может быть прочитано или записано) больше 4 КБ, а объединение операций записи до тех пор, пока вы не достигнете размера страницы, помогает избежать большого усиления записи. Это делается для того, чтобы твердотельные накопители были настолько агрессивны в кэшировании записи.