Guia zram vs zswap vs zcache Ultimate: quando usar qual

55
  1. Que diabos eles são? como eles são diferentes (escrevi meu entendimento em uma resposta abaixo)
  2. No sistema Zswap, quando uma página é removida do zswap para a troca real, ela é armazenada em um arquivo compactado? (ou é descompactado antes de armazenar ?, AFAICT ainda está compactado, mas não tenho certeza)
  3. Qual é o estado atual do zcache? aparentemente foi removido ou algo do 3.11. O que isto significa? ( http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=96256460487387d28b8398033928e06eb9e428f7 )
staticd
fonte
2
Resp 2. A mensagem de confirmação indica claramente que os patches (pertencentes ao zcache) foram removidos da versão 3.11, mas serão incluídos na árvore principal -mm.
askb
11
@staticd Por que você não aceitou sua própria resposta? É muito bom!
Léo Léopold Hertz # 25/16
Quando uma página é removida do zswap (cache de troca compactado), ela é _ descompactada_ e colocada no dispositivo de troca de backup, por uma das referências de um ano [ lwn.net/Articles/537422/] abaixo ...
Cbhihe
( lwn.net/Articles/537422 - "Durante a retomada da gravação, o zswap descompacta a página ..."). O @mmin abaixo sugere que isso pode ser ineficiente ou até mesmo um perigo explorável para um servidor!
Mkfearnley

Respostas:

2

Em relação ao 2., o zswap parece descomprimir as páginas no write-back, confirmando o comentário de @ Cbhihe.

mm / zswap.c , linha 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 <[email protected]>
Date:   Tue Oct 11 23:59:07 2016 -0700

Portanto, o zswap é útil para situações em que o cache in-ram compactado provavelmente será esquecido logo antes de ser gravado novamente no disco. Não é para aplicativos com pilhas grandes e de longa duração que eventualmente precisarão ser apoiadas pelo dispositivo de troca real.

mnish
fonte
7
Eu encontrei um comportamento potencialmente perigoso de zswap. Quando um aplicativo aloca muitas páginas e grava neles dados que são compactados muito bem (digamos, uma sequência de zeros), o zswap os armazena alegremente na memória da laje do kernel. No entanto, quando algo aciona a troca real do disco, os dados armazenados repentinamente 'explodem' - muitos zeros nas páginas que contêm "apenas" gigabytes na memória agora descompactam para centenas de gigabytes no disco.
mnish
2
Um invasor pode tentar armazenar dados de baixa entropia em um servidor. Quando algo aciona a troca, o servidor estará morto.
mnish
11
Você reportou isso a montante?
Ken afiada
No entanto, outra desvantagem de gravação de dados descompactado 🤷
Mihail Malostanidis
Certamente seria melhor no espaço e na hora de despejar os dados de forma descomprimida! Parece algo que realmente queremos que faça. Só posso supor que a reestruturação da área de troca para permitir isso envolva a reescrita de muitos códigos existentes ou exija um sistema de alocação mais complexo.
Mkfearnley
75

Há um monte de coisas sobre esses três sistemas, mas nada disso faz uma comparação simples entre eles e muito menos os explica bem. Eu tentei entender, mas minha cabeça explodiu. Então eu pensei que tinha conseguido, então tentei escrever e minha cabeça explodiu novamente. (veja o resumo das implementações). Pensei que seria útil postar isso aqui, pois havia muitas perguntas sobre troca de pilhas perguntando sobre comparações entre pares.

Resumo do que usar quando:

  1. ZRAM se você não tiver um dispositivo de troca no HDD / SSD.
  2. ZSWAP se você tiver um dispositivo de troca no HDD / SSD.
  3. ZCACHE : Faz o que o ZSWAP faz e TAMBÉM comprime e acelera o cache da página do sistema de arquivos. (É internamente muito mais complicado e não está no kernel da linha principal, pois ainda está em desenvolvimento).

Resumo de suas implementações:

  1. O ZRAM é um dispositivo de troca baseado em RAM compactada
  2. ZSWAP é um cache compactado se você já tiver uma troca.
  3. O ZCache é um back-end para um tipo especial de RAM virtual (memória transcendente) que pode ser usada para armazenar em cache páginas do sistema de arquivos ou trocar dados.

