IOPS, VDI, IOMETER — Часть 4
Сегодня обсудим факторы, которые оказывают ОЧЕНЬ сильное воздействие на SSD производительность, но в общих статьях, где рассказывают про IOPS и т.д., этому внимания не уделяют, хотя, следовало бы. Ниже приведу примеры, что я имею ввиду.

Нагрев SSD диска под нагрузкой. Не зря на них начали ставить пассивное охлаждение в виде радиаторов, но и решения с кулерами. Ниже — перегрев с троттлингом который ведет за собой просадку по скорости, а следовательно, по IOPS.



У всех SSD есть RAM кеш, и/или быстрые SLC чипы (нечто похожее на SSHD из первой статьи), в случае, с многоуровневыми чипами MLC и тд. На графике ниже — тест, когда кеша на быстрых чипах уже не хватает, и скорость падает в 4 раза.

Технология TRIM. Технология нужна для «уборки мусора». ОС передаёт информацию о том, какие сектора выводятся файловой системой из обращения, контроллер SSD должен консолидировать эти сектора и очистить освобождающиеся страницы флеш-памяти для выполнения будущих операций. Такие действия требуют перезаписи и очистки областей памяти, и это не только занимает заметное время, но и серьёзно нагружает контроллер работой. В результате, после удаления с диска больших объёмов данных могут быть замедления SSD или даже подвисания диска.

У SSD всегда есть резерв — OverProvisioning. Две ключевых точки, в которых самая большая от него польза — это 7% и 28%. Поэтому, например, диски с 512GB flash памяти продаются как 480GB (7%) и 400GB (28%). Это свободное место позволяет легче находить чистые блоки для записи и ускоряет Random Write и снижает износ диска. Если у вас диск уже с 28% OverProvisioning, я бы дополнительно не стал оставлять места, там уже процент пользы небольшой. Если диск с 7%, то, в зависимости от желаемого использования, может иметь смысл увеличить до 28%.
На SATA дисках это можно сделать через hdparm, установив HPA (Host Protected Area). На SAS — через sg_format. На NVME — через resize.
TRIM занимается тем, что помечает блоки, из которых все удалено, как чистые. Для Enterprise SSD, TRIM не нужен — им хватает резерва, чтобы самим справиться с нагрузкой. TRIM нужен, в основном, на Consumer SSD с малым OverProvisioning (типа 500GB). В Enterprise SSD за очистку отвечает FTL на низком уровне. Про Flash Translation Layer можно почитать вот тут.
Т.к. SSD пишет страницами по 4KiB или 8KiB внутрь 256KiB блока (только страницы и блоки от модели к модели разные, но смысл один), а удаляется только блоком целиком, то пока все страницы внутри блока не будут помечены на удаление, блок не будет отмечен готовностью для очистки TRIM’ом, и будет в статусе partially filled, вместо free.

Отлично, с возможными проблемами при тестировании и вычислением IOPS на SSD — разобрались. Идем дальше.