Новая технология сжатия памяти в Linux оказалась в 452 раза быстрее ZRAM
Инженеры Meta* представили CRAM – новый подход к сжатию оперативной памяти в Linux. Технология полностью обходится без механизма подкачки – сжатые данные остаются в ОЗУ, и система работает с ними как с обычной памятью, а не как с блочным накопителем.
По данным разработчиков, на операциях чтения CRAM опережает популярное решение ZRAM до 452 раз.
Идея сжимать содержимое ОЗУ по аналогии с архивацией файлов давно реализована в большинстве операционных систем. В Linux самыми распространёнными вариантами остаются zswap и ZRAM. Оба механизма работают на уровне подкачки (swap), то есть система считает сжатую область местом для выгрузки страниц, а не частью рабочей памяти.
Концепцию CRAM разработали Грегори Прайс и его команда в Meta. В основе лежит простое наблюдение – основные потери производительности при работе со сжатой памятью связаны не с самой компрессией, а со страничными сбоями (page fault) и логикой подкачки. На этом фоне затраты на сжатие минимальны, и команда решила создать аналог ZRAM, который целиком находится в памяти.
CRAM не притворяется блочным накопителем и вместо этого использует приватный узел NUMA. Архитектура NUMA (неоднородный доступ к памяти) делит память на узлы, привязанные к процессорам. В случае CRAM узел по сути представляет собой "призрачный" процессор без вычислительных ядер.
Такой подход позволяет ядру Linux управлять сжатой памятью привычными инструментами, включая миграцию страниц и балунинг (ballooning). Разработчики не изобретали новую подсистему, а задействовали механизмы, которые уже существуют в ядре. Это и дало резкий прирост скорости, особенно при чтении.
Сжатие памяти выглядит простой задачей только на первый взгляд. Степень компрессии сильно зависит от характера данных: массивы нулей сжимаются идеально, а уже сжатая информация практически не уменьшается. Отсюда возникает вопрос, сколько "логической" памяти доступно системе, если часть её сжата, и как заранее понять, что она заканчивается.
Окончательного ответа CRAM пока не даёт. В материалах презентации эта задача обозначена как нерешённая и требующая дальнейших исследований. Для защиты от худших сценариев предусмотрен Chicken Bit ("куриный бит"), который велит ядру прекратить попытки использовать CRAM, пока идёт управление выделением памяти.
Этот механизм предотвращает каскадные сбои, которые в презентации назвали "ядовитым штормом" (poison storm). Такая ситуация возникает, когда поток записи опережает способность CRAM размещать данные.
CRAM хранится в ОЗУ и обрабатывается как ОЗУ с полным доступом на уровне кеш-линий и отдельных байтов, так что чтение происходит почти без задержек. Дополнительные затраты связаны только с декомпрессией, которая выполняется аппаратно. По словам создателя, в результате CRAM "работает на скорости DRAM".
Результаты тестов выглядят так:
в режиме только чтения даже в худшем случае CRAM выполняет 489 млн операций в секунду против 1,1 млн у ZRAM
максимальный прирост при чтении достигает 452 раз
при доле операций записи 20%, худшем из протестированных сценариев, CRAM быстрее ZRAM в 5,4 раза
График в презентации построен в логарифмической шкале, и визуально разрыв кажется меньше реального. Падение скорости при записи объясняется тем, что изменять сжатые данные напрямую нельзя, иначе они будут повреждены. При каждой записи системе приходится обрабатывать страничный сбой и переносить фолио (folio, группы страниц памяти) обратно в исходный узел NUMA.
Даже с учётом этого ограничения пятикратное ускорение остаётся значительным результатом. Технологию представили на конференции Linux Plumbers Conference в Праге. Подробности стали известны из слайдов на сайте мероприятия, на которые первым обратил внимание ресурс Phoronix.
Очевидная целевая платформа разработки – крупные серверы Meta. При этом ZRAM и zswap применяются во всей экосистеме Linux, вплоть до таких ограниченных по ресурсам девайсов, как Steam Deck от Valve, а многие дистрибутивы включают один из этих механизмов по умолчанию. Если оставшиеся вопросы реализации удастся решить, CRAM может попасть в основное ядро Linux и ускорить работу подобных систем.
* – Meta признана в РФ экстремистской и запрещена
- Дефицит DRAM продлится 10 лет: глава ADATA не видит причин говорить об ИИ-пузыре
- Инженер Valve объяснил, почему в Steam Machine так сложно заменить оперативную память
- Глава SK hynix предупредил, что дефицит памяти может продлиться дольше 2030 года