5 października 2026 roku Gregory Price z Meta zaprezentował podczas Linux Plumbers Conference testowaną implementację usługi Compressed RAM (CRAM) dla Linuksa, oznaczoną jako mm/cram.c. Projekt ma łączyć kompresję wspomaganą sprzętowo z dostępem do skompresowanej pamięci na poziomie bajtów i linii pamięci podręcznej. Opis sesji konferencyjnej przedstawia też wyniki testów wydajności i poprawności obsługi pamięci podręcznej stron.
Jak opisano dostęp do skompresowanej pamięci
W CRAM kompresję ma wykonywać sprzęt, a pamięć ma pozostać dostępna na poziomie bajtów i linii pamięci podręcznej. Według opisu sesji może też pozostawać odwzorowana w tablicach stron i obecna w pamięci podręcznej stron — bez błędu dostępu przy odczycie, który wymagałby programowej dekompresji.
To właśnie ten model dostępu odróżnia CRAM w opisie sesji od ZRAM i Zswap. Nie chodzi wyłącznie o skompresowanie danych: ważne jest również to, jak procesor i jądro Linuksa mogą się do nich odwoływać.
Co pokazały testy i porównania
Abstrakt sesji określał wydajność CRAM w testach TAOBench i FIO jako zbliżoną do wydajności DRAM. Opisywał też testy poprawności pamięci podręcznej stron przeprowadzone z większością systemów plików z głównego drzewa jądra.
Na slajdzie z prezentacji podano, że w pokazanych próbach przepustowość zapisu CRAM była od 5 do 37 razy większa niż ZRAM. Wynik dotyczył konkretnych obciążeń: skośnego rozkładu Zipfa 0,99 oraz obciążenia losowego o rozkładzie równomiernym. To rezultat tych prezentowanych przypadków, a nie ogólna miara wydajności dla każdego zastosowania.
Prezentacja zestawiała też odczyt danych tylko do odczytu z wydajnością DRAM. Wykres sygnalizował jednak problem z zatrzymaniem podczas odzyskiwania pamięci (reclaim stall), który wpływał na wynik Zswap. To ogranicza użyteczność tego konkretnego porównania.
Obszary jądra związane z CRAM
Obsługa usługi wiąże się z kilkoma mechanizmami zarządzania pamięcią: pamięcią anonimową, pamięcią podręczną stron, odzyskiwaniem i przenoszeniem stron, balonowaniem pamięci, raportowaniem wolnych stron, warstwowaniem pamięci oraz kontrolowanym przydziałem NUMA. Abstrakt sesji podawał, że wszystkie poza jedną z wymaganych funkcji istniały już w jądrze Linuksa albo istniały w nim wcześniej.