Расширение алгоритма сжатия в библиотеке LZ4 для работы с разрывными буферами блочного уровня ядра Linux
Новости
Расширение алгоритма сжатия в библиотеке LZ4 для работы с разрывными буферами блочного уровня ядра Linux
Аннотация
Для экономии дискового пространства в системах хранения данных применяется сжатие без потерь. В блочном уровне ядра операционной системы Linux данные запросов ввода-вывода (I/O) хранятся в виде массива структур, именуемых векторами блочного I/O запроса. Каждый вектор хранит непрерывный фрагмент данных, а совокупность векторов образует разрозненный в памяти буфер. Наилучшая степень сжатия достигается при обработке всего объёма данных запроса единым потоком. Существующая реализация алгоритма сжатия LZ4 в ядре требует, чтобы переданные буферы являлись непрерывными в виртуальной памяти. Следовательно, для получения максимального сжатия необходимо скопировать данные запроса в отдельный достаточно большой буфер, выделенный заранее. В данной работе мы предлагаем метод, позволяющий сжимать данные запроса в блочном уровне единым потоком, без выделения дополнительной памяти и копирования. Предложенное решение модифицирует реализацию LZ4 в ядре Linux с применением специализированных итераторов для обработки данных I/O. Проведено сравнение разработанного подхода с двумя альтернативными стратегиями использования LZ4 в блочном уровне: копированием в отдельный буфер и сжатием каждого вектора отдельно. Эксперименты показали, что модифицированный алгоритм обеспечивает лучшую степень сжатия, наравне с подходом на основе копирования, по сравнению с которым потребляет примерно вдвое меньше памяти. Представленный подход показывает наименьшие затраты по памяти, на уровне подхода с отдельным сжатием векторов. Недостатком предложенного решения является пропускная способность: она оказывается в 2–6 раз ниже, чем у других рассмотренных подходов. Результаты профилирования показывают, что снижение производительности связано с существенным ростом числа выполняемых инструкций – до 10 раз. Явных узких мест в представленном алгоритме выявлено не было. Для повышения быстродействия в первую очередь необходимо упростить вычислительную логику алгоритма. Результаты исследования показывают, что предложенный метод лучше подходит для фонового сжатия и сжатия в средах с ограниченным объёмом оперативной памяти.
Ключевые слова
Издание
Труды Института системного программирования РАН, том 38, вып. 6, часть 1, 2026, стр. 279-298.
ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).
DOI: 10.15514/ISPRAS-2026-38(6)-18
Для цитирования
Полный текст статьи в формате pdf (на английском)
Вернуться к содержанию тома