Linux: não crie partição swap?

9

Fiquei me perguntando desde que ouvi dizer que a troca é usada quando você está fora ou na RAM, e trocar muito é ruim, pois tenho muita RAM (8GB) ....

e se eu não criar uma partição swap?

Além disso, preciso disso para hibernação ou não é obrigatório?

Mihai Bratulescu
fonte
você deve criar swap, uma vez eu tentei não criar swap, não poderia proceder a instalação
Lynob
o que acontece quando você instala dentro do windows? Eu fiz isso e ele também parecia um pouco lento para o meu equipamento em comparação com janelas, mas eu não criar a partição
Mihai Brătulescu
Eu nunca tentei instalar um Linux dentro do Windows, eu sempre criar uma partição separada
Lynob

Respostas:

13

Os sistemas operacionais modernos requerem um espaço de troca para fazer uso eficiente da RAM. Mesmo que seu sistema possua bastante RAM, o desperdício de RAM resulta em um cache de buffer menor, o que significa maior E / S de disco. Portanto, não importa quanta RAM você tenha, você ainda deseja que o sistema a use com eficiência. Usá-lo com eficiência significa tirar coisas da RAM que são extremamente improváveis ​​de serem acessadas.

Quando você inicia um sistema típico, um grande número de serviços é iniciado. Os programas executam o código de inicialização e modificam os mapeamentos de memória privada no processo. Vários desses serviços nunca serão executados novamente. Muitos deles não funcionam por horas. Sem troca, o sistema operacional não tem escolha a não ser manter os mapeamentos de memória privada modificados associados a esses serviços na RAM para sempre. Essa é a RAM que nunca pode ser usada como cache de disco.

Então você quer trocar se você precisa ou não.

David Schwartz
fonte
8
"Então você quer trocar, se precisa ou não." - Parece que você defendeu que ele precisa ser trocado, quer ele queira ou não.
sawdust
2
Suponha que eu tenha bastante memória RAM e possa gastar 2 GB. Por que eu precisaria de um arquivo de troca?
Tarik
11
Nesse caso, você não precisa de um arquivo de troca. Mas como eu argumentei, você quer um. Porque se você pode ou não dar ao luxo de desperdiçar RAM, você não deve querer usar RAM de forma ineficiente quando você não tem que.
David Schwartz
Estou executando um servidor CLI sem troca e ele funciona perfeitamente. Executando um servidor teamspeak3, apache2, node.js Eu nunca vejo mais de 500M de RAM sendo usados. Portanto, não me incomoda usar a RAM "ineficientemente" AVISO LEGAL: A função de servidor da web deste servidor é exclusivamente para desenvolvimento, portanto a carga é sempre baixa de qualquer maneira. E se eu tiver um vazamento de memória durante o desenvolvimento, prefiro que o assassino da OOM o mate assim que eu ficar sem memória RAM do que empurrar toda essa bobagem para o disco.
Native Coder
12

Eu tenho um sistema de desktop sem troca há alguns anos e está indo muito bem! Existem alguns comportamentos diferentes; alguns deles são vantajosos e outros podem prejudicá-lo. Tudo depende do que você está fazendo.

Uma grande diferença é como o sistema se comporta quando a memória acaba:

Se não houver partição de troca, o killer do OOM será executado imediatamente. Se você tem um programa com memória insuficiente, é provável que esse seja morto. Isso acontece e você recupera o sistema quase instantaneamente.

Se não é uma partição swap, o kernel empurra o conteúdo da memória em swap. Processo incorreto pode continuar alocando memória. Isso continua acontecendo até a troca acabar, o que pode levar de dez minutos a uma hora se você tiver uma grande partição de troca. Enquanto isso, seu sistema fica lento. Torna-se impossível abrir um terminal e interromper o processo. Normalmente, desconecto o cabo de alimentação quando isso acontece.

Portanto, como vou perder meus dados de qualquer maneira quando as OOMs do sistema, prefiro a opção anterior a pelo menos ter uma (alta) chance de recuperação.

