Но я не смог найти инфу про ускорение записи через какой-нибудь дешёвый SSD. Так возможно ли это?
Краткий ответ: с использованием SSD невозможно, ставьте CMR-диски.
Фактическое поведение ZFS зависит от режима записи: синхронный или асинхронный.
В асинхронном режиме (режим по умолчанию или при
sync=disabled
) запись происходит группами транзакций (txg) с периодичностью, стремящейся к значению
zfs_txg_timeout — это и есть
кэш записи ZFS, доступный из коробки и единственно возможный. Значение по умолчанию 5 секунд, фактическое время зависит от множества факторов и может быть как меньше, так и больше. На свой страх и риск можно поиграться с параметрами, влияющими на данное поведение, но физику не обманешь и вы всё равно довольно быстро упрётесь в фактическую производительность дисков.
В синхронном режиме (если приложение явно запрашивает синхронную запись или при
sync=always
), данные аналогично помещаются в память, но запись не будут подтверждена пока не завершиться запись в ZFS Intent Log (ZIL), который является частью пула. После этого данные в рамках очередной txg записываются на диск (да, ещё раз) уже на своё постоянное место. Можно снизить нагрузку на диски добавив SLOG на базе SSD (желательно двух и в mirror, так как эти данные важны в случае сбоя). Но это не кэш записи, а способ немного увеличить производительность записи при
некоторых сценариях. Ещё на синхронную запись и работу с ZIL влияет
logbias.
Можно было бы подумать, что при использовании
sync=always
и отдельном SLOG мы заставим все данные писаться сначала на SSD и тем самым получим кэш записи, но нет. При нормальном режиме работы данные из ZIL, где бы он не находился, никогда не читаются, так как они есть в оперативной памяти. ZIL используется только для восстановления после сбоев.