Experimento: SWAP diretamente na memória RAM - Testes para RAM e SWAP

Este Artigo descreve e detalha o uso da própria memória RAM do Computador com GNU/Linux, como SWAP. Essa memória RAM física é alocada, reservada para troca, como adição e/ou substituição da partição de troca (SWAP) ou arquivo, ou pendrive de troca. Em adição, a RAM e a SWAP são testadas.

[ Hits: 18.768 ]

Por: Alberto Federman Neto. em 10/09/2014 | Blog: https://ciencialivre.blog/


Testes e conclusão



Sabayon Linux, 14.10. Computador [i]Athlon, X2, Duplo Núcleo, 64 Bits[/i], com sistema Sysvinit clássico.
Método no Boot Direto, Página 2, Ítem D.

Observe o Carregamento da ZSWAP:

# dmesg | grep zswap
  [ 0.000000] Command line: root=/dev/sdb5 real_root=/dev/sdb5 ro ramdisk=8192 real_init=/sbin/init.d/sysvinit/final/init splash=silent,theme:sabayon vga=791 console=tty1 quiet zswap.enabled=1 dokeymap keymap=br-a
  [ 0.000000] Kernel command line: root=/dev/sdb5 real_root=/dev/sdb5 ro ramdisk=8192 real_init=/sbin/init.d/sysvinit/final/init splash=silent,theme:sabayon vga=791 console=tty1 quiet zswap.enabled=1 dokeymap keymap=br-a
  [ 0.990332] zswap: loading zswap
  [ 0.990340] zswap: using lzo compressor


Sabayon Linux, 14.10. Computador Phenom, 8x, FX-8120, 8 Núcleos, 64 Bits, com sistema Systemd, inicialmente Experimental e atualmente Padrão.
Método nos Serviços de Boot, Ítem E.

Observe uma SWAP em RAM alocada para cada núcleo, mais a Partição SWAP física, a sda7.

No monitor Gkrellm do meu KDE, a SWAP subiu de 2 M (tamanho da minha partição SWAP) para 5,156 M

sudo swapon -s
Senha:

Nome do arquivo Tipo      Tamanho Usado Prioridade
/dev/zram0      partition 403948  0     100
/dev/zram1      partition 403948  0     100
/dev/zram2      partition 403948  0     100
/dev/zram3      partition 403948  0     100
/dev/zram4      partition 403948  0     100
/dev/zram5      partition 403948  0     100
/dev/zram6      partition 403948  0     100
/dev/zram7      partition 403948  0     100
/dev/sda7       partition 2047996 0     -1


I. Testes de Estresse

Para consumir processamento e RAM, estressar o micro, usei o pacote Cpuburn, instalado em Sabayon:

# equo i -av cpuburn
# burnK6 #Comando para Athlon e Phenom. Para Intel, use "burnP6".

Monitorando com Htop, um aperfeiçoamento do comando top:

# equo i -av htop
htop

Detalhes:
Observe que, com os 8 núcleos e ZSWAP, o micro "dá folga" mais do que o suficiente, mesmo estressado com Cpuburn:
Linux: Experimentos: SWAP diretamente na memória RAM - Testes para RAM e SWAP

O uso de CPU foi a 100%, rapidamente. Mas o executável burnK6, específicamente, consumiu apenas de 7%, ao máximo de 52% em meia hora. E a temperatura da CPU, atingiu um máximo de 64 graus centígrados.

A RAM máxima consumida foi de cerca de 3,6 M, de um total dos 16 M existentes no Micro. Não chegou nem perto de usar a SWAP.

J. Testes de RAM

Depois, rodei o Algoritmo memtest.c, do engenheiro de sistemas Steven D:
Para usar especificamente a memória, usei esse programa-fonte, com código em C.
Coloque estas linhas em um arquivo e salve. Eu dei o nome de memorex.c:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char** argv) {
int max = -1;
int mb = 0;
char* buffer;

if(argc > 1)
max = atoi(argv[1]);

while((buffer=malloc(1024*1024)) != NULL && mb != max) {
memset(buffer, 0, 1024*1024);
mb++;
printf("Allocated %d MB\n", mb);
sleep(1);
}
return 0;
}

Compilei com o comando abaixo:

gcc memorex.c -o memorex

E executei:

./memorex

Fui deixando funcionar, com muita coisa aberta e rodando, cópias de arquivos, navegador, etc.

Fui deixando o programa (Memorex) alocar memória e o micro continuou funcionando com folga. Deixei até a SWAP começar a ser usada.

Observe na Figura:
Linux: Experimentos: SWAP diretamente na memória RAM - Testes para RAM e SWAP

Veja:
  • No terminal, acima, à esquerda, o comando free (1);
  • Acima à direita, monitorando com Htop (2);
  • No terminal de baixo, à esquerda, o programa Memorex, alocando a memória (3);
  • À direita, embaixo, comando: swapon -s (4).

