Kernel do Linux

Espaço de troca de gerenciamento de memória do kernel do Linux

Espaço de troca de gerenciamento de memória do kernel do Linux

Parte um. O espaço de troca

Para funcionar corretamente, um computador depende de ter uma quantidade adequada de memória. Simplesmente dizendo que nunca pode haver o suficiente. Quanto mais memória física for instalada, mais caro será. Principalmente, o resultado é um meio-termo inteligente entre custos e velocidade para acessar as células de memória.

Para alcançar este compromisso, os sistemas UNIX / Linux combinam dois tipos de memória - memória física (RAM) e espaço de troca. Ao todo, isso é chamado de memória virtual de um sistema de computação. A memória física é bastante cara, mas rápida e acessível em nanossegundos. Em contraste, a memória swap é bastante barata, mas lenta e acessível em milissegundos.

Existem algumas razões pelas quais a memória swap é útil. Primeiro, às vezes, processos únicos precisam de mais memória do que o sistema possui fisicamente e podem fornecer mais para os processos que a exigem. Como resultado, todos os dados mantidos na memória física não podem mais ser armazenados lá. Agora, o espaço de troca entra em jogo e uma seleção de páginas de memória é transferida para o espaço de troca para liberar memória física.

Em segundo lugar, nem todos os dados são necessários na memória ao mesmo tempo. É por isso que as páginas de memória menos usadas são estacionadas no espaço de troca para ter o máximo de memória física livre disponível. Este método é denominado Algoritmo de Substituição de Página Menos Usado Recentemente (LRU) [1].

Tipos de troca

O espaço de troca existe em duas variantes. A versão 1 é uma partição de disco separada que é a chamada partição swap. Não há arquivos armazenados nessa partição, mas informações de memória (despejos). Simplesmente, a versão 2 é um arquivo em um disco que reside no sistema de arquivos do seu disco rígido. A versão 1 é muito comum em sistemas UNIX / Linux, BSD e OS X, enquanto a versão 2 existe em sistemas que executam Microsoft Windows. A versão 2 também pode ser ativada em sistemas UNIX / Linux (veja abaixo).

Para ver qual espaço de troca está ativo em seu sistema UNIX / Linux, execute o seguinte comando em um terminal:

$ / sbin / swapon -s
Tipo de nome de arquivo, tamanho usado, prioridade
partição / dev / dm-3 16150524 316484 -1
$

Como alternativa, você pode enviar uma solicitação ao sistema de arquivos proc e executar o comando cat / proc / swaps

Este sistema Linux tem uma partição swap com um tamanho de cerca de 15 GB em que mais de 300M estão em uso, atualmente. A coluna Prioridade mostra qual espaço de troca usar primeiro. O valor padrão é -1. Quanto maior o valor de prioridade, mais cedo este espaço de troca é levado em consideração. A opção -s é a versão curta de -summary. Esta opção está obsoleta e é recomendado usar a opção -show da seguinte forma:

$ / sbin / swapon --show = NOME, TIPO, TAMANHO, USADO, PRIO
NOME TIPO TAMANHO PRIO USADO
partição / dev / dm-3 15,4G 307,1M -1
$

A opção -show aceita uma lista de valores que representam os cabeçalhos das colunas. Para obter uma ordem de saída específica, escolha os cabeçalhos de coluna desejados e sua sequência.

Tamanho de swap

Como regra geral, o tamanho do espaço de swap é recomendado que seja o dobro do tamanho do sistema tem memória física. Lembre-se disso para configurações de uso geral e computadores desktop. Para servidores UNIX / Linux com muito mais memória física, você pode diminuir o tamanho do espaço de troca para 50% da RAM. Laptops que podem hibernar precisam ser um pouco maiores do que a memória física.

Instalação

Para uma partição swap, é recomendado pensar no espaço swap desde o início da divisão do disco em partições simples, ou deixar espaço em disco não utilizado suficiente para usá-lo posteriormente, eventualmente. Normalmente, durante a configuração dos discos a serem usados ​​a rotina de configuração pergunta sobre o tamanho do espaço de troca. Por exemplo, no Debian GNU / Linux isso se parece com o seguinte:

Como mencionado acima, contanto que você tenha espaço para novas partições em seu disco rígido, você pode criar e incluir partições de swap com o uso de comandos como fdisk e swapon.

Alternativamente, o espaço de troca também pode ser habilitado posteriormente como um arquivo de troca. O Linux oferece suporte para que você possa criar, preparar e montá-lo de maneira semelhante à de uma partição swap. A vantagem desta forma é que você não precisa reparticionar um disco para adicionar espaço de troca adicional.

Como exemplo, criamos um arquivo chamado / swapfile com um tamanho de 512M e o habilitamos como espaço de troca adicional. Primeiro, com a ajuda do comando dd, criamos um arquivo vazio. Em segundo lugar, o mkswap usa esse arquivo para transformá-lo em um estilo de troca. Você pode notar que o conteúdo do arquivo é tratado como uma partição, e um UUID correspondente é atribuído. Terceiro, habilitamos isso usando swapon. Finalmente, o comando swapon -show exibe duas entradas de troca - uma partição e o arquivo recém-criado.

# dd if = / dev / zero of = / swapfile bs = 1024 contagem = 524288
524288 + 0 conjuntos de dados em
524288 + 0 conjuntos de dados de saída
536870912 bytes (537 MB) copiados, 0,887744 s, 605 MB / s
# mkswap / swapfile
Configurando a versão 1 do espaço de troca, tamanho = 524284 KiB
sem rótulo, UUID = e47ab7fe-5efc-4175-b287-d0e83bc10f2e
# swapon / swapfile
# swapon --show = NOME, TIPO, TAMANHO, USADO, PRIO
NOME TIPO TAMANHO PRIO USADO
partição / dev / dm-3 15,4G 288,9M -1
/ arquivo swapfile 512M 0B -2
#

