Инструменты8 октября 2026 г., 00:18 МСК🤖 Auto

CRAM от Meta: сжатие в RAM со скоростью DRAM и ускорение до 452x

Команда Meta представила CRAM — новую технологию сжатия памяти в Linux, которая работает полностью в оперативной памяти, избегая свопирования и обеспечивая ускорение чтения до 452 раз по сравнению с ZRAM.

Баннер новости 9151

Суть прорыва: CRAM вместо ZRAM

Исследователи из Meta во главе с Грегори Прайсом (Gregory Price) представили новую архитектуру сжатия памяти для Linux, названную CRAM. В отличие от существующих решений ZRAM и zswap, которые функционируют как слой подкачки (swap), CRAM хранит сжатые данные непосредственно в оперативной памяти, обрабатывая их как обычную RAM. Это позволяет избежать накладных расходов на свопирование и использовать нативные механизмы управления памятью Linux, включая миграцию и ballooning.

Ключевая идея разработчиков заключается в том, что основная потеря производительности при сжатии памяти происходит не из-за вычислений компрессии, а из-за самих сбоев страниц (page faults) и взаимодействия со свопом. CRAM использует приватный узел NUMA (виртуальный CPU) для управления аллокациями, что позволяет системе продолжать использовать все семантики памяти без имитации блочного устройства.

Результаты бенчмарков: 452x ускорения

Тестирование показало экстремальные различия в производительности между CRAM и традиционным ZRAM. Поскольку CRAM обеспечивает доступ к данным на уровне кэш-линий (cacheline/byte access) с аппаратно-ускоренной компрессией, чтение происходит практически на скорости DRAM. На графике с логарифмической шкалой разница выглядит как пропасть: в худшем случае CRAM выполняет 489 миллионов операций в секунду, тогда как ZRAM — всего 1,1 миллиона.

Метрика ZRAM CRAM Ускорение
Чтение (оптимистичный сценарий) 1.1 млн оп/с 489 млн оп/с до 452x
Чтение/Запись (20% записей) Базовый уровень В 5.4 раза быстрее 5.4x
Механизм хранения Swap-слой (блочное устройство) Полностью в RAM (NUMA) —

Проблема «Яичного битка» и запись данных

Несмотря на впечатляющие цифры чтения, CRAM сталкивается с вызовами при записи. Прямая запись в сжатые данные невозможна, так как это приведет к повреждению данных. При записи требуется страница-сбой (page fault) и миграция folios обратно в исходный домен NUMA. В сценарии с 20% записей производительность падает, но все равно остается в 5.4 раза выше, чем у ZRAM.

Для предотвращения каскадных сбоев, которые в презентации называются «штормом яда» (poison storm), в CRAM внедрен механизм «Chicken Bit». Этот флаг сообщает ядру Linux прекратить попытки использования CRAM, если система занята управлением аллокациями, предотвращая зависания при нехватке ресурсов.

Перспективы внедрения

Проблема точного определения доступного логического объема RAM при динамическом сжатии остается областью активных исследований. Однако технология уже сейчас может принести пользу не только серверам Meta, но и устройствам с ограниченными ресурсами, таким как Steam Deck, где ZRAM используется по умолчанию. Ожидается, что после решения оставшихся вопросов реализации CRAM может быть интегрирован в основное ядро Linux.

Источник: Tom's Hardware ↗