Gerenciamento da memória e da swap

Contextualização:
Sou programador e meu navegador + vscode rodando a aplicação fica em torno dos 7gb, deixando minha memória ram de 8gb perto do limite mas conseguindo suportar.
Para lazer costumo jogar CSGO com meus amigos que tem um desempenho muito bom no linux.

Problema:
Mesmo após fechar as aplicações e ver o encerramento delas no monitor do sistema o computador passa algum tempo lento até voltar ao normal e eu poder abrir outras aplicações, queria entender o pq disso.

Não sei como visualizar e gerenciar o que está na SWAP. Gostaria de poder subir meu navegador e vscode para ela quando eu for jogar para depois poder continuar de onde parei (entendo que essa troca é lenta, mas o objetivo é poder continuar do mesmo ponto).

Também como gostaria de poder limpar a SWAP para depois não enfrentar o engasgo devido a clicar em algo que está na SWAP e ter que aguardar voltar para ram para só então finalizar o processo.

Não sei dizer bem - e ai fica como achismo e leiguice da minha parte -, mas acho o gerenciamento da ram e da swap ruins em relação o que deve subir para a swap, o que deve ficar na ram etc. Não sei se é feito com base no critério da ultima aplicação utilizada sobe, mas eu gostaria de ter um maior controle disso.

2 curtidas

A aplicação que esta sendo usada pelo usuário tem prioridade para ficar na “RAM” no entanto para que o processamento da aplicação que não esta sendo usada pelo usuário possa continuar(Não dar crash) é obrigatório que certas informações da aplicação se mantenha na memoria “RAM”, sim tem coisas que não se pode colocar na Swap em hipótese nenhuma caso ocorra o programa da crash.

Então é isso se você esta jogando o CSGO(Não minimizado) ele tem prioridade na memoria “RAM”.
Se não tiver memoria RAM o suficiente para manter os programas que não esta sendo usado na memoria “RAM”(O mínimo de uso sem crash.) o “kernel Linux” entende que é preciso colocar o que for possível do CSGO(Este em uso pelo usuário.) na Swap.

E se por falta de “RAM” não for possível deixar o mínimo possível que é preciso para que os programas não de crash na RAM o “kernel Linux” vai dar crash em algum dos programas ou todos os programas do usuário para que o sistema fique estável.

Porque manter o sistema estável? porque algumas coisas do sistema podem ir para a Swap e o que não pode também não pode dar crash então só o que sobra para fechar(crash) os programas do usuário.
É nesta parte do estável é que o sistema fica lento o sistema esta na Swap ao invés de estar na memoria “RAM”.

O “kernel Linux” não vai para a Swap já os módulos do kernel podem ou não ir.

E ai entendeu tudo?

2 curtidas

Existe varias ferramentas de monitoramento da RAM e Swap.
E existe um parâmetro no kernel que você pode configurar o quanto um de prioridade o kernel dará para o uso da Swap.
A swappiness.
O parâmetro do kernel para o swappiness vai de 0 a 100.
“0” usar a swap o mínimo possível, este causa um “lag” danado caso falte RAM.
E o “100” para uso agressivo da Swap, este causa menos “lag” em caso de precisar de Swap.

$ watch free -h # para monitorar a RAM e Swap.
2 curtidas

Olha, até onde eu sei, o usuário não tem muito controle sobre isso; o kernel é que decide o que vai pra swap e o que fica na memória RAM, e o usuário não consegue “ver” o que está na swap. Se existe alguma forma de manipular isso eu desconheço.

O que eu acho que você poderia fazer é alterar o valor do swappiness (a quantidade de memória livre para que o sistema comece a fazer uso da swap). Nesse caso, eu recomendaria você reduzir o valor que está lá para um que você ache mais adequado, como 10 ou 20…

1 curtida

Porque disso tudo? Por que o armazenamento interno não tem um processador e o CPU + RAM tem um formato de decidir as instruções entre eles oque não é a mesma estrutura entre CPU + SSD/HDD, ou seja, o armazenamento interno só responde de acordo com as instruções executadas entre CPU+RAM. Por isso um computador funciona sem SSD/HDD(Podemos acessar o BIOS por exemplo) mas não funciona sem RAM. Mas a Samsung anúnciou o SSD CSD, um armazenamento interno com microprocessador, então futuramente essa idéia poderá ser 100% possível.

As outras distros deveriam seguir o exemplo do Fedora e adotar o swap na zRAM para evitar esse tipo de problema :man_shrugging:

Pó cara o “CPU” e a memoria “RAM” e a “PCIe” ficam na “ponte norte”(Mais rápida que a “ponte sul”.).
Já o “SATA” “USB” e etc, ficam na “ponte sul” e mesmo que colocassem uma memoria “RAM” no “SATA”(e a “SATA” que já é bem mais lenta que o “slot” de memoria “RAM”) ia ser mas lento que usar uma “RAM” no “slot” de memoria “RAM”.

1 curtida

pode explicar um pouco da zRAM?

A compressão deixa zram lenta demora uma eternidade para descompactar os dados.
O zram não usa compactação via hardware.

