Quantidade de memória
Como já discutido na primeira parte, toda a memória é chamada de memória virtual e consiste em memória física e espaço de troca. A disponibilidade da memória física depende do hardware que está embutido na máquina, bem como quanta memória o processador pode endereçar, na verdade. Como exemplo, os sistemas operacionais de 32 bits têm um limite de 4 G de memória, apenas (2 ^ 32 bits), enquanto os sistemas operacionais baseados em 64 bits teoricamente permitem até 16 EB (2 ^ 64 bits).
Para ser mais preciso, a limitação é a placa-mãe com o próprio processador, os módulos de memória que são suportados por essa placa-mãe e os módulos de memória específicos que são plugados nos slots de memória na placa-mãe. Uma maneira de maximizar a memória disponível do sistema é usar módulos de memória semelhantes que tenham o maior tamanho possível. A segunda maneira é usar a memória Swap como já explicado na primeira parte.
Acesso de memória
Em seguida, uma melhoria da velocidade de acesso da memória é levada em consideração. A princípio, o limite físico é dado pelo próprio módulo de memória. Você não pode ir abaixo dos limites físicos do hardware. No segundo, um ramdisk, e no terceiro o uso do zRAM pode acelerar o acesso à memória. Discutiremos essas duas tecnologias em mais detalhes.
Criação de um ramdisk
Um ramdisk é um bloco de memória que o sistema operacional lida como um dispositivo físico para armazenar dados - um disco rígido que é inteiramente mantido na memória. Este dispositivo temporário existe assim que o sistema inicia e ativa o ramdisk, e o sistema desativa o ramdisk ou desliga. Tenha em mente que os dados que você armazena em tal ramdisk são perdidos após o desligamento da máquina.
Você pode criar um ramdisk dinâmico via sistema de arquivos tmpfs e via sistema de arquivos ramfs. Ambas as tecnologias diferem significativamente uma da outra. Primeiro, dinâmico significa que a memória para o ramdisk é alocada com base em seu uso (verdadeiro para ambos os métodos). Contanto que você não armazene dados nele, o tamanho do ramdisk é 0.
A criação de um ramdisk dinâmico via tmpfs é a seguinte:
# mkdir / media / ramdisk# mount -t tmpfs none / media / ramdisk
A criação de um ramdisk dinâmico via ramfs é a seguinte:
# mkdir / media / ramdisk# mount -t ramfs ramfs / media / ramdisk
Em segundo lugar, usando tmpfs e a menos que seja explicitamente especificado, o tamanho do ramdisk é limitado a 50% da memória física. Em contraste, um ramdisk baseado em ramfs não tem essa limitação.
A criação de um ramdisk dinâmico via tmpfs com um tamanho relativo de 20% da memória física é a seguinte:
# mkdir / media / ramdisk# mount -t tmpfs -o size = 20% nenhum / media / ramdisk
A criação de um ramdisk dinâmico via tmpfs com um tamanho fixo de 200 MB de memória física é a seguinte:
# mkdir / media / ramdisk# mount -t tmpfs -o size = 200M nenhum / media / ramdisk
Terceiro, ambos os métodos lidam com a troca de uma maneira diferente. Caso o sistema atinja o limite de memória de um ramdisk baseado em tmpfs, os dados do ramdisk são trocados. Isso frustra a ideia de acesso rápido. Por outro lado, o sistema operacional prioriza o conteúdo e as páginas de memória solicitadas de um ramdisk baseado em ramfs, mantém isso na memória e troca as páginas de memória restantes para o disco.
Nos exemplos acima, usamos / media / ramdisk
como um ponto de montagem. Em relação aos dados regulares, a única parte do sistema de arquivos Linux que é recomendada para uso em um ramdisk é / tmp
. Este diretório armazena dados temporários, apenas, que não persistem. A criação de um ramdisk permanente que armazena o sistema de arquivos / tmp requer uma entrada adicional no arquivo / etc / fstab
da seguinte forma (com base em ramfs):
Na próxima vez que você inicializar seu sistema Linux, o ramdisk será habilitado, automaticamente.
Usando zRAM
zRAM significa Virtual Swap Compressed in RAM e cria um dispositivo de bloco compactado diretamente na memória física. O zRAM entra em ação (uso) assim que não houver mais páginas de memória física disponíveis no sistema. Em seguida, o kernel do Linux tenta armazenar páginas como dados compactados no dispositivo zRAM.
Atualmente, não há pacote disponível para Debian GNU / Linux, mas Ubuntu. É denominado zram-config. Instale o pacote e configure um dispositivo zRAM simplesmente iniciando o serviço systemd de acordo com o seguinte:
# systemctrl start zram-configConforme fornecido pela saída de swapon -s,
o dispositivo está ativo como uma partição swap adicional. Automaticamente, um tamanho de 50% da memória é alocado para zRAM (veja a figura 1). Atualmente, não há como especificar um valor diferente para zRAM a ser alocado.
Para ver mais detalhes sobre a partição swap comprimida use o comando zramctl
. A Figura 2 mostra o nome do dispositivo, o algoritmo de compactação (LZO), o tamanho da partição de troca, o tamanho dos dados no disco e seu tamanho compactado, bem como o número de fluxos de compactação (valor padrão: 1).
Estratégia de uso
A seguir, vamos nos concentrar na estratégia de uso de memória. Existem alguns parâmetros para influenciar o comportamento do uso e distribuição da memória. Isso inclui o tamanho das páginas de memória - em sistemas de 64 bits é 4M. Em seguida, a troca de parâmetro desempenha um papel. Como já explicado na primeira parte, este parâmetro controla o peso relativo dado à troca da memória de tempo de execução, em oposição a descartar páginas de memória do cache de página do sistema. Além disso, não devemos esquecer o cache e o alinhamento da página de memória.
Use programas que requerem menos memória
Por último, mas não menos importante, o uso de memória depende dos próprios programas. A maioria deles está ligada à biblioteca C padrão (LibC padrão). Como desenvolvedor, para minimizar seu código binário, considere usar uma alternativa e uma biblioteca C muito menor. Por exemplo, existem dietlibc [1], uClibc [2] e musl lib C [3]. O site do desenvolvedor de musl lib C contém uma comparação extensiva [4] em relação a essas bibliotecas em termos do menor programa C estático possível, uma comparação de recursos, bem como os ambientes de construção de acordo e arquiteturas de hardware suportadas.
Como usuário, você pode não ter que compilar seus programas. Considere procurar programas menores e estruturas diferentes que requerem menos recursos. Como exemplo, você pode usar o Ambiente de Trabalho XFCE em vez do KDE ou GNOME.
Conclusão
Existem algumas opções para mudar o uso de memória para melhor. Isso varia de troca a compressão com base em zRAM, bem como configurar um ramdisk ou selecionar uma estrutura diferente.
Links e referências
- [1] dietlibc, https: // www.fefe.de / dietlibc /
- [2] uClibc, https: // uclibc.org /
- [3] musl lib C, http: // www.musl-libc.org /
- [4] comparação de bibliotecas C, http: // www.etalabs.net / compare_libcs.html
Linux Memory Management Series
- Parte 1: Gerenciamento de memória do kernel do Linux: espaço de troca
- Parte 2: Comandos para gerenciar a memória do Linux
- Parte 3: Otimizando o uso de memória do Linux
Reconhecimentos
O autor gostaria de agradecer a Axel Beckert e Gerold Rupprecht por seu apoio durante a preparação deste artigo.