zram vs zswap vs zcache Конечное руководство: когда использовать какой

55
  1. Что, черт возьми, они? чем они отличаются (я написал свое понимание в ответе ниже)
  2. В системе Zswap, когда страница выгружается из zswap в реальный своп, сохраняется ли она в сжатом виде? (или это распаковано перед сохранением?, AFAICT это все еще сжато, но я не уверен)
  3. Каково текущее состояние zcache? это было очевидно удалено или кое-что в 3.11. Что это значит? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
staticd
источник
2
Ответ 2. В сообщении коммита четко указывается, что патчи (относящиеся к zcache) были удалены из 3.11, но будут включены в дерево main -mm.
Askb
1
@staticd Почему ты не принял свой ответ? Это очень хорошо!
Лео Леопольд Герц 준영
Когда страница извлекается из zswap (сжатого кэша подкачки), она _ распаковывается_ и помещается в резервное устройство подкачки по одной из следующих ссылок [ lwn.net/Articles/537422/] ниже ...
Cbhihe
( lwn.net/Articles/537422 - «Во время возобновленной обратной записи zswap распаковывает страницу ...»). @mmin ниже предполагает, что это может быть неэффективным или даже эксплуатируемой опасностью для сервера!
mwfearnley

Ответы:

2

Что касается 2., zswap, похоже, распаковывает страницы при обратной записи, подтверждая комментарий @ Cbhihe.

mm / zswap.c , строка 828:

/*
 * Attempts to free an entry by adding a page to the swap cache,
 * decompressing the entry data into the page, and issuing a
 * bio write to write the page back to the swap device.
 * ...
 */
