CRAM

Meta предложила читать сжатую память без swap — CRAM выиграла до 452× в тесте

Операционные системы

Инженер Meta Грегори Прайс представил CRAM — экспериментальный механизм Linux для работы с аппаратно сжатой памятью. В тесте только на чтение он показал до 452-кратного преимущества над ZRAM. Но у результата есть существенное условие: тестовые конфигурации опирались на DRAM, чтобы отдельно измерить накладные расходы обработки обращений к вытесненным страницам.

Прайс показал разработку 5 октября на Linux Plumbers Conference 2026 в докладе A Compressed RAM Service. CRAM рассчитана на устройства, которые выполняют сжатие аппаратно и позволяют обращаться к данным как к памяти. Это требует поддержки со стороны оборудования; обычная установка патча не превращает любую RAM в такую систему.

ZRAM представляет сжатые данные как блочное устройство, которое можно использовать для swap. Когда программе снова нужна вытесненная страница, ядро должно обработать page fault и вернуть её в доступную память. CRAM позволяет страницам оставаться отображёнными в адресном пространстве: при чтении этот путь не нужен. Главный выигрыш здесь даёт устранение обращения через swap, а не просто ускорение распаковки.

В сценарии равномерного случайного чтения на слайдах указаны около 489 млн операций в секунду для CRAM и 1,1 млн для ZRAM с алгоритмом zstd. Отдельный график обозначает отношение результатов как 452×; показанные значения округлены. Сравниваемым вариантам выделяли одинаковый объём физической памяти, а эталонной конфигурации DRAM — больше, чтобы весь набор данных помещался в неё. Эти измерения показывают выигрыш от организации доступа, но не устанавливают скорость реального устройства аппаратного сжатия.

Запись резко сокращает отрыв. При 20% записей в сценарии равномерного случайного доступа CRAM показала около 4,9 млн операций в секунду и преимущество над ZRAM в 5,4 раза. Каждая запись требует обработки page fault и переноса страницы обратно в обычную DRAM, тогда как чтение обходится без этого.

В основе реализации — приватный NUMA-узел: отдельная область памяти под управлением сервиса, исключённая из обычных выделений. Такой подход позволяет использовать миграцию страниц, динамическое изменение доступного объёма и механизмы вытеснения страниц памяти. В предложении также предусмотрена работа с файловым кэшем и уровнями памяти.

Остаётся проблема ёмкости. Разные данные сжимаются по-разному, поэтому заявленный логический объём может превышать то, что устройство способно вместить в конкретный момент. Механизм Chicken Bit позволяет драйверу запретить новые выделения памяти в CRAM. Это средство управления нагрузкой, а не решение всех вопросов учёта свободного места.

CRAM остаётся экспериментальной разработкой без объявленного срока включения в основное ядро Linux. Переносить результаты на обычные настольные ПК пока рано. Сравнение со zswap тоже требует осторожности: автор слайдов отметил постороннюю проблему с задержками освобождения памяти и назвал эти результаты не вполне корректными.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x