Novinky ve vývoji jádra Linux: rychlejší běh her na pomalých a starých PC, svižnější Btrfs i Ext4

Dnes
Doba čtení: 3 minuty

Sdílet

M.2 SSD
Autor: David Ježek, podle licence: CC BY-SA 4.0
M.2 SSD
Vylepšení subsystému IOmap a další optimalizace výkonu souborových systémů Ext4 a Btrfs, vylepšený scheduler vedoucí k viditelně lepšímu výkonu i pro stará PC, čištění kódu 32bitového času. Vše v rámci budoucíjádra Linux 7.3.

Čištění kódu 32bitového času v rámci jádra Linux 7.3

Linux 7.3 bude tou verzí jádra, která pročistí systém podpory času o zastaralou 32bitovou verzi. Tedy přesněji řečeno: Linux 7.3 se zbaví 32bit integer času a s ním i – již dávno spíš hypotetického – problému roku 2038.

V jádru najdeme Kconfig volbu při sestavení CONFIG_COMPAT_32BIT_TIME, kterou lze deaktivovat stará 32bitová systémová volání času. Takové nastavení ale pochopitelně má vést k rozbití funkčnosti aplikací, které na 32bit integer čas spoléhají což se nedělo: sestavení jádra bez 32bitové podpory nadále některé 32bit prvky byly sestaveny. Nyní přichází oprava, v rámci pull requestu vDSO pro budoucí jádro verze 7.3. Nové patche zajišťují, že funkce old time(),stime() a gettimeofday() využívající 32bit integer čas jsou kompletně vypnuty při sestavení jádra. Součástí jsou i specifická řešení pro konkrétní architektury ARM, PowerPC, MIPS, SPARC a x86 zajišťující správné respektování nastavení  COMPAT_32BIT_TIME.

Jak konstatuje Phoronix, většina linuxových distribucí ještě používá nastavení jádra CONFIG_COMPAT_32BIT_TIME=y, aby držely kompatibilitu s 32bitovými aplikacemi. Do roku 2038 zbývá něco přes 11 let.

Vylepšení subsystému IOmap

Jádro Linux 7.3 se zapíše na velmi dlouhý a stále pokračující seznam linuxových jader přinášejících optimalizace pro souborový systém Ext4. Předně nesmíme opomenout obecná vylepšení subsystému IOmap, kde byl dokončen přechod IOmap na iterátorový model využívající jediné zpětné volání iomap_next(), což umožňuje kompilátoru namísto dosud používaných nepřímých volání (indirect calls) vkládat volání přímá, tedy inline volání, z čehož v určitých úlohách benefitují souborové systémy jako Btrfs, XFS či Ext4 a další využívající IOmap (F2FS, NTFS/3 apod.). Další novinkou tohoto subsystému jsou Direct I/O pro menší operace čtení, kdy se eliminuje úzké hrdlo na velice rychlých discích jako NVMe PCIe 5.0 SSD.

Další optimalizace výkonu souborového systému Ext4

Další novinky pak míří do samotného Ext4. Theodore Ts'o konkrétně uvádí například podporu paralelních Direct I/O zápisů, kde Ext4 dosud více řešilo, jestli je bezpečné vyhnout se požadavku na zámek pro exkluzivitu zápisu. Obecně k těmto věcem lze poznamenat, že zatímco u pomalých HDD či obecně SATA zařízení či prvních generací PCIe SSD toto negativně na výkon v zápisu nedopadalo, moderní NVMe PCIe SS poslední generace mají tak vysoké hodnoty IOPS a zápisu, že právě ona nadměrná logika v kódu IOmap či souborového systému nyní může operace brzdit.

Dále tu pro Ext4 máme například lepší výkon ext4_mb_prefetch() ve více-blokovém alokátoru s použitím fallocate(), vývojáři dále provedli různé čistky v kódu, ve snaze vyhnout se jiným formám soft zámků či RCU stall conditions (Read-Copy-Update mechanismus jádra). Plus nechybí rozličné opravy chyb či vylepšení ve fungování žurnálu.

Optimalizace souborového systému Btrfs

Spoustu novinek pro Btrfs posouvá do jádra verze 7.3 správce David Štěrba ze SUSE. I Btrfs nově používá IOmap bounce buffer pro Direct I/O, namísto pomalejšího mechanismu s buffered I/O. Testy ukazují, že zatímco předchozí řešení dávalo Btrfs zhruba 50 % maximálního teoretického výkonu, s IOmap a přímými I/O je to 95 % teoretického maxima. Btrfs dále opouští používání lokálních LRU seznamů a XArray, což snižuje „byrokratickou zátěž“ operací a vede k násobným nárůstům výkonu v této oblasti. Vedle dalších vylepšení nechybí ani zde obvyklá várka oprav.

Školení Linux

Vylepšený scheduler vedoucí k viditelně lepšímu výkonu i pro stará PC

Do scheduleru, tedy plánovače procesů jádra míří řada patchů vylepšujících celkovou efektivitu běhu. Peter Zijlstra informuje o sadě patchů označované jako „flatten the pick“, která řeší dlouho existující neoptimální mechanismy a vysokou režii při plánování v rámci cgroups. Jádro bude od verze 7.3 nově používat místo hierarchické správy úloh v cgroups koncept jediné runqueue, což výrazně snižuje latenci a jitter při přepínání procesů. Jádro tak bude novými způsoby distribuovat zátěž na systém, bude lépe prioritizovat úlohy a rozkládat je na hybridních architekturách CPU s různými typy jader.

Nejvíce bychom měli efektivnější plánování pozorovat u her a na starých / pomalých PC. Vzorové měření jedné hry na stařičkém Intel Core i7–2600K (rok 2011) s grafikou AMD Radeon RX 580 (rok 2017) ukazuje nárůst hodnoty minimálního fps z 4,0 na 29,0 fps, průměrné fps z 47,5 na 59,2 fps a klesá i latence snímků ze zhruba 120 na 30 ms. Jinými slovy, tato konkrétní hra se tímto momentem stává plynule hratelnou, nicméně novinky ocení i majitelé Steam Decku či různých úsporných notebooků.

Autor článku

Příznivec open-source rád píšící i o ne-IT tématech. Odpůrce softwarových patentů a omezování občanských svobod ve prospěch korporací.