Tenho 64 GB de RAM e SSD de 240 GB no meu computador, que vou usar para cálculos com muita memória (aprendizado de máquina, mineração de dados etc.). A maioria dos conselhos que encontrei na Internet são de computadores com RAM de 2-4 a 8 GB e recomendam o dobro do tamanho da partição de troca de RAM (aproximadamente 128 GB).
É razoável fazer uma partição de swap de 128 GB? que vantagens eu ganho criando uma enorme partição de swap?
Entendo corretamente que, no caso de ficar sem memória RAM física:
- Se não houver troca, recebo um erro de 'falta de memória'
- Se eu tiver swap, algumas páginas da RAM serão copiadas para trocar a partição e o programa continuará sendo executado (embora mais devagar).
Algumas pessoas dizem que é uma má idéia fazer uma troca no SSD, pois ele possui uma quantidade limitada de ciclos de leitura / gravação. Quão rápido o uso do swap esgotará os ciclos de leitura / gravação de SSD (até onde eu sei, são cerca de 50000 IOPS de gravação)?
Estou usando o Linux ( Ubuntu 14.04 (Trusty Tahr)).
Vamos definir uma troca de 16 GB por enquanto, como deve ser o suficiente (por exemplo, RedHat sugere 4 GB), e 16 GB de espaço em disco não é realmente um grande problema.
fonte
mmap
para alocar as páginas do conjunto de trabalho. Então, sua quantidade de swap será exatamente a quantidade necessária para o seu processo.discard
em um SSD. Além disso (e isso foi mencionado em uma resposta abaixo), não se esqueça de que você pode usar um arquivo em vez de uma partição para um gerenciamento potencialmente mais fácil (e nenhum resultado de desempenho em um SSD devido a, por exemplo, fragmentação).Respostas:
Você provavelmente só precisa de uma pequena quantidade de swap. Quando você tem RAM suficiente para o conjunto de trabalho típico do seu computador, o que tenho certeza, você só precisa trocar por duas coisas:
Você precisa trocar para obter informações que provavelmente nunca serão acessadas pela RAM para liberar mais espaço para o cache do disco. Muitos aplicativos são executados na inicialização do sistema e nunca serão acessados novamente. Você não quer que nenhuma página que esteja suja fique presa na RAM para sempre. Então você precisa trocar para segurá-los.
Você precisa trocar para cobrir alocações que nunca serão preenchidas. Esse espaço simplesmente precisa estar disponível, mesmo que não seja usado. Sem ele, o sistema terá que se recusar a alocar memória, mesmo quando tiver bastante RAM física livre, porque possui armazenamento de backup insuficiente para permitir que todas as suas alocações sejam usadas de uma só vez.
Nenhum desses requer uma grande quantidade de swap. 16 GB, por exemplo, deve ser mais do que suficiente. O objetivo não é permitir que você execute conjuntos de trabalho maiores ao custo da velocidade. O objetivo é permitir que você use seus 64 GB com eficiência e não tenha que entupi-lo com lixo ou reservá-lo para casos extremos que nunca acontecerão.
(Concordo com Bert que 4 GB provavelmente são suficientes.)
fonte
A RedHat recomenda 4 GB em uma máquina com 64 GB .
No entanto, a troca de tamanho é mais uma arte do que uma ciência. Depende de para que a máquina está sendo usada, de quanto espaço em disco e memória você possui e de outros fatores. Lembre-se, você sempre pode adicionar mais trocas posteriormente.
O uso da regra de memória física 2X está desatualizada com a quantidade de sistemas de memória atualmente. Mas executar com troca zero não é recomendado, a menos que você saiba o que está fazendo. A recomendação de 4 GB é um bom ponto de partida.
fonte
No Linux, você precisa de troca suficiente para que a memória virtual total disponível (RAM + SWAP) seja suficiente para todos os processos que você deseja executar ao mesmo tempo e com o seu espaço virtual máximo.
Se você tiver menos troca do que essa ou nenhuma troca, a seguinte situação ocorre: o sistema fica sem memória tentando alocar uma página. Porém, isso ainda é uma falha suave, embora não haja troca, porque o sistema possui muitas páginas "vítimas" que podem ser removidas para criar espaço: ou seja, as páginas de todos os mapeamentos de memória com backup de arquivos, como executáveis e bibliotecas compartilhadas!
À medida que seu sistema exige cada vez mais espaço para os dados (que não podem ser trocados), evacua cada vez mais o código executável (bibliotecas e executáveis compartilhados), levando a uma surra terrível, pois o conjunto de trabalho é aparado em um conjunto cada vez mais Páginas.
O espaço de troca suaviza esse problema fornecendo um local para troca de páginas anônimas (não mapeadas por arquivos): as páginas usadas para alocações de memória, para que o código executável possa permanecer na memória.
Mesmo assim, se você não executar frequentemente tarefas que consomem muita memória, poderá executar a maior parte do tempo sem interrupções e configurar manualmente um arquivo de troca (em vez de uma partição dedicada) quando necessário. Para criar um arquivo de troca rapidamente, torne-se root e:
Quando você não precisar mais:
Notas:
Definitivamente, você não precisa configurar pelo menos a quantidade de permuta que possui RAM. Essa regra geral remonta aos sistemas operacionais em que era um requisito difícil devido à maneira como a troca foi projetada.
Existem maneiras de fazer com que o Linux falhe com dificuldade quando não há memória disponível, ou seja, manipulando os valores dessas entradas sysctl:
fonte
If I have no swap, I get an 'out of memory' error
- que éfalse
- a verdade é que quando você fica sem espaço de troca, o killer de falta de memória entra em ação e mata um processo aleatório para liberar espaço - portanto, a quantidade de espaço de troca necessária depende de como o aplicativo é gravado.Há mais considerações. Se você precisa / deseja suspender para trabalhar, precisa de pelo menos o tamanho da sua RAM e mais. No entanto, parece improvável que você precise, já que parece criar principalmente um cavalo de trabalho computacional.
Nesse caso, considere usar um arquivo de troca em vez de uma partição. Você não precisa se preocupar em dimensionar muito, livrar-se ou adicioná-lo mais tarde não requer reparticionamento. Não há penalidade de desempenho (perceptível) usando um arquivo em uma partição. Se você precisar, dê uma olhada no tamanho e isso também lhe dará boas dicas.
fonte
A carga de trabalho que você deseja aplicar à máquina precisa de uma certa quantidade de memória para executar (lembre-se de adicionar o suficiente à equação para lidar com picos de carga) e você precisa configurar o computador para ter pelo menos isso.
Os sistemas operacionais modernos fornecer memória virtual como uma combinação de memória física e espaço de troca, por isso, se você precisar de mais memória do que a máquina tem disponível, você deve adicionar espaço de swap suficiente para preencher a lacuna. Ou seja, se você precisa de 80 GB no máximo e a máquina possui 64 GB, é necessário trocar 16 GB.
Normalmente, os instaladores de sistemas operacionais solicitam que você faça uma área de troca inicial (como essa é a mais simples e permite a instalação de computadores minúsculos), e descobriu-se que uma boa regra geral para operações típicas do Unix é ter uma memória virtual dimensionada para ser três vezes a memória física; portanto, isso geralmente é sugerido. Você, no entanto, sabe mais sobre o padrão de uso para poder alterar isso conforme apropriado.
Não há nada errado em trabalhar sem espaço de troca se a pressão da memória sempre for menor. O Linux usará de forma transparente qualquer memória não utilizada como cache de disco.
fonte
Uma idéia muito melhor do que ter "muita troca" é (re) organizar seu trabalho para que os conjuntos de trabalho caibam na memória e, em seguida, usar o sistema de arquivos para armazenar e recuperar o trabalho que você faz. Ou seja, em vez de forçar o sistema operacional a adivinhar quais serão seus padrões de uso de memória, use o que você sabe sobre seus problemas para controlar seus padrões de uso de memória.
Como um exemplo aleatório que é imediatamente relevante para mim neste verão ... Na implementação da peneira quadrática, é preciso uma matriz grande (aparentemente) contígua para marcar (com algum algoritmo complicado cujos detalhes realmente não importam para este exemplo). A matriz precisa ter ~ 100 entradas de Giga, tão facilmente na faixa de 1 TB. Eu poderia fingir alocar isso e deixar que o sistema operacional fizesse uma quantidade incrível de trocas ineficientes para obter páginas dentro e fora da RAM para suportar todas as gravações seqüenciais na matriz. Em vez de fazer algo que não importa, planejei alocar uma matriz muito menor que caiba exatamente na memória e, em seguida, reutilizar essa pequena matriz para cobrir iterativamente o restante da grande matriz em fatias. Eu também tirei o sistema operacional, tirei o conjunto de serviços em execução, substituí o shell,
O SSD pode ser rápido, mas não é tão rápido quanto a organização de seu cálculo para executar o mesmo conjunto de operações sem a interrupção da troca.
fonte
Como os outros mencionados, uma partição swap é uma boa idéia, mesmo se você tiver bastante RAM. Não é uma boa ideia colocá-lo em um SSD; as gravações frequentes de uma partição de swap acabarão desgastando sua unidade.
Se você tiver uma porta USB 3.0 sobressalente, sugiro usar uma unidade flash para o seu espaço de troca. Existem muitas unidades flash de alta velocidade que são tão rápidas quanto o seu SSD, mas muito mais baratas - baratas o suficiente para serem substituídas se começarem a falhar. Uma pesquisa rápida na Amazon mostra que existem muitas unidades flash USB 3.0 de 16 GB decentes por menos de US $ 20 e até algumas unidades de 64 GB com menos de US $ 60.
Particione a unidade flash inteira como espaço de troca, e você terá espaço para troca, se necessário, e tranqüilidade sabendo que a memória que está sendo gravada repetidamente é fácil (e barata) substituível.
fonte
Você ficará bem, mesmo com 1GiB (e provavelmente menos) de swap. Meu computador de trabalho normalmente não usa mais que 140-150 MiB. Um gigabyte é um excesso de provisionamento para isso.
A menos que você calcule tarefas que exijam conjuntos de dados na ordem de centenas de gigabytes e (este é importante!) Os dados sejam acessados de maneira mais ou menos acessada uma vez, você nunca desejará uma troca muito maior que isso. Mas, novamente, o simples mapeamento de memória de um arquivo de dados funciona igualmente bem para esse aplicativo.
Mas mais troca ajuda mais, certo? Mais de tudo é sempre melhor!
Considere a diferença que uma troca de, digamos, 16GiB fará (ou pense em 64GiB). Se você nunca usar esses 16GiB, também não poderá deixá-los de lado. Mas se você usá-los, o que acontece? O disco, comparado com a memória principal, é extremamente lento. Mesmo com um SSD SATA-600, a transferência de 16GiB leva entre 30 e 40 segundos e 2-4 vezes mais em algumas outras configurações.
Agora alguém inevitavelmente objeta que você está paginando mais ou menos uma dúzia de páginas de 4kiB, e não 16GiB de uma só vez. Embora isso seja verdade, o ponto permanece. Se você precisar trocar e trocar algumas páginas, não precisará de 16GiB de swap, mas se precisar de 16GiB de swap, também será possível transferi-las (de uma maneira ou de outra).
Em teoria, 99,9% de todos os usuários poderiam usar uma máquina de 64GiB (ou qualquer máquina de 8 + GiB) sem qualquer troca e, provavelmente, nunca notariam algo faltando. No entanto, isso não é aconselhável.
Primeiro, ele é sub-ideal, porque o sistema operacional tem menos opções no que pode descartar quando a memória física está acabando. Há duas coisas que ele pode fazer: Troque algo que não é usado ou jogue fora as páginas do cache do buffer. Se você não tem troca, há apenas uma coisa que pode ser feita. Jogar fora as páginas do cache do buffer é inofensivo, mas pode afetar visivelmente o desempenho.
Segundo, os mapeamentos anônimos privados podem simplesmente falhar se não houver troca. Isso geralmente não acontece, mas, eventualmente, quando não há memória física suficiente para satisfazer a todos e não há troca, o sistema operacional tem apenas essa opção, exceto ...
Terceiro, o temido assassino do OOM pode entrar em ação O que significa que um processo mais ou menos aleatório é morto. Não, obrigado. Isso não é algo que você deseja que aconteça.
Com isso dito, conselhos como você precisa de uma troca X vezes a quantidade de RAM instalada vêm de pessoas que repetem algo que ouviram (e não entenderam!) De alguém que repetiu algo que ouviram (e não entenderam!) Décadas atrás.
A regra "use 2X your RAM" foi uma regra fácil de lembrar nas décadas de 1980 e 1990, nunca foi a "verdade de ouro" (apenas algo que funcionou bem para a maioria dos usuários), e não se aplica a todos os dias de hoje .
Você deve ter uma quantidade razoável de trocas que possa pagar com facilidade (digamos, um gigabyte), para que o sistema operacional possa paginar algumas coisas obsoletas e para que o mundo não termine imediatamente quando você pedir um pouco mais de memória. Mas é isso.
fonte