Note que, no comando free (1) e no swapon -s (4), a SWAP em RAM, já está sendo alocada (16 Mega, em 4 dos 8 núcleos, 4 Mega cada núcleo), enquanto no comando htop (2), vê-se que nada da SWAP física (da partição) ainda foi usada. Está zerada, intocada.

O micro? O micro funcionando bem, rodando tudo, sem travar e com boa performance, uso da RAM nem se nota, a não ser nos comandos (Figura), em que pese eu já ter muita RAM, 16 Giga.

O uso de SWAP na RAM, parece funcionar bem.

Enquanto faço as medidas vista na figura e aloco memória, também estou navegando, escrevendo isto e copiando arquivos, e o micro rodando, redondo...

Outro Programa que pode ser usado para testar é o Código C abaixo.

É um Fork Bomb do programador Sebastian, Áustria, publicado no site Stackoverflow:
#include <stdlib.h>

int main() {
  int *p;
    while(1) {
    int inc=1024*1024*sizeof(char);
    p=(int*) calloc(1,inc);
    if(!p) break;
  }
}

Também testei com ele, mas muito rapidamente, em cerca de 30 segundos, o micro consome toda a memória e ameaça travar.

Para evitar isso, mantive outro terminal aberto, e rapidamente "matei" o processo com comando killall.

Mas, foi o suficiente para dar tempo de observar o consumo da memória alocada para SWAP na RAM, no monitor do Gkrellm.

Estes testes demonstram que os métodos de usar RAM do micro como SWAP, são efetivos e eficientes.

Página anterior    

Páginas do artigo
   1. Resumo / Introdução / Providências Iniciais
   2. Métodos / Complementos e melhoramentos / Verificação
   3. Testes e conclusão
Outros artigos deste autor

Comparando desempenho de distros, arquiteturas ou ambientes gráficos - Método universal

Como Compilar Kernel Novo para o Sabayon Linux

ATI Catalyst Radeon Graphics no Sabayon Linux - Instalando e configurando drivers proprietários

Sabayon Linux: Migrando KDE4 para KDE5

Sabayon Linux - O Gentoo fácil!

Leitura recomendada

Configurando placa de som Sound Blaster Live!

Placa de rede wireless Encore ENUWI-G2 COM CHIP RTL8187B no Linux

Hardware Lister (lshw) - Relatório simples de seu hardware

Entendendo o gerenciamento de memória no Linux

Como instalar sua placa de vídeo ATI no Fedora Core 6

  
Comentários
[1] Comentário enviado por levi linux em 10/09/2014 - 08:10h

Muito bom! Vou testar aqui. Parabéns pelo excelente trabalho!

[2] Comentário enviado por xerxeslins em 10/09/2014 - 08:42h

Muito bom, só não vou testar porque tenho pouca RAM.



[3] Comentário enviado por cruzeirense em 10/09/2014 - 09:24h

Interessante o artigo e bem completo. Só fiquei com uma dúvida, seria melhor não utilizar swap do que colocar ela na RAM?

[4] Comentário enviado por albfneto em 10/09/2014 - 09:34h

@ Cruzeirense..
Eu tenho um micro com 8 giga de RAM e o outro, 16. Mas já tive antigos com 1, 2 e 4 Giga.
pelo que observei, no uso do micro...

até 2 giga, precisa de RAM em partição ou arquivo,melhor ter.
entre 2 e 4, não precisaria RAM, faça se quiser. Não testei ZSwap neles, mas capaz de funcionar razoávelmente.
Muita RAM, fazendo ZSwap, a performance e a rapidez do micro sobem visivelmente
Ou seja tendo muita RAM, me parece melhor usar ZSwap, do que não ter Swap alguma.

[5] Comentário enviado por galactus em 10/09/2014 - 15:18h

Olá albfneto, deixa ver se entendi bem, com seu micro com 8GB de RAM, você usa o ZRAM e + ZSwap? Ou só o Zswap?

E quanto ao Verynice? Usa isso junto também? Realmente deixei de usar o Prelink por dar uns paus federais em algumas aplicações!

[6] Comentário enviado por albfneto em 10/09/2014 - 18:16h

Testei de vários jeitos.
nos testes do artigo, nos micros de 8 giga e 16 Giga de RAM,
testei vários jeitos.
no momento uso zswap no micro de 8 giga de RAM, com verynice e preload.
e ZRAM e Zswap no micro de 16 giga de RAM, com ou sem preload e verynice.

[7] Comentário enviado por jotagera em 11/09/2014 - 12:32h

Prezado colega

Por favor me ajude a entender...

Quando o Linux tem pouca memória e precisa colocar mais programas que cabem na mesma, ele usa a área de swap.