Detalhes:

  • ZRAM: cria um dispositivo de troca na RAM. As páginas enviadas aqui são compactadas à medida que são armazenadas. Ele tem uma prioridade mais alta que outros dispositivos de troca: as páginas que são trocadas são enviadas preferencialmente para o dispositivo zram até que esteja cheio, somente então outros dispositivos de troca são usados.

    • Benefícios: Independente de outros dispositivos de troca (físicos). Pode ser usado quando não há partição de troca para expandir a memória disponível.
    • Desvantagens: Se outros dispositivos de troca (HDD / SSD) estiverem presentes, eles não serão utilizados da melhor maneira. Como o dispositivo zram é um dispositivo de troca independente, uma vez cheio, todas as novas páginas que precisam ser trocadas são enviadas diretamente para o próximo dispositivo de troca, portanto:
      1. Há uma chance real de inversão de LRU (menos usada recentemente): serão os dados trocados mais recentemente que vão para o disco lento, enquanto as páginas inativas que foram trocadas há muito tempo permanecerão no ZRAM rápido
      2. Os dados enviados e lidos do disco consumirão muita largura de banda, pois são descompactados.
    • Status: mesclado no kernel da linha principal 3.14. Uma vez ativado em um sistema, requer alguma configuração do espaço do usuário para configurar os dispositivos de troca e usá-los.
  • ZSWAP: O frontswapsistema conecta as tentativas de trocar as páginas e usa o zswap como cache de write-back para um dispositivo de troca HDD / SSD: É feita uma tentativa de compactar a página e, se ela contém dados pouco compactáveis, ela é gravada diretamente no disco. Se os dados forem compactados, eles serão armazenados no pool de memória zswap. Se as páginas forem trocadas sem memória quando o total de páginas compactadas na RAM exceder um determinado tamanho, a página compactada Menos Utilizadas Recentemente (LRU) será gravada no disco, pois é improvável que seja necessário em breve.

    • Benefícios: uso muito eficiente de RAM e troca baseada em disco. Minimiza a E / S de Disco, reduzindo o número de gravações e leituras necessárias (os dados são compactados e mantidos na RAM) e reduzindo a largura de banda dessas operações de E / S, pois os dados estão compactados.
    • Limitações: É um aprimoramento dos sistemas de troca baseados em disco e, portanto, depende de uma partição de troca no disco rígido.
    • Status: mesclado no kernel linux da linha 3.11.
  • ZCache: É um back-end para o sistema de memória Transcendent. A memória transcendente fornece uma memória semelhante à RAM que só pode ser acessada uma página por vez usando pute getchama. Isso é diferente da memória normal que pode ser acessada um byte por vez. O gancho frontswape cleancachesistemas tenta trocar e recuperar caches de página do sistema de arquivos respectivamente e enviá-los para os back-ends de memória transcendente. Quando o zcache é usado como back-end, os dados são compactados e armazenados na RAM. Quando é preenchida, as páginas compactadas são despejadas para a troca. (um back-end alternativo é o RAMster, que compartilha um pool de RAM entre os computadores em rede). Usar apenas o frontswapfront-end com o zcacheback - end funciona da mesma maneira zswap. (De fato, zswap é um subconjunto simplificado do zcache)

    • Benefícios Fornece armazenamento em cache compactado para caches de troca e de sistema de arquivos.
    • Status: ainda não está alinhado, pois é muito complicado e está sendo trabalhado.

Os melhores recursos que encontrei foram:


staticd
fonte
6
É possível e / ou razoável usar o zram e o zswap?
Phlya
2
Nenhum dos três precisa / deve ser executado ao mesmo tempo. O zswap precisa de uma troca baseada em disco como um back-end, diferente da ZRAM, que não precisa de partição de troca dedicada. No entanto, se você tiver swap, a partição swap do ZRAM + é muito menos eficaz que a partição zswap + swap.
staticd
Você pode resumir aqui como você ativa zswap. Aqui detalhes askubuntu.com/a/361321/25388
Léo Léopold Hertz z 25/07
11
Toda resposta que afirma que zramé a swapestá totalmente errada. zramNÃO é um swap. O swapúnico PODE ser armazenado zram. Mas este é um dos muitos casos de uso possíveis! Aqui está um exemplo: "Alguns dos casos incluem armazenamento / tmp, usam como discos de troca, vários caches em / var e talvez muito mais :)" kernel.org/doc/Documentation/blockdev/zram.txt Por exemplo, eu o uso para armazenamento temporário que eu formato e montei como qualquer outro dispositivo de bloco normal.
Victor Yarema 27/04