Jeff Taylor
fonte
Essa também foi minha experiência. O Linux não lida com a troca de trocas bem o suficiente para permitir que você mate o programa ofensivo. É mais confiável ter apenas o assassino do OOM fazendo isso sozinho. É claro que este é um projeto horrível - um melhor seria congelar o processo ofensivo em vez de matá-lo e fornecer uma boa interface gráfica para permitir que você descongele ou o mate, mas ... Linux.
Timmmm
3
Por fim, uma resposta que faz sentido e corresponde à minha própria experiência. Não consigo compreender a lógica por trás de "você deve ter uma partição de troca". Exceto se queremos hibernar o sistema.
Tarik
5

A troca é necessária para a hibernação; caso contrário, você pode sobreviver sem ela.

psusi
fonte
Portanto, o tamanho da área de troca deve ser um pouco acima do tamanho da memória instalada no seu sistema.
Mdpc
@mdpc, não necessariamente; ele só precisa ser grande o suficiente para conter a memória RAM usada que não pode ser descartada (ou seja, dados suportados por um arquivo no disco).
Psusi
e como você estimaria isso na criação? Você não planejaria e se prepararia para o pior caso, pois o particionamento geralmente é uma dor para mudar depois de definido?
Mdpc 01/09
2

É um equívoco comum pensar que ter uma área de troca afeta negativamente o desempenho. O que afeta severamente o desempenho é não ter RAM suficiente. A área de troca em si não tem efeito negativo no desempenho, a menos que você não se preocupe com a confiabilidade. Pode ter um impacto positivo no desempenho, mesmo quando você acha que possui RAM suficiente (e não há falta de RAM).

Existem essencialmente três casos a serem considerados:

  • 1: Há RAM suficiente para as necessidades internas do kernel, para que todos os seus aplicativos tenham um conjunto de páginas de trabalho na RAM e ainda tenham RAM "livre" para que o cache do buffer armazene a maioria dos dados quentes do sistema de arquivos.

  • 2: igual ao anterior, exceto que você não possui RAM livre suficiente para que o cache do buffer seja totalmente eficiente.

  • 3: Não há RAM suficiente para armazenar as páginas usadas dos aplicativos.

No caso 1, que deve ser a norma para uma máquina de produção, ter ou não uma área de troca não muda nada (pelo menos em sistemas operacionais baseados em Linux e outros sistemas operacionais que comprometem demais a memória).

No caso 2, ter uma área de troca pode melhorar o desempenho geral, permitindo que o sistema pagine páginas usadas com pouca frequência e permita que o cache do buffer desempenhe melhor sua função.

No caso 3, ter uma área de troca permite que o aplicativo continue em execução às custas de uma degradação do desempenho devido à paginação. Por outro lado, a falta de uma área de troca (ou grande o suficiente) fará com que os aplicativos falhem aleatoriamente. Além disso, dependendo das configurações do sistema operacional, o assassino de OOM também pode decidir matar os aplicativos que mais consomem memória, se houver uma forte demanda de RAM, sem sequer dar a eles a chance de salvar seus (seus) dados críticos.

Este último caso é aquele com o qual você deve fazer uma escolha. Certamente, existem alguns casos de uso em que processos são eliminados é a opção preferida, como sistemas em que o tempo de resposta é crucial e onde a perda de uma transação / processo não é grande coisa.

No entanto, como acredito na maioria das situações, é melhor poder dar uma chance ao usuário / administrador perceber a falta de RAM e agir de acordo, sem correr o risco de perder dados.

jlliagre
fonte
1

Se você não quiser usar uma partição de troca, poderá usar um arquivo de troca: uma imagem do sistema de arquivos armazenada em um arquivo comum e usada como seu espaço de troca.

Os seguintes artigos explicam como fazer isso em detalhes:

Joseph R.
fonte
qual é a diferença entre um arquivo de swap e uma partição de swap? e o que aconteceria se eu não tivesse nenhum?
Mihai Bratulescu
velocidade de acesso ....
mdpc 01/09
2
Se usado SIM, é bastante significativo. Se você usa uma partição, é um endereçamento simples; se você usa um arquivo, é necessário fazer toda a sobrecarga do sistema de arquivos para usar um arquivo de troca e NÃO PODE garantir onde os segmentos residirão no disco.
Mdpc 01/09/2013
2
@mdpc A sobrecarga do sistema de arquivos é insignificante a partir do kernel 2.6. Os metadados, o cache e o código do sistema de arquivos são ignorados. Os blocos de disco bruto são simplesmente acessados ​​diretamente.
Jlliagre
11
@mdpc Um arquivo de troca não deve ser significativamente fragmentado, a menos que você o crie ultimamente. Além disso, o acesso de troca raramente é seqüencial, mas principalmente aleatório devido à forma como a paginação por demanda funciona, portanto a fragmentação não deve ser um problema.
Jlliagre
0

É um pouco perigoso, mas você pode executar sem um espaço de troca. Mas se você finalmente exceder a quantidade de memória, seu sistema travará quase imediatamente sem aviso prévio.

O que a troca oferece basicamente é um prolongado, mas muito mais lento para sua memória. Se você exceder, começará a trocar, isso realmente tirará a vida do seu sistema ... NO ENTANTO, matando os processos errantes, você ainda poderá salvar o seu sistema.

Alguns programas insistem em alocar (mas não usar) espaço de troca, alguns deles são programas de banco de dados, se bem me lembro. Novamente, por não ter espaço de troca, você pode limitar os programas que podem ser executados.

Por fim, procure SWAP é BARATO no fato de que você não precisa fazer backup da área. (Espero que você seja um desses excelentes administradores de sistema pendentes que fazem backup de seus sistemas).

Então crie.

Minha regra geral costumava ser 2 * tamanho da memória ..... mas hoje em dia estou bem em muitos casos com 1 * tamanho da memória, mas geralmente uso 1,5 * (tamanho da memória). Você não precisa criar esse valor, mas eu o faria ... especialmente se houver algum tipo de trabalho de produção que você esteja realizando.

Ah, sim, e para a hibernação, é necessário swap para manter uma imagem total da memória. E, portanto, o tamanho, se você estiver considerando a h8ibernação, deve ser PELO MENOS (1 * tamanho da memória) + 100 MB ... os 100 MB são possíveis sobrecargas necessárias no processo.

mdpc
fonte
então ... para alguns programas, você precisa de uma área de troca para que eles funcionem? Eu não estou preocupado de ficar sem RAM com 8GB (embora não impossível)
Mihai Brătulescu
A regra do tamanho da memória 2x é antiga e desatualizada. Mas ter alguma troca não é uma má idéia. Ele não usa muito espaço em disco; portanto, você não perderá o espaço usado; geralmente não é usado se você tiver RAM suficiente e permite despejar o núcleo no seu swap.
Hennes
@Hennes - leia minha nota ... "costumava ser"
mdpc
0

A troca do Linux parece ter um requisito bastante difícil assim que houver pressão de memória. O sintoma é que, se quase toda a memória RAM é usada por processos ativos, o sistema fica paralisado e o disco rígido fica em execução.

Por quê?

As páginas sem um arquivo de backup (geralmente da alocação de memória dinâmica) não podem ser removidas da RAM quando não há troca. O kernel recorre a páginas com um arquivo de backup, mesmo que sejam realmente necessárias em breve novamente, i. e lixeira mesmo sem troca!

Para mais detalhes sobre esse problema sutil, consulte esta postagem do blog.

Conclusão : Sempre tenha uma troca.

E para o tamanho de uma diretriz grosseira, use algo entre 4 e 8 GB, mesmo para sistemas com muita RAM, desde que você não hiberne. Para mais detalhes, consulte a documentação da Red Hat sobre espaço de troca .

nalply
fonte