Quando o Linux tem muita memória, ele (em teoria) não precisa de arquivo de troca. O Linux até usa a memória para fazer cache de leitura de arquivos. Se configurar, pode até fazer cache de escrita.

Assim sendo, qual seria a vantagem teórica de diminuir a quantidade total de memória disponível para o kernel, criando uma área especifica para swap?

Obrigado antecipadamente.

[8] Comentário enviado por albfneto em 11/09/2014 - 12:44h

suponha que vc vai usar toda a sua RAM, e vai usar a swap...
quando ele precisar da swap, vai achá-la na RAM, e não no disco...
a leitura é muito mais rápida na RAM...
por exemplo, 8 giga de RAM e swap clássica, é menos rápido que 6 giga de RAM e 2 de swap RAM.
teste, veja por sí, a performance sobe e sobe muito.
no meu caso, também puz meus diretórios temporários na RAM, fica mais rápido ainda.

[9] Comentário enviado por mapintar em 11/09/2014 - 12:55h

Corrijam-se se eu estiver errado, mas creio que o autor confunde dois métodos diferentes (zswap e zramswap) como se fosse um só. Vejam:

https://wiki.archlinux.org/index.php/Zswap
https://wiki.archlinux.org/index.php/Maximizing_performance (na parte que fala em Compcache/Zram)

