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

12

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

Вот эталонный пример 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,111 МБ / с
  • Последовательная запись (Q = 32, T = 1): 677,645 МБ / с
  • Случайное чтение 4KB (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, но, как обычно, жесткие диски показывают то же поведение, это, кажется, другая причина ?!

mgutt
источник

Ответы:

9

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 КБ, а объединение операций записи до тех пор, пока вы не достигнете размера страницы, помогает избежать большого усиления записи. Именно для этого SSD-диски настолько агрессивны в кэшировании записи.

Мистер альфа
источник