TL; DR: Это потому, что SSD лжет вам и говорит, что запись сделана до того, как это произойдет. Это не может сойти с рук то же самое для чтения.
Более длинная версия ответа - кэширование записи.
Начнем с дела QD1. SSD сообщит о завершении записи в ОС, как только он получит данные и сохранит их в кеше локально на диске, но до того, как он фактически записал их в NAND. Это имеет большое значение, потому что на самом деле запись данных в NAND довольно медленная. Для чтения он фактически должен прочитать данные из NAND, прежде чем он сможет отправить их обратно (если он не прочитал их ранее и все еще хранит их в кэше, но это очень маловероятно при случайном чтении).
Недостатком этого является то, что перед внезапной потерей питания может произойти потеря данных, записанных на SSD, но еще не попавших в NAND. Некоторые корпоративные твердотельные накопители имеют суперконденсатор, который накапливает достаточно энергии для завершения записи данных в кэш-памяти в NAND в случае внезапной потери питания.
Вы видите то же самое для жестких дисков, потому что они также делают кэширование записи. Они просто не так агрессивны по этому поводу. Почему SSD такой агрессивный? Чтобы ответить на это, нам нужно перейти к рассмотрению случая QD32, который является одновременно более сложным и интересным.
Неверно то, что вы говорите, что случайное чтение обычно быстрее, чем случайное чтение в QD32. Это зависит от того, на какие конкретно SSD вы смотрите.
Если вы посмотрите на случайное чтение 4k QD1 на многих SSD-накопителях SATA, похоже, что все они работают в диапазоне 20–30 МБ / с. Это почему? Это связано с тем, что случайное чтение 4k QD1 в основном связано с задержками, а не с пропускной способностью. Задержка состоит из трех частей:
- Задержка интерфейса SATA/AHCI, которая включает в себя указание драйверу, что делать, и отправку данных.
- Сам контроллер должен выяснить, что делать с данными и инструкциями, которые он получил.
- Время, необходимое для фактического чтения или записи данных в матрицу 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 КБ, а объединение операций записи до тех пор, пока вы не достигнете размера страницы, помогает избежать большого усиления записи. Это делается для того, чтобы твердотельные накопители были настолько агрессивны в кэшировании записи.