Pelo que eu entendi, o zswap usa parte da memória RAM como swap, mas compactando os dados (""Zswap is a Linux kernel feature providing a compressed write-back cache for swapped pages. Instead of moving memory pages to a swap device when they are to be swapped out, zswap performs their compression and then stores them into a memory pool dynamically allocated inside system's RAM." - Wikipedia"

Já o zramswap funciona de forma diferente, atribuindo uma quantidade de RAM específica para cada núcleo lógico do processador.

O primeiro exige alteração na linha de comando da inicialização do kernel, o segundo a instalação de um pacote adicional (que no Arch se chama zramswap, disponível no AUR).

[10] Comentário enviado por mfdzerohour em 11/09/2014 - 14:13h

Eu uso, montar a memoria ram para o diretorio /var/tmp para compilação de pacotes do gentoo, o resultado é ótimo, ele reduz 50% do tempo de compilação de pacotes grandes, podendo reduzir a 1/3 em alguns casos.

[11] Comentário enviado por ricardoolonca em 11/09/2014 - 16:08h

Na verdade, o maior benefício de usar zswap é a compactação dos dados em memória. Com isso você consegue jogar mais dados na memória Ram. E quem mais se beneficia disso são máquinas com pouca RAM, ao contrário do que o artigo diz.

Veja um exemplo: criei um live-cd que precisa de uma máquina com pelo menos 1.2Gb da Ram. Modifiquei o live-cd habilitando o zswap para utilizar 500Mb da Ram. Com isso eu consegui fazer o live-cd rodar em máquinas com menos de 1Gb.

Por padrão, quando uma máquina fica sem Ram, uma área de swap será utilizada. Vamos supor que você tenha 1Gb de Ram e separou 800 Gb para zswap. O swap em Ram tem prioridade ao swap em disco. Como o zswap compacta - estimamos 2/1 - você conseguirá colocar +- 1,8Gb em Ram (0,2Gb em Ram nativa + 1,6 Gb compactado em zswap). Somente após o encher os 1,8Gb é que o sistema vai passar a usar swap em disco.

[12] Comentário enviado por albfneto em 11/09/2014 - 16:33h

Os dois métodos são Swap na RAM...

Um deles (zswap) usa a swap comprimida, mas na RAM, é cache, mas não de disco, mas cache em RAM. no meu artigo é o método D..

o módulo já existe no kernel (pelos menos nos novos), mas verifiquei que ele não ativa se não tiver o pacote ZRAM instalado. Não basta só o módulo.

O outro que aloca a swap na ram dos núcleos, é zramswap, sim, é no meu artigo, método E.

ocorre que em algumas distros zramswap se chama "zswap" também, no pacote.

ambos os métodos são aplicáveis, mas ambos precisa instalar pacote ZRAM.

se tem pouca RAM, dá para usar zswap, e isso beneficia o micro com pouca RAM.

na prática, porém, fica difícil, se tem pouca RAM, alocar para 8 núcleos, zramswap.

Porisso que eu estou usando zswap no micro de casa e zramswap, neste que tem 16 giga de RAM.

mas em ambos, fica mais rápido, pq além da prioridade, é mais rápido ler a RAM do que ler um disco.

[13] Comentário enviado por mapintar em 11/09/2014 - 18:22h

A propósito, estou usando o método descrito aqui https://wiki.archlinux.org/index.php/Zswap com a compactação lz4 em um sistema com 8GB de RAM.

Como uso o freshplayerplugin, ainda em fase experimental, de vez em quando o firefox fica maluco e passa a usar toda a RAM disponível e ainda passando a "comer" toda swap que encontra pela frente, certamente devido a um bug, o que aconteceu hoje novamente (e parece ter resolvido depois que atualizei o chromium-pepper-flash).

O que eu percebi é que quando o kernel começa a usar a swap o sistema dá uma pisada no freio por uns 15 segundos, mas volta ao normal logo em seguida na medida em que a swap passa a ser usada. Porém, quando esgota a parcela que a zswap usa aí não tem jeito. Fica tudo muito lento, impossível até de fechar o programa "comedor" de memória.

Geralmente quando surge esse problema eu fecho o firefox e tudo volta ao normal, mas hoje estava ocupado com outra coisa e quando vi já tinha ido embora toda a RAM e toda a parcela da zswap. O sistema parecia congelado, mas na verdade estava muito lento devido ao acesso ao disco. Como tinha muita coisa aberta eu esperei, até que consegui matar o firefox e tudo foi voltando ao normal depois de uns 10 minutos. Não foi preciso reiniciar.

A conclusão que eu chego é que é viável usar o método se você for usar ocasionalmente até uns 2GB de swap (no caso com o sistema com 8GB de RAM), pois terá uma folga a mais quando o kernel passar a depender de swap, mas ficará "na mão" se o espaço compactado acabar e for necessário acesso ao disco.

[14] Comentário enviado por albfneto em 12/09/2014 - 10:54h

Isso é um Bug de algumas versões de Firefox, eu tb tive,mesmo antes de usar zswap.
e tinha uma versão antiga de Dropbox, que também fazia isso!

[15] Comentário enviado por Thihup em 14/09/2014 - 12:43h

Notei um pequeno erro no inicio da 3ª pagina , está escrito assim:

"Método no Boot Direto, Página 3, Ítem D. "

O correto nao seria

"Método no Boot Direto, Página 2, Ítem D. "

?

A dica é muito boa

T+

[16] Comentário enviado por m4iir1c10 em 14/09/2014 - 15:21h

Excelente artigo, eu so tenho um problema... nao com o artigo mais com a ideia de armazenar dados na RAM como Swap.

Esse metodo e plausivel para o uso em um desktop, porem como no meu caso eu uso mais o laptop, sem a swap ou com a swap direto na RAM eu perco a funcionalidade de colocar o computador para dormir.

Levei anos ate descrobrir isso... eu nunca vi em nenhuma comunidade esse assunto sendo discutido, sempre tive problemas que eu pensava que era a distro ou o Gnome ou o KDE que estava com BUG, porque ao fechar o laptop eu so via uma tela preta sem prompt e nada acontecia eu era forcado a segurar o power ate desligar.

Ate um dia que eu pesquisei a fundo sobre as funcoes da RAM e entendi que a razao pela qual devemos ter o dobro da capacidade da RAM como Swap e exatamente para o caso do laptop entrar em sleep mode.

Tudo oque esta rodando no computador e armazenado na SWAP e o computador desliga, ao reiniciar invez de carregar todos os programas do zero ele carrega todos eles da SWAP como se estivessem congelados.

So que ao carregar a SWAP na RAM isso nao vai acontecer porque tudo na RAM e apagado ao desligar.

[17] Comentário enviado por mapintar em 17/09/2014 - 13:21h

Há alguns anos eu montei um sistema com 16GB de RAM. Pensei, "swap nunca mais". Ledo engano. Sempre haverá mais cedo ou mais tarde um programa "comedor de memória". E sem swap, acabou a memória o kernel simplesmente entra em colapso. O sistema congela.

[18] Comentário enviado por xerxeslins em 17/09/2014 - 14:13h

Já usei sistema sem swap e ele congelou durante compilação. Mas o artigo deixa claro que esse artigo é um experimento, e ainda mais: só para quem tem MUITA memória RAM. Não adianta querer usar isso em computador com 4GB de RAM. O criador do Gentoo deu uma entrevista em 2012 e disse que o PC dele tinha 32GB de RAM rsrs.

[19] Comentário enviado por bleckout em 10/04/2015 - 11:07h


Eu havia pensado nisso em usar a RAM para SWAP, porém agora lembrei: Qual seria a vantagem? ]

Exemplo:

8GB RAM S/SWAP = 100% FULL
8GB RAM C/SWAP = 100% FULL

Ainda seriam os 8GB com o mesmo hardware.

-----

Creio que a melhor vantagem para quem tem RAM de sobra é para quem deseja separar uma parte dela como um HD, pois assim o boot do OS ficaria bem mais rápido.

[20] Comentário enviado por sun7zu em 11/08/2015 - 04:17h

Uma curiosidade qual file system você utilizou teve alguma otimização para o mesmo,além do que foi dito no artigo teve outras otimizações ?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts