Sim.
Definitivamente, você sempre deve ter a troca ativada, exceto se houver um motivo muito atraente e proibitivo (como, por exemplo, nenhum disco ou apenas o disco de rede presente). Você deveria trocar a ordem dos tamanhos ridículos frequentemente recomendados (como o dobro da quantidade de RAM)? Bem, não .
O motivo é que a troca não é útil apenas quando seus aplicativos consomem mais memória do que a RAM física (na verdade, nesse caso, a troca não é muito útil porque afeta seriamente o desempenho). Atualmente, o principal incentivo à troca não é transformar magicamente 16GiB de RAM em 32 GiB, mas fazer um uso mais eficiente da RAM disponível instalada.
Em um computador moderno, a RAM não é utilizada. RAM não utilizada é algo que você também não poderia ter comprado e economizado. Portanto, qualquer coisa que você carregar ou qualquer coisa que é outra forma de mapeamento de memória, qualquer coisa que poderia possivelmente ser reutilizados por qualquer pessoa em qualquer momento posterior (limitado por restrições de segurança) está sendo armazenada em cache. Logo após a inicialização da máquina, toda a RAM física será usada para alguma coisa .
Sempre que você solicita uma nova página de memória do sistema operacional, o gerenciador de memória precisa tomar uma decisão informada:
- Limpar uma página do cache do buffer
- Limpe uma página de um mapeamento (efetivamente o mesmo que nº 1, na maioria dos sistemas)
- Mova uma página que não foi acessada por um longo período de tempo - de preferência nunca - para trocar (isso pode até acontecer proativamente, não necessariamente no último momento)
- Mate seu processo ou mate um processo aleatório (OOM)
- Kernel panic
As opções 4 e 5 são muito indesejáveis e só acontecerão se o sistema operacional não tiver outra opção. As opções 1 e 2 significam que você joga fora algo que possivelmente precisará em breve novamente. Isso afeta negativamente o desempenho.
A opção 3 significa que você move algo que você (provavelmente) não precisa em breve para armazenamento lento. Tudo bem, porque agora algo que você precisa pode usar a RAM rápida.
Ao remover a opção nº 3, você efetivamente limitou o sistema operacional às nºs 1 ou 2. Recarregar uma página do disco é o mesmo que recarregá-la da troca, exceto ter que recarregar da troca geralmente é menos provável (devido à tomada de decisões de paginação apropriadas).
Em outras palavras, ao desativar o swap, você não ganha nada, mas limita o número de opções úteis do sistema operacional ao lidar com uma solicitação de memória. O que pode não ser , mas muito possivelmente pode ser uma desvantagem (e nunca será uma vantagem).
[EDITAR]
O cuidadoso leitor da página de mmap
manual , especificamente a descrição de MAP_NORESERVE
, notará outro bom motivo pelo qual a troca é uma necessidade, mesmo em um sistema com memória física "suficiente":
"Quando o espaço de troca não está reservado, pode-se obter o SIGSEGV na gravação, se não houver memória física disponível."
- Espere um momento, o que isso significa?
Se você mapear um arquivo, poderá acessar o conteúdo diretamente, como se o arquivo estivesse, de alguma forma, por mágica, no espaço de endereço do seu programa. Para acesso somente leitura, o sistema operacional não precisa, em princípio, de apenas uma página de memória física que possa repovoar com dados diferentes toda vez que você acessar uma página virtual diferente (por motivos de eficiência, é claro que não é isso que é feito, mas em princípio, você pode acessar dados em terabytes com uma única página de memória física). Agora, e se você tambémescrever em um mapeamento de arquivo? Nesse caso, o sistema operacional deve ter uma página física - ou trocar espaço - pronta para todas as páginas gravadas. Não há outra maneira de manter os dados atualizados até que o processo de write-back de páginas sujas tenha feito seu trabalho (que pode levar vários segundos). Por esse motivo, o sistema operacional reserva (mas nem sempre confirma) o espaço de troca; portanto, se você estiver gravando em um mapeamento enquanto houver uma página física não utilizada (essa é uma condição normal e possível), você pode É garantido que ainda funcionará.
Agora, e se não houver troca? Isso significa que nenhuma troca pode ser reservada (duh!), E isso significa que, assim que não houver mais páginas físicas gratuitas e você estiver escrevendo em uma página, estará recebendo uma agradável surpresa na forma de receber seu processo uma falha de segmentação e provavelmente sendo morto.
[/EDITAR]
No entanto, a recomendação tradicional de fazer swap duas vezes o tamanho da RAM não faz sentido. Embora o espaço em disco seja barato, não faz sentido atribuir tanta troca. Desperdiçar algo barato ainda é um desperdício, e você absolutamente não deseja trocar continuamente os conjuntos de trabalho com várias centenas de megabytes (ou maiores) de tamanho.
Não existe um tamanho de troca "correto" único (há tantos tamanhos "corretos" quanto usuários e opiniões). Normalmente, atribuo 512MiB fixos, independentemente do tamanho da RAM, o que funciona muito bem para mim. O raciocínio por trás disso é que 512MiB é algo que você sempre pode pagar hoje em dia, mesmo em um pequeno disco. Por outro lado, adicionar vários gigabytes de swap não é melhor. Você não vai usá-los, exceto se algo der errado.
Mesmo em um SSD, o swap é uma ordem de magnitude mais lenta que a RAM (devido à largura de banda e latência do barramento) e, embora seja muito aceitável mover algo para trocar que provavelmente não será necessário novamente (ou seja, você provavelmente não será trocando novamente, para que seu conjunto de páginas disponíveis seja efetivamente ampliado gratuitamente), se você realmente precisar de quantidades consideráveis de troca (ou seja, você tem um aplicativo que usa, por exemplo, um conjunto de dados de 50 GiB), você está praticamente perdido.
Depois que o computador inicia a troca e a devolução de gigabytes de páginas, tudo vai para um rastreamento. Portanto, para a maioria das pessoas (inclusive eu), isso não é uma opção, e, portanto, ter tanta troca não faz sentido.