Jak je to s tou databází, vypnutím COW a snapshoty? Rychlé snapshoty samozřejmě závisí na COW – znamená to, že když udělám snapshot, bude btrfs příznak vypnutí COW ignorovat? Nebo mi vůbec nedovolí snapshot na oddílu přimountovaném s vypnutým COW udělat? Nebo (to by byla nejhorší možnost) to btrfs vůbec neřeší a s vypnutým COW bude klidně přepisovat data ve snapshotu?
Ano, to je snad jediný případ. U většiny filesystémů stejně nemáte možnost rozumně fragmentaci ovlivnit a nastavovat databázi podle "situace na discích" je zbytečně komplikované. Filesystem (a volume manager) je zde od toho, aby znal topologii disků a určoval, jak je nejlepší zapisovat. Databáze má být od tohoto dilematu odstíněná jak jen to jde. Ve skutečnosti databáze neumějí předejít fragmentaci na discích.
ZFS tento gap řeší pomocí ARC a ZIL (Adaptive Read Cache a ZFS intent log). Pokud je nenastavíte, ano, přicházejí nevýhody. Pokud je nastavíte, přicházejí výhody. Třeba si myslím, že provozovat ZFS (analogicky Btrfs) bez ARC/ZIL je případ bez use case. Nedovedu si moc představit, jaké výhody má okleštěné ZFS (Btrfs) oproti tradičnímu filesystému. Databáze bez CoW, snapshoty, které plně a výkonně nezajistí atomicitu - no pěkně děkuju, to mi přijde naprosto vyhovující Ext4 a jediné, v čem se přizpůsobím je způsob archivace a zálohování.
Ono se vůbec vymýšlejí kombinace bez use cases.
To ano, ale CoW má zanedbatelnou režii. Zápis stránky (ať už se jedná o existující nebo novou) trvá stejně s CoW, jako bez něj. Jediný rozdíl je v napojení zapsané stránky - a ta režie je (měla by být) absolutně zanedbatelná. Na flash médiích se stejně nepřepisuje stejný fyzický blok.
Pokud má existovat nějaký význam CoW, tak je právě v tom, že aplikace by měly (postupně, volitelně) přestat řešit starost o zápis dat a přenechat to na filesystému. Vypínání CoW jde naprosto proti velké výhodě Btrfs či ZFS. Jak Filip správně poznamenal, ztratí filesystem možnost inteligentně (s malou režií) řešit snapshoty, takže další ztráta proklamované výhody.
Pokud má něco výkonnostní výhodu, pak je to nastavit správnou velikost stránky na filesystému vs. databáze. Vypínat CoW je špatně.
Ta nezanedbatelná režie asi neni tak nezanedbatelná, jinak by se nikdo neobtěžoval to vypnout :)
Porovnání různých fs např https://www.slideshare.net/fuzzycz/postgresql-on-ext4-xfs-btrfs-and-zfs kolem strany 28 nebo novější ale s méně detaily https://www.phoronix.com/scan.php?page=article&item=linux-50-filesystems&num=3
Osobně bych čekal (spekulace) že v tom bude hrát roli i velmi častý fsync (na systémech s hodně zápisy), který zabrání optimalizacím které se mohou uplatnit při běžné práci s běžnými soubory.
Navíc dle https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation může při velmi častém "random write" dojít k výrazné fragmentaci. Což hádám také nemusí být úplně dobré.
Jinak podle faq umí btfrs snapshoty i při vypnutém CoW, prostě si CoW pro potřeby snapshotu dočasně povolí (dle nějakých informací do prvního zápisu).
Nadruhou stranu, bez CoW zřejmně nefungují checksumy dat, což může být dost podstatná nevýhoda. Zejména pokud bych chtěl snapshoty posílat jinam jako zálohu - předpokládám že pokud pošlu snapshot tak na druhé straně budou soubory taky označeny jako nodatacow?.
I když na druhou stranu, živou databázi bych snapshotem nezálohoval, sice to v zásadě jde - např https://www.postgresql.org/docs/12/backup-file.html ale jen když vám nevadí že se to bude chovat jako po tvrdém restartu - udělá se replay wal log. A navíc s omezením že db může být jen na jednom fs :(
Na zkoušení btrfs se už dlouho chystám, zatím spíš hledám informace. Třeba mne tato série článků na root navnadí :)
Dovolil bych si nesouhlasit. Krásně je výkonnostní dopad vidět na virtuálních discích virtualboxu. Se zapnutým CoW klesá výkon virtuální mašiny až se dostane do stavu, kdy v podstatě zamrzá (čekání na IO). S vypnutím CoW se virtuální mašina začne chovat standardně. CoW se dá vypnout pro konkrétní soubor.
19. 2. 2020, 11:12 editováno autorem komentáře