Zram Linux (compcache) + SwapCached

3

Eu tenho uma pergunta sobre zram + swapcached. Eu sei que o zram é uma troca compactada na memória, mas o linux usa sua própria área SwapCached interna para armazenar páginas de troca recentes também na memória. Eu tenho um laptop de 512 MB com uma unidade de troca de ~ 128 MB zram.

zram_stats diz:

orig_data_size:     97419264 
compr_data_size:    40315919 

e:

grep SwapCache /proc/meminfo 
    SwapCached:        90200 kB

Isso significa que eu tenho essas páginas de troca na RAM duas vezes? O primeiro é compactado e o segundo não é compactado pelo recurso swapcache interno do Linux?

Se for verdade, não é muito útil economizar ~ 57MB enquanto estiver na RAM com ~ 90MB.

Posso desativar o recurso swapcache do Linux quando estou trocando para o zram? Ou posso limitar a área máxima do swapcached?

DC-1
fonte

Respostas:

2

A resposta curta é: não é uma cópia; é apenas "diferente".

A resposta longa é que, na verdade, o SwapCache é páginas extraídas de swap (usando o termo "swap" genericamente, independentemente da loja de backup, onde zram e HDD swap são dois exemplos de lojas de backup) e são descomprimidas temporariamente enquanto precisam para ser acessado ativamente. Lembre-se: as páginas na RAM compactada não podem ser acessadas diretamente , porque os dados são compactados e, portanto, ilegíveis (bem, ilegíveis se você quiser ler os dados originais). Então tem que ser armazenado em algum lugarquando o sistema diz "OK, agora preciso de uma página do cache compactado!". Se você descompactá-lo "on the fly" toda vez que precisar de algo do zram, isso exigiria muito uso de CPU e provavelmente resultaria em uma desaceleração geral do sistema que seria pior do que a leitura de swap no disco rígido. Portanto, o sistema mantém um cache de algumas de suas páginas trocadas na memória, onde "algumas de" são definidas pelas páginas que foram necessárias mais recentemente.

Além disso, caso você indique de forma inteligente que as páginas trocadas para o disco rígido não são compactadas: swapcache ainda é usado lá, porque em vez de uma alta sobrecarga da CPU ao acessar essas páginas, você obtém uma alta latência enquanto aguarda o HDD procurar e busque os setores e retorne-os à memória, onde eles podem ser adicionados ao swapcache.

Essa estratégia de gerenciamento permite otimizar para um caso de uso em que você inicia muitos programas; coloque alguns conjuntos de trabalho dos programas em troca compactada à medida que a pressão da memória aumenta (zram); descompacte o conjunto de trabalho de programas individuais (um programa por vez) em swapcache descompactado, quando / se você acessar esse programa em primeiro plano ou se executar alguma atividade em segundo plano.

Isso não é muito diferente de como o swap funciona em geral, independentemente do armazenamento de backup (cache compactado na RAM ou no swap). Se você tivesse um disco rígido muito lento, com muitos programas abertos e muito espaço de troca usado, você perceberia os seguintes sintomas:

  1. Geralmente, bom desempenho no programa "primeiro plano" (a janela com a qual você está interagindo agora )

  2. Um longo atraso e muita moagem de disco audível ao carregar qualquer programa que esteja em segundo plano por um longo tempo

Portanto, o que você está obtendo com a RAM compactada em vez da troca de HDD é que o "longo atraso e muita moagem de disco audível" é evitado quando você coloca esse programa em segundo plano em primeiro plano. Em vez disso, a CPU fica louca com a descompactação em execução nas páginas compactadas e as armazena temporariamente no cache de troca enquanto você acessa o programa, de modo que o acesso à mesma página compactada várias vezes não leva à descompactação intensiva da CPU. Tempo. Mas, pessoalmente, eu prefiro ter uma atividade de CPU mais alta em relação à E / S de disco alta e à latência que o acompanha.

allquixotic
fonte
0

Sim, significa que essas páginas estão no ram duas vezes: uma vez compactadas e uma vez descompactadas. Não, você não pode desabilitá-lo.

Eu esperava que o frontswap com o zcache resolvesse esse problema, e ele finalmente foi fundido no linux 3.5, mas parece que você ainda precisa ter uma troca real ou o frontswap não funciona.

psusi
fonte