Der Linux-Entwickler Usama Arif hat eine Ineffizienz im Zstd-Dekomprimierungscode des Btrfs-Dateisystems entdeckt und behoben, was zu Leistungsverbesserungen führt. Der Fix, der für die Aufnahme in den Linux 7.4 Kernel-Zyklus vorgesehen ist, reduziert redundantes Datenbeschreiben während der Dekomprimierung.
Derzeit schreibt der Btrfs Zstd-Dekomprimierungspfad jedes gelieferte Byte zweimal. Laut Arif „gibt zstd_decompress_bio() zstd einen Scratch-Buffer in Sektorgröße und btrfs_decompress_buf2page() kopiert dann den Teil, der mit dem gelesenen Bio überlappt, in die Ziel-Folios. Jedes gelieferte Byte wird zweimal geschrieben.“ Die vorgeschlagene Lösung umgeht diese Duplizierung, indem sie den Ausgabepuffer pro Streaming-Aufruf auswählt und `zstd_map_dest()` verwendet, um das Ziel direkt an den Page-Cache zu mappen.
Tests zeigen eine Reduzierung der sequentiellen Lesezeit um 7,8 % mit 4K-Sektorgrößen, 3,6 % mit 16K-Sektoren und 6,8 % mit 64K-Sektoren. Auch zufällige 4K-Lesevorgänge zeigten eine Verbesserung von etwa 3 % bei Verwendung von Btrfs mit aktivierter Zstd-Kompression. Der Patch befindet sich derzeit im „for-next“-Branch und wird voraussichtlich in der Linux 7.4 Kernel-Version enthalten sein, die für Oktober geplant ist. Die Entwickler hoffen auch, weitere Zstd-Kernel-Verbesserungen in derselben Version einzubeziehen.
Originale Berichterstattung lesen
💬 Kommentare
📜 Kommentar-Richtlinie