summaryrefslogtreecommitdiff
path: root/3 Resources/Linux/FS/Writeback cache.md
diff options
context:
space:
mode:
authorJasper Ras <jras@hostnet.nl>2025-03-20 11:07:49 +0100
committerJasper Ras <jras@hostnet.nl>2025-03-20 11:07:49 +0100
commit80ccf68f55dbb70d7e5ed52ee95b3c9d1b6ce264 (patch)
tree93e28e85ab70052aa6f577998ec7dc1f413b40c0 /3 Resources/Linux/FS/Writeback cache.md
parent9642cd7ae24f0ba79ce5647c709b35ae8f06a285 (diff)
vault backup: 2025-03-20 11:07:48
Diffstat (limited to '3 Resources/Linux/FS/Writeback cache.md')
-rw-r--r--3 Resources/Linux/FS/Writeback cache.md36
1 files changed, 36 insertions, 0 deletions
diff --git a/3 Resources/Linux/FS/Writeback cache.md b/3 Resources/Linux/FS/Writeback cache.md
new file mode 100644
index 0000000..03917bb
--- /dev/null
+++ b/3 Resources/Linux/FS/Writeback cache.md
@@ -0,0 +1,36 @@
+---
+tags:
+ - linux
+ - qemu
+ - filesystem
+references:
+ - https://avidandrew.com/understanding-disk-cache-writeback-ext4.html
+ - https://docs.kernel.org/admin-guide/sysctl/vm.html#dirty-expire-centisecs
+---
+normal: write() -> cache (multiple layers) -> disk
+
+# Physical server write cache
+![[physical_write_cache.png]]
+
+Page cache -> RAM
+
+Journal -> ensures data is fully written before the transaction is considered complete.
+`commit` mount option -> flushes cache to disk every x seconds (configurable), ==default = 5.==
+`barrier` mount option -> enables the ordering of groups of writes, controller ensures writes before barrier are written before writes after barrier. ==Default = 1==
+
+`commit` + dirty_expire_centisecs [2] ~ automatic persisting of data.
+
+If we call `sync`, `fsync` or `fdatasync` ourselves our data is forced on-disk right away by the kernel, no need to wait for commit + dirty_expirty_centisecs.
+
+# VM Write cache
+ Guest has its own page cache
+ ![[vm_write_cache.png]]
+
+QEMU/KVM options for disk caches:
+- Writeback -> write complete if in host page cache; guest required to flush for integrity.
+- Writethrough -> write complete if committed to disk; guest no need to flush.
+- None -> Equivalent to direct access to host disk. Guest needs to flush.
+- Unsafe -> eq writeback but flush ignored. Performance.
+- Directsync -> writethrough but without host page cache.
+
+Safe if guest uses `commit` and `barrier` and therefore `fdatasync` syscalls on a recurring basis. \ No newline at end of file