У меня как раз в этом и была проблема. Что zfs каждые 5 секунд дергает механические диски, которые ох какие задумчивые, от силы 240MB/s выдают, а вот с bcache ситуация сильно лучше
Я на месте.
Смотрите. Да, кратковременно можно повысить быстродействие сливая данные на SSD быстрее чем они пишутся на HDD. Но нюанс в том что при большом количестве клиентов хранилища, т.е. при большом количестве VM, у вас будет монотонный не прекращающийся поток и ваше SSD переполнится, тогда, возможно, скорость станет ещё меньше чем на zfs, поскольку zfs избегает случайной записи, чем увеличивает пропускную способность дисков.
Тут надо отметить, что если вам не важна латентость, то наверное нагружая систему, можно получить от неё ещё бОльшую производительность. Но как правило, количество и глубину очередей как раз огрничивает латентность. По тому, почти всегда, задрав глубину очередей и их количество вы заставите устройства работать бустрее. Но из-за наличия очередей, латентность ухудшиться. Для VM за которыми работаю люди, после 50мс-70мс, люди скажут что машина тупит и далее наращивать глубину очередей нельзя.
Так вот в ZFS как раз и происходит отложенный сброс данных на диск чтобы повысить пропускную способность дисков на запись, но там это не вызывает такого роста латентности, т.к. либо задействуется slog либо это не синхронный трафик, который может подождать, а в случае неожиданной перезагрузки, он будет потерян, но это не приведет к проблемам, из-за того что запись ведется транзакционно... я тут сильно не вникал, но суть в том что файловые системы не рушатся, если zfs дергать перезагрузками, в отличие от обычного тупого writwback.
Я думаю, по этому, разработчики сосредоточились на таком режиме работы: мелкие блоки и метадата пишутся на SSD, синхронный трафик пишется в slog, а не синхронный пишется большими кусками раз в несколько секунд. А чтобы диски не тупили при сбросе на них крупных блоков, планировщик как-то оптимизирует это процесс, а ещё больше улучшает ситуацию со случайным чтением SSD-кэш.
При нехватке iops, преполагается маштабировать их за счет:
- размера кэша
- количества vdev под основными данными, special и slog в зависимости от типа нагрузки.
И возможно, это так-же эффективно, а может быть и боле эффективно для такого гибридного хранилища, чем создавать что-то типа bcache, у которого другие недостатки, например он наверняка в разы более сильно насилует SSD, даже супер стойкий серверный, а при долговременной нагрузке больше чем могут вывезти диски, по идее должны переполнятся SSD.
Про суперстойкость. У меня сейчас на серверных накопителях после пары лет работы под базами данных, где 10% износа, где 20%. Недавно запустил одну проблемную нагрузку и она за сутки выела 1% износа на серверной SSD размером больше 1ТБ. Зато на оптайнах везде износ по 0-лям ))) Я думаю, можно не расписывать, что бытовые под такими нагрузками сразу же потеряют производительность, а через пару дней вообще подохнут.
Износ SSD - это отдельная тема, замечу лишь одно, есть такие виды нагрузки, которые заставляют контроллер SSD писать в память в сотни, а то и в 1000 раз больше чем сваливается на накопитель, но возможен и обратный эффект.
Подведу итог, zfs - это проверенное практикой решение, рассчитанное на большие объемы, большое количество потоков, более-менее равномерно не прекращающуюся нагрузку, которая на практике встречается часто в промышленной эксплуатации. bcache надо изучать, учиться его готовить. Я конечно, этим займусь, надо сравнить.
Для меня не маловажной особенностью zfs являются ещё и снимки для тотального, быстрого и робастого бекапа.