NVMe Async Buffering - is there a cache for that?

The key takeaway is that all writes are cached in memory, but sync writes are also written to the non-volatile SLOG.

I’ve written a detailed resource with some examples of this.

With regards to the tunables, I still have yet to write the resource on that.

Extensive, extreme, or uninformed messing with the tunables is a bad idea. Going from 4GB to 4TB on the zfs_dirty_data_max is likely to result in Novel And Unexpected Behavior - but slightly adjusting it with the knowledge that it will come at the cost of potential read performance (by evicting existing ARC to make room for inbound) may be worthwhile, if you have something that would fit inside a slightly larger burst-write window.

But if it’s larger than that, like a terabyte-sized disk image coming off of FTK, make the NVMe drive a separate pool instead - and if you need to back up the contents to disk, do that with ZFS replication, file-level with an app like Syncthing, or a scripted server-side copy upon completion.

4 Likes