Суть прорыва: 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 ↗
