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 )

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 <torvalds@linux-foundation.org>
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.


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:



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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.