W zmianach ext4 dla Linux 7.4-rc1 znalazła się opcjonalna ścieżka buforowanego wejścia i wyjścia oparta na iomap. Jest domyślnie wyłączona, a raportowane wyniki zależą od wzorca zapisu: w testach dużych zapisów przepustowość rosła, natomiast przy zapisach 1 KiB z fsync spadła.

Co zmienia iomap w ext4

Ścieżka dotyczy buforowanych operacji wejścia i wyjścia zwykłych plików. Aby ją włączyć, trzeba użyć opcji montowania buffered_iomap; gdy nowa ścieżka nie może obsłużyć operacji, ext4 wraca do dotychczasowej.

Theodore Ts’o wysłał pull zmian dla Linux 7.4-rc1 22 października 2026 r. Seria Zhang Yi obejmowała 31 poprawek, a Linus Torvalds scalił pull 26 października.

Iomap pobiera mapowania zakresów pliku na pamięć masową. Większe zakresy mogą ograniczyć liczbę wywołań potrzebnych do uzyskania mapowania, co wyjaśnia projektowe uzasadnienie nowej ścieżki. Sam mechanizm nie gwarantuje jednak takiego samego wzrostu szybkości w każdym obciążeniu.

Wyniki FIO zależały od sposobu zapisu

W testach FIO przypisanych Zhang Yi wyniki różniły się zależnie od rozmiaru zapisu i warunków. Pomiary wykonano na maszynie wirtualnej z czterema rdzeniami i blokowym urządzeniem opartym na pamięci.

Scenariusz zapisuext4 z buffer heads (MiB/s)ext4 z iomap (MiB/s)Zmiana raportowana w teście
1 MiB, zapis do page cache4 2955 780+35%
64 KiB, zapis z działającym w tle writeback734957+30%
64 KiB, zapis bez cache415698+68%
1 MiB, zapis bez cache1 4042 883+105%
1 KiB, fsync po każdym zapisie0,710,60−15%

Największa zgłoszona różnica dotyczyła zapisu 1 MiB bez cache. To wynik konkretnego scenariusza, nie ogólny wzrost wydajności ext4. Test z zapisami 1 KiB i fsync po każdym z nich pokazał spadek przepustowości. Wybór ścieżki ma więc znaczenie zależne od obciążenia.

Wykluczenia dotyczą montowania i poszczególnych plików

Pull dla ext4 wymienia przypadki, których nowa ścieżka nie obsługuje: defragmentację online, dane inline, fs-verity, fscrypt, inode’y bez extents oraz tryb data=journal. Inode to struktura przechowująca metadane pliku; extents opisują zakresy bloków zajmowanych przez plik.

Te warunki nie są wszystkie tego samego rodzaju. data=journal jest opcją montowania, natomiast szyfrowanie, weryfikacja integralności, dane inline i extents są reprezentowane przez atrybuty inode. Dokumentacja ext4 wskazuje FS_IOC_GETFLAGS jako interfejs do odczytu flag inode. Defragmentacja online jest operacją, a nie trwałym atrybutem pliku.

data=ordered to odrębna kwestia

Tryb data=ordered zapisuje bloki danych przed zatwierdzeniem powiązanych metadanych. Pull mówi osobno, że inode obsługiwane przez ścieżkę buffered iomap nie korzystają z tego trybu. Zhang Yi opisał też zastrzeżenie dotyczące końcowych danych pliku w razie utraty zasilania.