Linux zram (compcache) + SwapCached

3

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

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 é descompactado pelo recurso swapcache interno do Linux?

Se for verdade, não é muito útil salvar ~ 57MB enquanto também está na RAM com ~ 90MB.

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

    
por DC-1 19.07.2012 / 16:32

2 respostas

2

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

A resposta longa é que o SwapCache é na verdade páginas retiradas de swap (usando o termo "swap" genericamente, independentemente do repositório de backup, onde zram e HDD swap são dois exemplos de repositórios de apoio) e são temporariamente descompactados enquanto eles precisam ser ativamente acessados. Lembre-se: as páginas na RAM compactada não podem ser acessadas diretamente , porque os dados são compactados e, portanto, não podem ser lidos (bem, ilegíveis se você quiser ler os dados originais). Então tem que ser armazenado em algum lugar quando o sistema diz "OK, agora eu preciso de uma página do cache compactado!". Se você descompactar "on the fly" toda vez que precisar de algo do zram, isso seria extremamente intensivo de CPU e provavelmente resultaria em uma desaceleração geral do sistema que seria pior do que a leitura de um swap no disco rígido. Assim, o sistema mantém um cache de algumas suas páginas trocadas na memória, onde "algumas delas" são definidas pelas páginas que foram necessárias mais recentemente.

Além disso, no caso de você apontar inteligentemente que as páginas trocadas para o disco rígido não estão compactadas: o swapcache ainda é usado lá, porque em vez de uma alta sobrecarga de CPU ao acessar essas páginas, uma alta latência enquanto aguarda o disco rígido procurar e buscar os setores e retorná-los à memória, onde eles podem ser adicionados ao swapcache.

Essa estratégia de gerenciamento permite otimizar um caso de uso em que você inicia vários programas; empurre alguns dos conjuntos de trabalho dos programas para swap comprimido à medida que a pressão da memória aumenta (zram); em seguida, descompacte o conjunto de trabalho de programas individuais (um programa por vez) no swapcache não compactado, quando / se você acessar esse programa em primeiro plano ou se executar alguma atividade em segundo plano.

Isso não é muito diferente de como a troca funciona em geral, independentemente de seu 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, observaria 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 retificação de disco audível ao carregar todos os programas que estão em segundo plano há muito tempo

Então, o que você está obtendo com a RAM compactada em vez da troca de HDD é que o "atraso longo e a grande quantidade de retificação de disco audível" é evitado quando você traz esse programa em segundo plano para o primeiro plano. Em vez disso, a CPU fica descontrolada ao executar a descompactação sobre as páginas compactadas e as armazena temporariamente no cache de troca enquanto você acessa o programa, portanto, acessar a mesma página compactada várias vezes não resulta em descompactação intensiva da CPU Tempo. Mas, pessoalmente, prefiro ter maior atividade da CPU em relação à alta E / S de disco e à latência associada.

    
por 19.07.2012 / 16:55
0

Sim, isso significa que essas páginas estão em memória RAM duas vezes: uma vez compactadas e uma vez descompactadas. Não, você não pode desativá-lo.

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

    
por 19.07.2012 / 16:55