Memória

Otimizando o uso de memória Linux

Otimizando o uso de memória Linux
Na parte um desta série, demos uma olhada mais de perto no espaço de troca, e a parte dois lidou com ferramentas e comandos para gerenciar a memória. Agora, vamos discutir vários parâmetros e estratégias para otimizar a memória e seu uso em geral. Isso cobre a quantidade de memória, a aceleração do acesso e a estratégia de uso interno.

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):

ramfs / tmp padrões ramfs 0 0

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-config

Conforme 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

Linux Memory Management Series

Reconhecimentos

O autor gostaria de agradecer a Axel Beckert e Gerold Rupprecht por seu apoio durante a preparação deste artigo.

Remapeie os botões do mouse de maneira diferente para software diferente com o controle de botão do mouse X
Talvez você precise de uma ferramenta que possa fazer o controle do seu mouse mudar com cada aplicativo que você usa. Se for esse o caso, você pode ex...
Análise do mouse sem fio Microsoft Sculpt Touch
Recentemente li sobre o Microsoft Sculpt Touch mouse sem fio e decidi comprá-lo. Depois de usá-lo por um tempo, decidi compartilhar minha experiência ...
AppyMouse na tela Trackpad e ponteiro do mouse para tablets Windows
Os usuários de tablets costumam perder o ponteiro do mouse, especialmente quando costumam usar laptops. Os smartphones e tablets touchscreen vêm com m...