zswap
Разработчик(и) | Сет Дженнингс и другие |
---|---|
Первоначальный выпуск | 2 сентября 2013 г | (Linux 3.11)
Написано в | С |
Операционная система | Линукс |
Тип | Возможности ядра Linux |
Лицензия | GNU GPL |
Веб-сайт | ядро |
zswap — это функция ядра Linux , которая обеспечивает сжатый обратной записи кэш для замененных страниц в качестве формы сжатия виртуальной памяти . Вместо перемещения страниц памяти на устройство подкачки, когда их необходимо выгрузить, zswap выполняет их сжатие , а затем сохраняет их в пул памяти , динамически выделяемый в системной оперативной памяти . Последующая обратная запись на фактическое устройство подкачки откладывается или даже полностью исключается, что приводит к значительному сокращению операций ввода-вывода для систем Linux, требующих подкачки; компромиссом является необходимость дополнительных циклов ЦП для выполнения сжатия. [ 1 ] [ 2 ] [ 3 ]
В результате уменьшения количества операций ввода-вывода zswap дает преимущества различным устройствам, использующим флэш-память , включая встроенные устройства , нетбуки и аналогичные аппаратные устройства низкого уровня, а также другим устройствам, использующим твердотельные накопители (SSD). для хранения. Флэш-память имеет ограниченный срок службы из-за своей природы , поэтому отказ от ее использования для предоставления пространства подкачки предотвращает ее быстрый износ. [ 4 ]
Внутренности
[ редактировать ]zswap интегрирован в остальную часть виртуальной памяти подсистемы ядра Linux с использованием API , предоставляемого frontswap , который представляет собой механизм ядра Linux, абстрагирующий различные типы хранилищ, которые можно использовать в качестве пространства подкачки. [ 5 ] В результате zswap работает как внутренний драйвер для Frontswap, предоставляя то, что внутренне видимо как устройство псевдо-ОЗУ. Другими словами, API frontswap позволяет zswap перехватывать страницы памяти во время их выгрузки, а также перехватывать ошибки страниц для уже выгруженных страниц; доступ к этим двум путям позволяет zswap действовать как сжатый кеш обратной записи для замененных страниц. [ 1 ] [ 6 ]
Внутри zswap использует модули ядра Linux сжатия, предоставляемые криптографическим API , что позволяет, например, разгружать задачи сжатия с основного процессора с помощью любого из аппаратных ускорителей сжатия , поддерживаемых ядром Linux. Выбор желаемого модуля сжатия может выполняться динамически во время загрузки через значение параметра загрузки ядра. zswap.компрессор ; если не указано, выбирается сжатие Лемпеля-Зива-Оберхумера (LZO). Начиная с версии 3.13 ядра Linux, zswap также необходимо явно включить, указав значение 1 для параметра загрузки ядра zswap.включено . [ 1 ] [ 2 ] [ 4 ]
Максимальный размер пула памяти, используемого zswap, можно настроить с помощью sysfs параметр max_pool_percent , который определяет максимальный процент общей оперативной памяти системы, который может быть занят пулом. Пул памяти не выделяется заранее до заданного максимального размера, а вместо этого увеличивается и уменьшается по мере необходимости. Когда в результате выполненной подкачки достигается настроенный максимальный размер пула или когда увеличение пула невозможно из -за нехватки памяти , подкачиваемые страницы вытесняются из пула памяти на устройство подкачки на последнем использованном ( ЛРУ) основе. Такой подход делает zswap настоящим кэшем подкачки, поскольку самые старые кэшированные страницы вытесняются на устройство подкачки, как только кеш заполняется, освобождая место для сжатия и кэширования новых замененных страниц. [ 1 ] [ 4 ] [ 7 ]
zbud — это специальный распределитель памяти, используемый внутри zswap для хранения сжатых страниц, реализованный как перезапись распределителя zbud, используемого zcache Oracle . [ 8 ] это еще одна реализация сжатия виртуальной памяти для ядра Linux. Внутри zbud работает, сохраняя до двух сжатых страниц (« приятелей », отсюда и название распределителя) на каждой странице физической памяти, что дает как преимущества из-за простого объединения и повторного использования освобожденного пространства, так и недостатки из-за возможного более низкого использования памяти. Однако из-за своей конструкции zbud не может выделить больше места в памяти, чем первоначально было бы занято несжатыми страницами. [ 3 ] [ 9 ]
История
[ редактировать ]И zswap, и zbud были созданы Сетом Дженнингсом. Первое публичное объявление было сделано в декабре 2012 года, а разработка продолжалась до мая 2013 года, после чего кодовая база достигла своей зрелости, хотя все еще имела статус экспериментальной функции ядра. [ 10 ] [ 11 ]
zswap (вместе с zbud) был объединен с основной веткой ядра Linux в версии ядра 3.11, выпущенной 2 сентября 2013 года. [ 4 ] [ 12 ]
Начиная с версии 3.15 ядра Linux, выпущенной 8 июня 2014 г., zswap правильно поддерживает несколько устройств подкачки. [ 13 ] [ 14 ]
Начиная с версии 6.8 ядра Linux, выпущенной 11 марта 2024 года, zswap поддерживает отключение обратной записи для определенных контрольных групп. [ 15 ]
Альтернативы
[ редактировать ]Одной из альтернатив zswap является zram , который предоставляет аналогичный, но все же отличный от ядра Linux механизм «загрузки сжатых страниц в ОЗУ».
Основное отличие состоит в том, что zram предоставляет сжатое блочное устройство, использующее ОЗУ для хранения данных, которое действует как обычное и отдельное устройство подкачки.
Для сравнения, zswap действует как кэш в оперативной памяти для устройств подкачки. Это обеспечивает zswap механизмом вытеснения менее используемых подкачиваемых страниц, которого у zram не было до появления CONFIG_ZRAM_WRITEBACK в ядре версии 4.14. Однако в результате его конструкции для использования zswap требуется как минимум одно уже существующее устройство подкачки. [ 16 ]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с д Сет Дженнингс (12 февраля 2013 г.). «Сжатый кэш подкачки zswap» . LWN.net . Проверено 22 января 2014 г.
- ^ Jump up to: а б Дженифер Хоппер (11 декабря 2012 г.). «Новая функция сжатия zswap в Linux» . ИБМ . Проверено 31 января 2014 г.
- ^ Jump up to: а б Майкл Ларабель (11 июля 2013 г.). «Zswap интегрирован в ядро Linux 3.11» . Фороникс . Проверено 5 февраля 2014 г.
- ^ Jump up to: а б с д «Документация по ядру Linux: Documentation/vm/zswap.txt» . ядро.орг . 22 ноября 2013 года . Проверено 22 января 2014 г.
- ^ Дэн Магенхаймер (22 апреля 2010 г.). «Frontswap [ОБНОВЛЕНИЕ 0/4] (было Transcendent Memory): Обзор» . gmane.org . Проверено 23 декабря 2014 г.
- ^ Джонатан Корбет (4 мая 2010 г.). «Очистить кэш и Frontswap» . LWN.net . Проверено 26 марта 2014 г.
- ^ «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: zswap: добавить в mm/» . ядро.орг . 11 июля 2013 года . Проверено 5 февраля 2014 г.
- ^ Дэн Магенхаймер (29 марта 2012 г.). «Zcache и RAMster (да, и frontswap тоже): обзор и некоторые тесты» (PDF) . oss.oracle.com . п. 12 . Проверено 19 августа 2015 г.
- ^ «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: zbud: добавить в mm/» . ядро.орг . 11 июля 2013 года . Проверено 5 февраля 2014 г.
- ^ «[ИСПРАВЛЕНИЕ 0/8] zswap: сжатое кэширование подкачки» . gmane.org . 11 декабря 2012 года . Проверено 5 января 2014 г.
- ^ «[PATCHv10 0/4] zswap: сжатое кэширование подкачки» . gmane.org . 8 мая 2013 года . Проверено 5 января 2014 г.
- ^ «Ядро Linux 3.11, раздел 9. Zswap: сжатый кеш подкачки» . kernelnewbies.org . 2 сентября 2013 года . Проверено 22 января 2014 г.
- ^ «Ядро Linux 3.15, Раздел 4. Управление памятью» . kernelnewbies.org . 8 июня 2014 года . Проверено 15 июня 2014 г.
- ^ «Дерево исходного кода ядра Linux: kernel/git/torvalds/linux.git: mm/zswap: поддержка нескольких устройств подкачки» . ядро.орг . 7 апреля 2014 года . Проверено 15 июня 2014 г.
- ^ «zswap: memcontrol: реализовать отключение обратной записи zswap · torvalds/linux@501a06f» . Гитхаб .
- ^ Дэн Магенхаймер (3 апреля 2013 г.). «Сжатие памяти внутри ядра» . LWN.net . Проверено 8 марта 2014 г.