Para usar este arquivo de troca no momento da inicialização, adicione, como administrador, a seguinte linha ao arquivo / etc / fstab:

/ swapfile nenhum swap sw 0 0

Desativando um espaço de troca

Pelo menos, mas não por último, há um comando para desativar o arquivo de troca, novamente. O comando é chamado troca. Requer um único parâmetro que indica que o dispositivo de troca deve ser desabilitado. Este comando desativa o arquivo de troca ativado anteriormente:

# swapoff / swapfile

Também, troca pode trabalhar com o UUID de um sistema de arquivos. Fazer troca aja desta forma, use a opção -você seguido pelo UUID do sistema de arquivos de acordo. Caso seja necessário desabilitar todos os espaços de swap de uma vez a opção -uma (opção longa -all) é bastante útil. O comando completo é swapoff -a.

Ajustando o ecossistema de troca

Começando com as versões 2 do kernel Linux.6 um novo valor foi introduzido. Isso é armazenado na variável / proc / sys / vm / swappinesse 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 [2]. O valor padrão é 60 (porcentagem de memória livre antes de ativar a troca). Quanto menor o valor, menos troca é usada e mais páginas de memória são mantidas na memória física.

Para definir o valor temporariamente, defina o valor no sistema de arquivos / proc da seguinte maneira:

# echo 10> / proc / sys / vm / swappiness

Como alternativa, você pode usar o sysctl comando da seguinte forma:

# sysctl -w vm.troca = 10

Para definir o valor permanentemente, adicione a seguinte linha ao arquivo / etc / sysctl.conf:

vm.troca = 10

O swap ainda está atualizado?

Você pode perguntar por que lidamos com esse tópico. Os computadores modernos têm memória física suficiente - então por que temos que nos preocupar com isso? Existem algumas razões pelas quais esta tecnologia vale mais do que um pensamento.

Lembre-se de que você fica com sua máquina por um tempo, mas pode atualizar o software que usa nela de vez em quando. Atualmente, tanto o hardware quanto o software se adaptam um ao outro. No futuro, isso pode mudar, e você precisa de mais memória do que tem agora. A menos que atualizar ou comprar um novo hardware, uma partição Swap pode economizar um pouco de dinheiro.

Você pode ter ouvido falar de um recurso chamado suspender para o disco ou modo de hibernação [3]. Sua máquina vai dormir. Antes de fazer isso, ele deve armazenar seu estado atual em algum lugar. Agora o espaço de troca entra em jogo e atua como um contêiner para manter esses dados. Assim que a máquina acordar da próxima vez, todos os dados são lidos do espaço de troca, carregados na memória, e você pode continuar trabalhando de onde parou antes.

O sistema, se tiver apenas um dispositivo de armazenamento permanente, terá que ler e gravar seus arquivos enquanto troca no mesmo dispositivo. Você verá uma grande melhoria se tiver um segundo dispositivo e puder separar o dispositivo de troca de acessos a arquivos conflitantes.

O arquivo de troca deve passar dados através do sistema de arquivos. Isso adiciona uma camada de indireção, para fazer parecer que há um espaço de endereço lógico contíguo para o kernel trabalhar. Isso adiciona sobrecarga de memória adicional e ciclos de CPU. Você obterá melhores resultados usando uma partição de swap bruta.

Conclusão

Ainda hoje o conhecimento sobre Swap é essencial. Este tópico faz parte do conhecimento necessário para passar no Certificado de Nível 1 do Linux Professional Institute (LPIC 1). A maioria dos exames contém uma ou duas perguntas sobre este tópico.

O espaço de troca ajuda o seu sistema Linux (kernel) a organizar rapidamente a memória se houver necessidade. Para ser aberto com você, o espaço de troca não é absolutamente necessário caso seu sistema tenha toneladas de RAM. Em caso de emergência, ajuda seu sistema a sobreviver. É por isso que eu nunca sairia do caminho de uma configuração tradicional sem espaço de troca.

A combinação de Swap e SSD é discutida de forma controversa porque o número de gravações em disco em um SSD é bastante limitado. Os arquivos de troca e temporários são construídos para gravar muitos dados. Por outro lado, os SSDs modernos têm espaço adicional mais do que suficiente (7%) para lidar com as falhas do setor. Para ficar no lado seguro: se possível, tenha um Swap separado em um disco rígido convencional - não use ramdisk, nem um SSD, pelo menos para swap [4]. Seu sistema Linux irá agradecer por esta decisão.

Para evitar colocar o espaço de troca em seu SSD, você pode usar ZRAM, em vez [5,6]. Isto é Virtual Swap Compressed in RAM, também denominado zSwap. Esta tecnologia permite um dispositivo de bloco compactado na memória. Assim que não houver mais memória restante, as páginas de memória são transferidas para este dispositivo de bloco. Isso resulta em menos uso de swap e ajuda a estender a vida útil do seu disco rígido também.

Links e referências

Linux Memory Management Series

Reconhecimentos

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

Como aumentar o FPS no Linux?
FPS significa Quadros por segundo. A tarefa do FPS é medir a taxa de quadros em reproduções de vídeo ou desempenho de jogos. Em palavras simples, o nú...
Top jogos do Oculus App Lab
Se você é proprietário de um fone de ouvido Oculus, deve estar informado sobre o carregamento lateral. Sideload é o processo de instalação de conteúdo...
Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...