Pelo que entendi, o objetivo de uma partição swap no Linux é liberar algumas informações "não tão freqüentemente acessadas" da RAM e movê-las para uma partição específica no seu disco rígido (com o custo de tornar mais lento a leitura ou gravação para), permitindo essencialmente aos aplicativos ativos mais "memória de alta velocidade".
Isso é ótimo para quando você estiver em uma máquina com uma pequena quantidade de RAM e não quiser ter problemas se acabar. No entanto, se o seu sistema tiver 16 GB ou 32 GB de RAM, e supondo que você não esteja executando um banco de dados MySQL para StackExchange ou editando um filme completo de 1080p no Linux, uma partição swap deve ser usada?
/tmp
) após 3 dias de funcionamento.Respostas:
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:
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 deMAP_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.
fonte
Não vou concordar com algumas das opiniões que vejo aqui. Eu ainda estaria criando uma partição SWAP, especialmente em um ambiente de produção. Também faço isso para minhas máquinas domésticas e VMs.
Hoje em dia, eu os dimensionei em torno de 1 a 1,5 vezes a memória. 2 vezes a memória costumava ser a regra de ouro. O disco de troca é "barato", pois não precisa de backup nem proteção.
Se você ficar com pouca memória, seu espaço de troca oferecerá um pouco de tempo e proteção para resolver o problema.
Perceba que coisas como / tmp podem residir no espaço de troca.
A área de troca pode conter um despejo parcial do kernel para que possa ser restaurado na próxima reinicialização. Isso pode ser bom para alguma emergência de depuração futura que você é chamado a fazer.
fonte
Talvez:
Pensei bastante neste tópico e vi opiniões pousando nos dois lados do argumento mais vezes do que posso contar. Minha abordagem foi desenvolver uma maneira de descobrir.
Comece com uma partição de troca ativa do que você acha que é um tamanho suficiente.
Em seguida, abra um terminal em uma área de trabalho e emita o comando
free -hs 1
que relatará o uso uma vez a cada segundo.Opcionalmente, alterne para outros espaços de trabalho.
Faça tudo o que provavelmente fará e depois mais um pouco. Execute todos os seus aplicativos comuns de uma só vez, navegue por várias guias e tente desesperadamente dar ao sistema um treino real para você. Isso pode significar recodificar uma meia dúzia de vídeos enquanto executa uma operação de compilação e verifica seu e-mail ou o que quer. Vamos encarar os fatos, isso é tudo sobre como você usa seu sistema.
Quando você sentir que o sistema está sob uma carga alta (ou o mais alto que você pode obter e, em seguida, alguns), olhe para o terminal e examine os resultados. ou, melhor ainda, redirecione a saída para um arquivo adicionando
>output.txt
ao comando para que você possa examinar a execução completa. Se o seu Swap usado nunca exceder o Mem free, você não precisará de swap. Se isso acontecer, você faz.Eu não preciso de troca. Talvez você faça. Por que não descobrir?
No que diz respeito à troca de tamanho, as Regras práticas geralmente são superestimadas, pois essa é uma pergunta baseada no uso.
fonte
swap
passa por cimafree
?NOTA: Isso aconteceu comigo, em uma situação específica e incomum. Se você estiver solucionando um problema, isso pode ser útil. Não quero sugerir que TODAS as máquinas DEVEM trocar.
TALVEZ!
No passado, eu tive problemas com um "dispositivo" que eu construí, executando o Linux - executando em um dispositivo flash compacto, não queria usar meu CF usando swap e havia memória suficiente para o aplicativo.
A maioria desses aparelhos funcionou bem, mas em uma caixa particularmente ocupada, tive um problema:
FRAGMENTAÇÃO DE MEMÓRIA
Sem espaço de troca, a memória gradualmente se tornava cada vez mais fragmentada, especialmente com processos de execução longa (apesar de eu ter muita memória livre, era tudo em bits muito pequenos). Coloquei algum espaço de troca e disse ao Linux para não usá-lo, a menos que fosse necessário; isso resolveu o problema completamente.
Além de tudo o mais, o espaço de troca permite que a memória seja movida, desfragmentando-a. Se você possui memória fragmentada e precisa de um único bloco grande, os fragmentos serão trocados; à medida que são trocados, eles são efetivamente desfragmentados.
Confira / proc / buddyinfo - o meu está assim agora:
Os números representam blocos de tamanhos diferentes; cada tamanho é metade do tamanho do próximo bloco, de blocos de 4mb à esquerda a 4kb à direita (ou seja, 4mb, 2mb, 1mb e assim por diante). Uma máquina recém-inicializada deve ter todos os blocos à esquerda, muito poucos à direita (= não fragmentados). Lembre-se também de que a mesma quantidade de memória (por exemplo, 4mb) será representada como números diferentes nas colunas - 1 bloco na coluna mais à esquerda, 1024 na coluna mais à direita.
A memória é alocada do pool o mais correto possível; por exemplo, se o seu programa deseja 12kb de memória (de uma só vez), ele será retirado da coluna 16kb; o restante aparecerá na coluna 4kb. Se não houver blocos de 16kb, serão utilizados os blocos de 32kb, resultando em 16kb e 4kb restantes, e assim por diante.
Se não houver blocos de memória grandes o suficiente, e você tiver espaço para trocar, por exemplo, se desejar 16kb de memória, ele encontrará o bloco menos usado de 16kb (que pode, por exemplo, conter um bloco usado de 4kb, um bloco disponível de 4kb, e mais 2 blocos de 4kb usados), mova as partes USED apenas para trocar e aloque a memória liberada para o novo aplicativo.
Na caixa que caiu, eu tinha centenas de milhares de blocos de 4kb e 8kb, e não muito mais.
Tanto quanto eu posso dizer (passando pelas máquinas travadas!), O kernel passará da memória para a troca, e trocará para a memória, mas nunca passará da memória para a memória.
fonte
Uma partição de troca tem um valor significativo acima e além de simplesmente agir como uma RAM extra quando você acabar.
Por um lado, o Linux utiliza o máximo de memória possível para armazenar arquivos em cache e operações de E / S, se você tiver alguma troca, poderá descobrir que mais memória é armazenada em cache e / ou IO, tornando-a mais rápida (minimizando o acesso ao disco e também diminuindo o desgaste dos SSDs). manter dados que algum programa alocou, mas está usando apenas uma vez a cada 12 horas, o que pode ser o caso de alguns daemons.
Além disso, o Linux usa uma estratégia otimista de alocação de memória, pela qual permitirá que as páginas sejam nominalmente alocadas, mesmo que não tenha certeza de que possui memória real para preenchê-las. Isso é mais eficiente do que fazer uma verificação adequada e mapear todas as alocações e geralmente não causa problemas. No entanto, as heurísticas usadas pelo kernel para determinar se é aceitável permitir uma alocação incluem o nível de troca disponível no sistema; portanto, as alocações podem ser mais rápidas se o sistema tiver bastante troca, mesmo que não seja muito utilizado.
Esses fatores juntos me levam a acreditar pessoalmente que é melhor ter alguma troca em quase todos os sistemas normais, no entanto, para tamanhos grandes de ram, eu ignoro a regra ram * 2 e simplesmente limito minha troca em 4-8 GB (dependendo do tamanho do disco )
fonte
Você nunca deve ter uma troca maior que o tamanho máximo que seria capaz de tolerar aguardando a troca / retirada do kernel; caso contrário, você está apenas criando um novo modo de falha para o seu sistema (tornando-se irremediavelmente atolado na troca). Observe que, apesar das unidades modernas serem capazes de transferir na ordem de GB / s, o Linux normalmente só consegue mover trocas a taxas mais próximas das linhas de centenas de kB, ou no máximo alguns MB, por segundo. Portanto, uma grande troca pode deixar seu sistema inutilizável por minutos, horas ou até dias.
Se você possui memória física suficiente para o que está fazendo, o tamanho ideal para a troca é combiná-lo com a quantidade de processos de "dados indesejados" que estão mantendo, mas nunca usando. Provavelmente, isso varia de algumas a algumas centenas de megabytes. Essa estratégia permite que toda a sua memória física seja utilizada para armazenar informações úteis em cache, e não como armazenamento permanente de dados que provavelmente nunca serão usados novamente.
Se você não possui memória física suficiente, é necessário avaliar se é possível tolerar uma desaceleração grave devido a trocas pesadas. Nesse caso, ter até 1-2 GB de swap pode fazer sentido, e talvez até 4 GB se você tiver unidades extremamente rápidas. Porém, mais do que isso apenas piorará os modos de falha do sistema, e você deve considerar comprar mais RAM.
fonte
Somente se você quiser hibernar para trocar (esse recurso também é chamado "suspender no disco" e envolve salvar todo o conteúdo da RAM e desligar a energia). Normalmente, isso é usado apenas em laptops e outros dispositivos móveis, portanto depende.
fonte
Não existe uma resposta universal e clara, pois depende de uma tarefa que você está prestes a executar. Se você estiver prestes a executar um servidor de banco de dados, HTTP, virtualização ou cache, nunca deverá ativar nenhum tipo de troca, independentemente da quantidade de memória RAM que possui. Se você possui um host de área de trabalho ou de tarefas mistas e tem 16 ou mais Gb de RAM rápida - dê uma olhada aqui: zRam
fonte
Não há como saber se você precisa trocar espaço ou não, se o único parâmetro que conhecemos é a quantidade de RAM instalada.
Em qualquer caso, existe um equívoco comum de que ter um espaço de troca está afetando negativamente o desempenho do sistema. Isto está incorreto. Contanto que você tenha RAM suficiente, ter uma área de troca, independentemente do tamanho, não prejudica o desempenho. O que afeta o desempenho é ter pouca RAM e usar efetivamente o espaço de troca.
caso 1: Se você não tiver espaço de troca e estiver sem RAM, o kernel do Linux escolherá um ou mais processos que considera bons candidatos e os matará.
caso 2: Se você tiver um espaço de troca e estiver sem RAM, o kernel escolherá menos páginas de memória usadas e as colocará na área de troca para liberar RAM. Isso diminuirá a velocidade do sistema, mas seus aplicativos não serão afetados de outra forma.
Eu sempre prefiro o caso 2, pois me sinto desconfortável perdendo partes ou todo o meu trabalho porque o kernel acha que vale a pena matar meus aplicativos. Além disso, com o tamanho atual de um disco médio na faixa de TB, reservar alguns por cento para troca não deve ser um problema.
fonte
Minha regra para aplicar swap em qualquer sistema é ter a resposta para isso:
Quando recebo resposta para essas informações, dimensiono o sistema de acordo. Nos anos anteriores, eu fazia a regra de ouro da Sun Microsystem. Até 16 GB de RAM duas vezes mais para SWAP, de 16 GB na mesma quantidade. Por outro lado, se você tiver RAM suficiente para poupar e seus aplicativos não usarem SWAP à força, poderá omitir a troca. Se você precisar, basta colocar um novo disco ou lun e configurar o SWAP. a regra da Sun se aplicava principalmente porque no Solaris, em caso de "pânico do kernel", a memória seria descartada inteiramente para ser trocada por análises adicionais.
fonte
A troca será necessária se você não tiver RAM suficiente para executar todos os seus programas.
Você diz que não está fazendo nada que exija muita memória RAM. Então, você tem RAM suficiente.
Então, você não precisa de espaço de troca.
Mas , se você acha que, em algum momento, apesar do que você insinua em sua pergunta, seus programas usarão, digamos mais da metade (ou dois terços) da sua RAM (regra geral), então leia a outra "troca pró" "respostas. Você não precisará trocar, mas isso pode melhorar o desempenho do sistema.
fonte
A resposta curta:
Sim, você sempre precisa trocar, apenas no improvável caso um aplicativo não se incomode em mapear a memória, mas mapeia a memória virtual diretamente.
Defina seu arquivo de troca para:
RAM+round(sqrt(RAM))
se você usar a hibernaçãoround(sqrt(RAM))
se você nãoDefina seu
swappiness
10 em uma área de trabalho, mas não em um servidor!A resposta longa:
No passado:
A regra geral em uso nos últimos 25 anos tem sido um mínimo de 1xRAM e um máximo de 2xRAM, e é isso que você verá citado o tempo todo.
Esse mínimo foi recuado na idade da pedra,
quando eu era adolescente e os dinossauros ainda vagavam pela Terra eporque a RAM era muito cara e você absolutamente precisava desse espaço de troca para poder realizar qualquer coisa.O máximo foi definido naquele momento por causa dos retornos decrescentes: é muito lento ter que trocar tanta memória, pois o acesso ao HDD é um fator 1000 mais lento que a RAM: bom em caso de emergência, mas não muito bom para o uso diário! Na época, quando você ficou sem espaço de troca, era hora de adicionar mais RAM! (o que ainda é verdade hoje).
No presente:
Se você não usa a hibernação e sua memória excede 1 GByte, a nova regra geral é
round(sqrt(RAM))
ondeRAM
está obviamente o tamanho da sua RAM em GB.Se você usar a hibernação, precisará trocar toda a quantidade de RAM + RAM já trocada pelo disco, assim a fórmula se tornará:
RAM+round(sqrt(RAM))
A regra dos retornos decrescentes ainda é válida hoje, mas a menos que você teste seu uso real, usar 2xRAM é apenas um desperdício de espaço em disco , portanto, não use o máximo, a menos que você fique sem espaço de troca usando as outras metodologias .
Todos eles juntos fornecem a seguinte tabela: (últimas 3 colunas indicando espaço de troca)
O acima é apenas uma regra de ouro; não é a lei da gravidade!
Você pode violar esta regra (diferente da lei da gravidade) se o seu caso de uso específico for diferente!
Dica profissional: sempre aloque SWAP no início de um disco rígido, pois os cabeçotes precisam se mover menos na parte interna do disco.
Sim: nos SSDs, não importa mais onde você localiza a área de troca, pois eles usam tunelamento quântico em vez de cabeças móveis e os SSDs modernos usam todas as suas células de memória (mesmo o espaço não alocado) para impedir a degradação quântica.
Como testar se o seu uso de swap é diferente da regra "genérica":
Basta executar:
que fornecerá uma lista de todos os programas em execução que foram trocados (com o que usar mais espaço de troca na parte superior)
Se você estiver usando mais de alguns KB: redimensione para mais do que o mínimo, caso contrário, não se preocupe ...
Se você estiver em um servidor, pare de ler agora: está tudo pronto!
Se você estiver em um cliente de desktop / laptop (não servidor), deseja que sua GUI seja a mais responsiva possível e só troque quando for realmente necessário . O Ubuntu foi otimizado para trocar cedo para uso do servidor, mas no seu cliente você deseja editar
gimp
rapidamente essa enorme imagem bruta de 250 mega pixels , portanto, definirswappiness
10 para impedir o kernel de trocar cedo demais, garantindo que isso não ocorra ' t trocar tarde demais:e adicione:
até o final do arquivo, salve o arquivo ( Ctrl+ XY+ Enterem nano) e execute:
para recarregar o parâmetro ou apenas pelos velhos tempos, adote a abordagem Window $ e reinicie ... :-)
fonte
Resposta de compromisso: depende do significado de "deveria".
Você precisa de uma partição swap no sentido de que algo ruim acontecerá se você não tiver uma nas condições operacionais descritas? Não.
É aconselhável ter uma partição de swap, caso você acidentalmente crie um exército de porcos de memória, para ter a chance de matá-los antes que o assassino da OOM entre em ação? Sim.
Se a sua RAM física "exceder muito" o uso de memória de dados de todos os programas que você executará simultaneamente o tempo todo, não haverá benefício de desempenho em troca. Se exceder, mas não "muito", pode haver um benefício no desempenho se o sistema operacional puder trocar a memória raramente usada para manter os dados de arquivos mais frequentemente acessados na memória.
Em resumo, é ótimo que você tenha 16 GB de RAM. Mas, se você também tiver um disco de 1 TB, não poderá reservar 16 GB para troca? É apenas 1,5% do disco.
fonte