CRAM для Linux прискорив читання стиснутої пам’яті до 452 разів

CRAM для Linux прискорив читання стиснутої пам’яті до 452 разів

Новий механізм CRAM для Linux зберігає стиснені дані в RAM і в тестах прискорив читання до 452 разів проти ZRAM.

Для Linux представили підхід до стиснення оперативної пам’яті CRAM, який зберігає стиснені дані в RAM і дає змогу працювати з ними за стандартною семантикою пам’яті, а не як із блочним пристроєм. За даними BBC News, у тесті з операціями лише читання CRAM продемонстрував до 452 разів вищу продуктивність, ніж ZRAM.

 

Як працює CRAM

 

Концепцію CRAM розробили Грегорі Прайс і його команда в Meta. У Linux для стиснення пам’яті часто застосовують ZRAM і zswap, однак обидва механізми пов’язані зі шаром підкачування пам’яті. CRAM має інший принцип: він не використовує swap, а розміщує стиснені дані безпосередньо в оперативній пам’яті.

Замість емуляції блочного пристрою CRAM використовує приватний NUMA-вузол. Це дозволяє Linux застосовувати звичні механізми керування пам’яттю, зокрема міграцію та ballooning. Автори підходу вважають, що основну втрату продуктивності в традиційних рішеннях створює не саме стиснення, а обробка page fault і поведінка механізмів swap.

 

Результати та обмеження

 

У наведеному тесті CRAM у найгіршому випадку виконував 489 млн операцій за секунду проти 1,1 млн у ZRAM. За наявності запису перевага зменшується: за частки записів 20% CRAM був у 5,4 раза швидшим за ZRAM. Для запису дані потрібно повернути до початкового NUMA-домену, оскільки запис безпосередньо до стиснених даних може їх пошкодити.

У проєкті також передбачено механізм Chicken Bit: він тимчасово забороняє Linux використовувати CRAM, поки система керує розподілом пам’яті. Це має запобігати каскадним збоям, якщо швидкість запису перевищує можливості CRAM з виділення пам’яті. Водночас питання визначення доступного обсягу логічної пам’яті за різного ступеня стиснення даних ще залишається напрямом подальшої розробки.