The ZIL is specifically not a cache. It can have cache-like behavior in certain cases, particularly when paired with fast SLOG devices, but that's incidental and not its purpose. Its purpose is to ensure integrity and consistency.
Specifically, the writes to disk are served from RAM[1], the ZIL is only read from in case of recovery from an unclean shutdown. ZFS won't store more writes in the SLOG than what it can store in RAM, unlike a write-back cache device (which ZFS does not support yet).
[1]: https://klarasystems.com/articles/what-makes-a-good-time-to-...
Exactly, and it's even worse. By default ZFS only stores about 5 seconds worth of writes in the ZIL, so if you have a NAS with say a 10Gbe link that's less than 10GB in the ZIL (and hence SLOG) at any time.
> A real write cache would be awesome for ZFS.
Agreed. It's a real shame the write-back cache code never got merged, I think it's one of the major weaknesses of ZFS today.
So if you really wanted to, you could try looting code from there, though I believe Nexenta's implementation of that was either orthogonal or significantly different from the one that landed in OpenZFS...
[1] - https://github.com/Nexenta/illumos-nexenta/blob/release-5.3/...
[2] - https://github.com/Nexenta/illumos-nexenta/blob/release-5.3/...
So many people misunderstand the ZIL SLOG, including the guy you are responding to.
I think most posts on the internet about the ZIL SLOG do not explain it correctly and thus a large number of people misunderstand it.
There was some work done[1] on proper write-back cache for ZFS by Nexenta several years ago, but it seems it either stalled or there was a decision to keep it in-house as it hasn't made its way back to OpenZFS.
You are spreading incorrect information, please stop. You know enough to be dangerous, but not enough to actually be right.
I've benchmarked ZIL SLOG in all configurations. It doesn't speed up writes generally. It speeds up acknowledgements on sync writes only. But it doesn't act as a write through cache in my readings and in my testing.
What it does is it allows a sync acknowledgements to be sent once a sync write is written to the ZIL SLOG device.
But it doesn't actually use the ZIL SLOG for reading at all in normal operation, instead it uses the in-memory RAM to cache the actual write to the HDD-based Pool. Thus you are still limited to RAM size when you are doing large writes -- you may get acknowledges quicker on small sync writes, but your RAM limits the size of large write speeds because it will fill up and have to wait for it to be saved to the HDD to accept new data.
Here is more data on this:
https://www.reddit.com/r/zfs/comments/bjmfnv/comment/em9lh1i...
>While OpenZFS has excellent read caching via ARC and L2ARC, it doesn't enable NVMe write caching nor does it allow for automatic tiered storage pools (which can have NVMe paired with HDDs.)
Huh? What are you talking about? ZFS has had a write cache from day 1: ZIL. ZFS Intent Log, with SLOG which is a dedicated device. Back in the day we'd use RAM based devices, now you can use optane (or any other fast device of your choosing including just a regular old SSD).
https://openzfs.org/w/images/c/c8/10-ZIL_performance.pdf
https://www.servethehome.com/exploring-best-zfs-zil-slog-ssd...