Otimizando o uso da memória Linux

Otimizando o uso da memória Linux
Na primeira parte 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, discutiremos 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 Parte Um, toda a memória é chamada de memória virtual e consiste na memória física e no espaço de troca. A disponibilidade da memória física depende do hardware que está embutido na máquina, bem como a quantidade de memória que o processador pode abordar, na verdade. Como exemplo, os sistemas operacionais de 32 bits têm um limite de 4G de memória, apenas (2^32 bits), enquanto os sistemas operacionais com base em 64 bits permitem teoricamente até 16 EB (2^64bits).

Para ser 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 estão conectados aos 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 de troca como já explicado na parte um.

Acesso à memória

Em seguida, uma melhoria da velocidade de acesso da memória entra 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. Em segundo, um Ramdisk e, no terceiro, o uso do ZRAM pode acelerar o acesso à memória. Discutiremos essas duas tecnologias com mais detalhes.

Criando 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 é totalmente mantido na memória. Este dispositivo temporário existe assim que o sistema inicia e permite o ramdisk, e o sistema desativa o Ramdisk ou desliga. Lembre -se de que os dados que você armazena em tal ramdisk é perdido 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.

Criar um ramdisk dinâmico via TMPFS é o seguinte:

# mkdir /mídia /ramdisk
# Mount -t tmpfs nenhum /mídia /ramdisk

Criar um ramdisk dinâmico via Ramfs é o seguinte:

# mkdir /mídia /ramdisk
# Mount -t Ramfs Ramfs /Media /Ramdisk

Segundo, usando TMPFs e, a menos que 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.

Criar um ramdisk dinâmico via TMPFS com um tamanho relativo de 20% da memória física é a seguinte:

# mkdir /mídia /ramdisk
# Mount -t tmpfs -o size = 20% nenhum /mídia /ramdisk

Criar um ramdisk dinâmico via TMPFS com um tamanho fixo de 200m de memória física é o seguinte:

# mkdir /mídia /ramdisk
# Mount -t tmpfs -o size = 200m nenhum /mídia /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 idéia 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 baseadas em Ramfs, mantém isso na memória e troca as páginas de memória restantes para o disco.

Nos exemplos acima, usamos /mídia/ramdisk Como um ponto de montagem. Em relação aos dados regulares, a única parte do sistema de arquivos Linux recomendada para ser usada em um ramdisk é /tmp. Este diretório armazena dados temporários, apenas que não persistem. Criar um ramdisk permanente que armazena o sistema de arquivos /tmp requer uma entrada adicional no arquivo /etc/fstab como segue (baseado em ramfs):

RAMFS /TMP RAMFS Padrões 0 0

Na próxima vez que você inicializar seu sistema Linux, o RamDisk será ativado, automaticamente.

Usando Zram

Zram significa troca virtual compactada em RAM e cria um dispositivo de bloco compactado diretamente na memória física. 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 Linux tenta armazenar páginas como dados compactados no dispositivo Zram.

Atualmente, não há pacote disponível para Debian GNU/Linux, mas Ubuntu. É chamado Zram-Config. Instale o pacote e configure um dispositivo ZRAM simplesmente iniciando o serviço Systemd da seguinte forma:

# SystemCtrl Start Zram-Config

Conforme dado pela saída de Swapon -s, O dispositivo está ativo como uma partição de troca adicional. Automaticamente, um tamanho de 50% da memória é alocado para o ZRAM (veja a Figura 1). Atualmente, não há como especificar um valor diferente para o Zram ser alocado.

Para ver mais detalhes sobre a partição de troca compactada, use o comando zramctl. A Figura 2 mostra o nome do dispositivo, o algoritmo de compressão (LZO), o tamanho da partição de troca, o tamanho dos dados no disco e seu tamanho comprimido, bem como o número de fluxos de compressão (valor padrão: 1).

Estratégia de uso

Em seguida, nos concentramos na estratégia de uso da 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, o swappiness do parâmetro desempenha um papel. Como já explicado na Parte Um, este parâmetro controla o peso relativo dado para trocar de memória de tempo de execução, em vez de soltar as páginas de memória do cache da 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 da 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 a biblioteca C muito menor em vez. Por exemplo, existem dietlibc [1], uclibc [2] e musl lib c [3]. O site do desenvolvedor de Musl Lib C contém uma extensa comparação [4] sobre essas bibliotecas em termos do menor programa estático possível, uma comparação de recursos, bem como os ambientes de compilação e arquiteturas de hardware com suporte suportadas.

Como usuário, talvez você não precise compilar seus programas. Considere procurar programas menores e estruturas diferentes que requerem menos recursos. Como exemplo, você pode usar o ambiente de desktop XFCE em vez de kde ou gnome.

Conclusão

Existem algumas opções para mudar o uso da memória para melhor. Isso varia de troca à compressão com base no ZRAM, além de 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

Série de gerenciamento de memória Linux

  • Parte 1: Linux Kernel Memory Management: Swap Space
  • Parte 2: Comandos para gerenciar a memória Linux
  • Parte 3: Otimizando o uso da memória do Linux

Reconhecimentos

O autor gostaria de agradecer a Axel Beckert e Gerold Ruprecht pelo apoio ao preparar este artigo.