static int zswap_writeback_entry(struct zpool *pool, unsigned long handle)
{
    ...

    case ZSWAP_SWAPCACHE_NEW: /* page is locked */
        /* decompress */
        ...

        ret = crypto_comp_decompress(tfm, src, entry->length,
                         dst, &dlen);
        ...
        kunmap_atomic(dst);    


$ git show
commit 1573d2caf713874cfe0d1336c823d0fb548d8bed
Merge: 4cdf8db 0a86248
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Oct 11 23:59:07 2016 -0700

Таким образом, zswap полезен в ситуациях, когда сжатый встроенный кэш-память, скорее всего, будет забыт незадолго до обратной записи на диск. Это не для приложений с большими, долго живущими кучами, которые в конечном счете должны будут быть поддержаны фактическим устройством подкачки.

mnish
источник
7
Я обнаружил потенциально опасное поведение zswap. Когда приложение выделяет много страниц и записывает в них данные, которые сжимаются очень хорошо (скажем, последовательность нулей), zswap с радостью сохраняет их в памяти блоков ядра. Однако, когда что-то запускает фактическую замену диска, хранимые данные внезапно «лопаются» - так много нулей на страницах, которые занимали «только» гигабайты в памяти, теперь распаковываются до сотен гигабайт на диске.
mnish
2
Злоумышленник может попытаться сохранить данные с низкой энтропией на сервере. Когда что-то вызывает обмен, сервер будет мертвым.
mnish
1
Вы сообщили об этом вверх по течению?
Кен Шарп
Еще один недостаток записи несжатых данных
Михаил Малостанидис,
Конечно, было бы лучше в месте и в срок, чтобы сбросить данные в распакованном виде! Звучит так, как будто мы бы очень хотели, чтобы это делалось. Я могу только предположить, что реструктуризация области подкачки, чтобы позволить это, либо включает переписывание большого количества существующего кода, либо требует более сложной системы выделения.
mwfearnley
75

В этих трех системах есть много вещей, но ни одна из них не делает простого сравнения между ними, не говоря уже о том, чтобы хорошо их объяснить. Я пытался понять это, но моя голова взорвалась. Потом я подумал, что получил его, поэтому я попытался записать его, и моя голова снова взорвалась. (см. краткое изложение реализаций) Я подумал, что будет полезно опубликовать это здесь, так как было много вопросов об обмене стеками, спрашивающих о парных сравнениях между ними.

Краткое изложение того, что использовать, когда:

  1. ZRAM, если у вас нет устройства подкачки на HDD / SSD.
  2. ZSWAP, если у вас есть устройство подкачки на HDD / SSD.
  3. ZCACHE : он делает то, что делает ZSWAP, а также сжимает и ускоряет кэш страницы файловой системы. (Внутренне он намного сложнее и не входит в основное ядро, так как все еще находится в стадии разработки).

Краткое описание их реализации:

  1. ZRAM - это устройство подкачки со сжатым ОЗУ
  2. ZSWAP - это сжатый кэш, если у вас уже есть своп.
  3. ZCache - это серверная программа для специального типа виртуальной памяти (Transcendent memory), которая может использоваться для кэширования страниц файловой системы или обмена данными.

Подробности:

  • ZRAM: делает устройство подкачки в оперативной памяти. Отправленные здесь страницы сжимаются по мере их хранения. Он имеет более высокий приоритет, чем другие устройства подкачки: выгруженные страницы предпочтительно отправляются на устройство zram до его заполнения, только тогда используются любые другие устройства подкачки.

    • Преимущества: Независимо от других (физических) устройств подкачки. Его можно использовать, когда нет раздела подкачки для расширения доступной памяти.
    • Недостатки: если присутствуют другие устройства подкачки (HDD / SSD), они не используются оптимально. Поскольку устройство zram является независимым устройством подкачки, после его заполнения все новые страницы, которые должны быть выгружены, отправляются непосредственно на следующее устройство подкачки, следовательно:
      1. Существует реальная вероятность инверсии LRU (с наименьшим количеством использовавшихся в последнее время): это будут самые последние обменные данные, которые отправляются на медленный диск, в то время как неактивные страницы, которые были заменены давно, останутся в быстром ZRAM
      2. Данные, отправляемые и считываемые с диска, будут занимать большую полосу пропускания, поскольку они не сжаты.
    • Статус: объединен с основным ядром 3.14. После включения в системе требуется некоторая конфигурация пользовательского пространства для настройки устройств подкачки и их использования.
  • ZSWAP:frontswap система перехватывает попытку выгрузить страницы и использует zswap в качестве обратной записи кэша для замены устройства HDD / SSD: попытка сжать страницу и , если он содержит плохо сжимаемые данные , которые он непосредственно записывается на диск. Если данные сжаты, они сохраняются в пуле памяти zswap. Если страницы выгружена из памяти , когда общее количество сжатых страниц в оперативной памяти превышает определенный размер, наименее недавно использовавшихся (LRU) сжимаются страница записывается на диск , как это вряд ли потребуется в ближайшее время .

    • Преимущества: очень эффективное использование оперативной памяти и дискового раздела. Минимизирует дисковый ввод-вывод за счет уменьшения необходимого количества операций записи и чтения (данные сжимаются и хранятся в ОЗУ), а также за счет уменьшения пропускной способности этих операций ввода-вывода, поскольку данные находятся в сжатой форме.
    • Ограничения: Это расширение дисковых систем подкачки и, следовательно, зависит от раздела подкачки на жестком диске.
    • Статус: объединен с ядром 3.11 mainline linux.
  • ZCache: это бэкэнд для системы памяти Transcendent. Трансцендентная память обеспечивает RAM-подобную память, к которой можно получить доступ только к странице за один раз, используя putи getвызовы. Это не похоже на обычную память, к которой можно обращаться за байтом за раз. Перехватчик frontswapи cleancacheсистемы пытается обменять и вернуть кеш страниц файловой системы соответственно и отправить их в трансцендентный бэкэнд памяти. Когда zcache используется в качестве бэкэнда, данные сжимаются и сохраняются в оперативной памяти. Когда он заполняется, сжатые страницы высвобождаются в своп. (альтернативным бэкэндом является RAMster, который разделяет пул оперативной памяти между сетевыми компьютерами). Использование только frontswapвнешнего интерфейса с zcacheбэкэндом работает точно так же zswap. (На самом деле zswap - это упрощенное подмножество zcache)

    • Преимущества Обеспечивает сжатое кэширование как для кэшей подкачки, так и для кэшей файловой системы.
    • Статус: все еще не обозначен, поскольку он очень сложный и над ним ведется работа.

Лучшие ресурсы, которые я нашел, были:


staticd
источник
6
Возможно и / или разумно ли использовать zram и zswap?
Фля
2
Ни один из трех не должен / должен выполняться одновременно. zswap требует дискового свопинга в качестве бэкэнда, в отличие от ZRAM, для которого не требуется выделенный раздел подкачки. Однако если у вас есть свопинг, то раздел подкачки ZRAM + гораздо менее эффективен, чем раздел подкачки zswap +.
staticd
Подскажите, пожалуйста, здесь, как вы активируете zswap. Здесь детали askubuntu.com/a/361321/25388
Лео Леопольд Херц 준영
2
Попробуйте добавить: с zswap сжатые страницы распаковываются перед
Том Хейл
1
Каждый ответ, который утверждает, что zramэто swapабсолютно неправильно. zramНЕ ЯВЛЯЕТСЯ swap. swapТолько могут быть сохранены в zram. Но это один из многих возможных вариантов использования! Вот пример: «Некоторые примеры использования включают в себя хранилище / tmp, использование в качестве дисков подкачки, различные кэши в / var и, возможно, многие другие :)». Kernel.org/doc/Documentation/blockdev/zram.txt Например, я использую его для временное хранилище, которое я форматирую и монтирую как любое другое обычное блочное устройство.
Виктор Ярема