Outra coisa que você poderia fazer pra tentar conseguir uma melhora no desempenho seria ativar o ZSWAP. Meu PC tem 4GB de RAM e, depois que eu fiz isso eu notei que o sistema ficou um pouco mais responsivo. Claro que também não é nada excepcional, não dá pra fazer milagre com hardware limitado.

Vou testar esses valores para prioridade da swap.

É um método de criar swap na memoria RAM só que deixa a parte da memoria onde tem a swap lenta.
No final a metade da sua RAM esta prejudicada o desempenho e o sistema passando fome para usar essa memoria que era para ser rápida.

Não estou dizendo que é inútil só que pode não compensar.
Você pode testar no seu sistema e ver se fica melhor.

Eu particularmente gosto mais do zswap, porque ele trabalha conjuntamente com a swap e de uma forma mais inteligente. Eu também ajusto o algoritmo de compressão para lz4hc que é mais rápido e comprime melhor que o lzo.

Esse artigo aqui é muito bom pra explicar as diferenças entre zswap, zram, zcache…

Pelo que eu vi o zswap é semelhante mas ele aloca dinamicamente o espaço na memória conforme a necessidade, não deixando já um bloco fixo comprometido. Ele me parece ser interessante.

Como é difícil eu ter algum programa que por si só necessite dos meus 8gb - as coisas mais pesadas que uso é o meu vscode com o flutter que fica em torno de 4gb ou o meu CSGO+steam com 6 - imagino que sacrificar um pequeno espaço da ram para uma troca mais rápida seria interessante.

Poderia, por exemplo, comprimir abas não usadas do meu Brave quando eu clicar em outra aba que estava comprimida.

Imagino algo assim.

1 curtida

Então é como eu expliquei você tem que testar, as vezes compensa usar, as vezes não.
Tem memorias de varias frequências e de vários “DDR” as vezes o “zram” é mais eficiente em certos casos que outros.

1 curtida

@aguamole Yup exato, usar tudo na swap da erro de sincronia mas, eu sou ruim de explicar mas eu vejo a CPU e RAM funcionando na minha mente… CPU+RAM tem o Set e o Control bus que “decidem” como os 0 e 1 irão "circular entre eles. A placa mãe tem o software com os dados e as instruções básicas para isso poder funcionar sem o HDD, BIOS. Para os dados circularem no HDD, precisaria dos resultados entre CPU e RAM, não? Ou o CPU pode fazer isso direto com o HDD? Como eles vão decidir oque fazer, funciona igual a RAM, Set e o Control bus? Teclado e mouse tem seus Control Bus… Perdão como eu disse eu sou ruim em explicar e agora eu mesmo fiquei confuso… :sweat_smile:

Edited: Ficou mais confuso ainda :joy: mas deixa eu tentar deixar mais fácil. Até então eu entendia que o hdd só recebia e enviava os 0 e 1, além de armazena-los e quem decidia oque fazer estaria entre o CPU a RAM e o BIOS com essas instruções no boot… Por isso do SSD CSD ele também vai poder tomar “decisões”… Eu preciso estudar mais… Edited/

Edited2: Os 0 e 1 não circulam entre os chips, ram, processador, ssd e tals, oque acontece é a tensão que sai de um e vai para o outro, mais fraco vira 0 mais forte vira 1… Comparação… Então um fica mudando o outro em cada um destes chips… Mas esquecem, oque eu disse, em relação ao tópico oque eu posso dizer é, tudo que é lógico é possível, mas se é viavel dai é outra história… :smile: Perdão o jeito…Edited2/

Essa resposta foi bem esclarecedora, não sabia que não podia subir tudo de uma aplicação para a swap.

1 curtida

Poderia informar a documentação que diz isso?

Porque o que a SwapOnZRAM evita é justamente esse tipo de problema.

O dispositivo zram tem um tamanho definido no momento da criação durante a inicialização pelo zram-generator de acordo com seu arquivo de configuração. A memória usada não é pré-alocada. É alocado e desalocado dinamicamente, sob demanda. Devido à compactação, o dispositivo zram não ocupa muito espaço na memória RAM.

zram tem cerca de 0,1% de sobrecarga. Se a carga de trabalho nunca atinge a taxa necessário para ativar o swap, essa sobrecarga é o único custo. Na prática, quando não é usado, o proprietário do recurso sofre uma sobrecarga infima de ~ 0,04%.

Esta na continuação do que eu expliquei,
Compactação via software é lenta deixando a swap na RAM lenta o que conclui a RAM ficar lenta.
Talvez se a zram fosse implementada na memoria RAM fisicamente via hardware seria mas eficiente ou muito pouco notável mas a zram é via software…

Exatamente. O Zram cria uma “partição swap virtual” na sua RAM. E vai mandando tudo pra lá. Só quando não tem mais espaço na RAM que ele começa a usar a swap no disco.
Já o Zswap trabalha dinamicamente com a swap. Antes de jogar tudo pra aquele espaço na RAM, ele primeiro tenta comprimir. Se o dado não for bem comprimido, ele manda para o disco, para não ocupar a RAM toda com aquele dado (pelo menos foi isso que eu li).
Você também pode ajustar o algoritmo de compressão, o tamanho máximo que o zswap pode ocupar na RAM, etc…

1 curtida