Troque o tamanho da partição em um computador de 64 GB de RAM para trabalho que requer muita memória

35

Eu tenho 64 GB de RAM e 240 GB SSD no meu computador, que vou usar para cálculos com uso intensivo de memória (aprendizado de máquina, mineração de dados, etc.). A maioria dos conselhos que encontrei na Internet são de cerca de 2-4-8 GB de RAM, e eles recomendam 2x o tamanho da partição de swap da RAM (então, 128 GB).

É razoável fazer uma partição swap de 128 GB? que vantagens obtenho ao fazer uma partição swap enorme?

Eu entendi corretamente que, caso eu fique sem RAM física:

  1. Se eu não tiver swap, recebo um erro 'out of memory'
  2. Se eu tiver swap, algumas das páginas de RAM serão copiadas para a partição de swap e o programa continuará a ser executado (embora mais lentamente).

Algumas pessoas dizem que é uma má idéia fazer swap no SSD, já que tem uma quantidade limitada de ciclos de leitura / gravação. Com que rapidez o uso de swap irá esgotar os ciclos de leitura / gravação de SSD (até onde eu sei, é cerca de 50000 IOPS de gravação)?

Estou usando o Linux (Ubuntu 14.04) (Trusty Tahr)). / p>

Indo para configurar um swap de 16 GB por enquanto, como deveria ser bastante seguro (por exemplo, RedHat sugere 4 GB), e 16 GB de espaço em disco não é realmente um grande problema.

    
por wrwt 07.07.2014 / 13:59

8 respostas

35

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 eu tenho certeza que você faz, você só precisa trocar por duas coisas:

  1. Você precisa trocar para obter informações que provavelmente nunca serão acessadas fora da RAM para liberar mais espaço para o cache de 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 fique suja na memória RAM para sempre. Então você precisa trocar para mantê-los.

  2. Você precisa trocar para cobrir as alocações que nunca serão preenchidas. Este espaço simplesmente tem que 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 memória RAM livre, porque ela tem armazenamento insuficiente para permitir que todas as suas alocações sejam usadas de uma só vez.

Nenhum destes requer uma grande quantidade de troca. 16GB, por exemplo, deve ser mais 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 64GB de forma eficaz e não tenha que entupi-lo com lixo ou reservá-lo para casos que nunca acontecerão.

(Eu concordo com o Bert que 4GB é bem provável que seja suficiente.)

    
por 07.07.2014 / 15:04
29

O RedHat recomenda 4 GB em uma máquina com 64 GB .

No entanto, o dimensionamento de swap é mais uma arte do que uma ciência. Depende do que a máquina está sendo usada, quanto espaço em disco e memória você tem e outros fatores. Lembre-se, você sempre pode adicionar mais trocas depois.

O uso da regra de memória física 2X está desatualizado com a quantidade de sistemas de memória atualmente. Mas rodar 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.

    
por 07.07.2014 / 15:09
12

No Linux, você precisa de swap suficiente para que o total de memória virtual disponível (RAM + SWAP) seja suficiente para todos os processos que você deseja executar de uma só vez e seu espaço virtual máximo.

Se você tiver menos troca do que isso, ou nenhuma troca, ocorrerá a seguinte situação: o sistema fica sem memória tentando alocar uma página. Mas, isso ainda é uma falha temporária, embora não haja troca, porque o sistema tem muitas páginas de "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 mais e mais espaço para dados (que não podem ser trocados), ele evacuará cada vez mais o código executável (bibliotecas compartilhadas e executáveis), levando a uma terrível distorção, à medida que o conjunto de trabalho é reduzido. conjunto de páginas mais estreito.

O espaço de troca suaviza esse problema fornecendo um local para que páginas anônimas (não mapeadas por arquivos) sejam trocadas: as páginas usadas para alocações de memória, para que o código executável permaneça na memória.

Mesmo assim, se você não executa frequentemente tarefas que consomem muita memória, você pode ser capaz de se safar correndo na maior parte do tempo, e manualmente configurar um arquivo de troca (ao invés de uma partição dedicada) quando você precisar . Para fazer um arquivo de swap na hora, torne-se root e:

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

Quando você não precisar mais:

swapoff /path/to/swapfile
rm /path/to/swapfile

Notas:

  1. Você definitivamente não precisa configurar pelo menos tanta troca quanto a RAM. Essa regra geral é voltada para sistemas operacionais em que era um requisito difícil devido à maneira como a troca foi projetada.

  2. Existem maneiras de fazer o Linux falhar quando não há memória disponível, ou seja, manipulando os valores dessas entradas sysctl:

    vm.overcommit_memory
    vm.overcommit_ratio
    
por 07.07.2014 / 21:52
3

Existem mais considerações. Se você precisa / quer suspender para trabalhar, então você precisa de pelo menos o tamanho da sua memória RAM e, em seguida, alguns. No entanto, parece improvável que você precise, dado que você parece construir 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, se livrar ou adicioná-lo mais tarde não requer nenhum 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.

    
por 07.07.2014 / 18:50
2

A carga de trabalho que você deseja aplicar à máquina precisa de uma certa quantidade de memória para ser executada (lembre-se de adicionar o suficiente à equação para lidar com cargas de pico) e é necessário configurar seu computador para ter pelo menos isso.

Sistemas operacionais modernos fornecem memória virtual como uma combinação de memória física e espaço de troca, portanto, se você precisar de mais memória do que a máquina disponível, deverá adicionar espaço de troca suficiente para preencher a lacuna. Ou seja se você precisar de 80 GB no máximo e a máquina tiver 64 GB, você precisará de 16 GB de troca.

Normalmente, os instaladores do sistema operacional pedem para você criar uma área de troca inicial (como é o mais simples e permitir a instalação de até computadores minúsculos), e uma boa regra prática para operações típicas do Unix é ter memória virtual dimensionado para ser três vezes a memória física, então isso é normalmente sugerido. Você, no entanto, sabe mais sobre o padrão de uso para que possa alterá-lo conforme apropriado.

Não há nada de errado em trabalhar sem espaço de troca, se a sua pressão de memória for sempre menor. O Linux usará de forma transparente qualquer memória não utilizada como cache de disco.

    
por 07.07.2014 / 20:58
2

Uma ideia muito melhor do que ter "muita troca" é (re) organizar seu trabalho para que os conjuntos de trabalho caibam na memória, depois usar o sistema de arquivos para armazenar e recuperar o trabalho que você faz. Por exemplo, em vez de forçar o SO 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, é necessário um array grande (aparentemente) contíguo para marcar (com algum algoritmo complicado cujos detalhes realmente não importam para isso exemplo). A matriz precisa ter ~ 100 Giga-entradas, tão facilmente na faixa de 1 TB. Eu poderia fingir alocar isso e deixar o SO fazer uma incrível quantidade de troca ineficiente para obter páginas dentro e fora da RAM para suportar todas as gravações sequenciais através da matriz. Em vez de fazer algo que tenha a cabeça estúpida, organizei a alocação de uma matriz muito menor que cabe exatamente na memória e reutilize essa pequena matriz para cobrir iterativamente o restante da grande matriz em fatias. Eu também tirei o sistema operacional, limpei o conjunto de serviços em execução, substituí o shell e personalizei duas camadas de alocadores de memória para fazer o máximo possível manter o máximo de espaço de endereçamento disponível para o meu processo o mais próximo possível.

O SSD pode ser rápido, mas não é tão rápido quanto organizar sua computação para fazer o mesmo conjunto de operações sem nunca parar de trocar.

    
por 08.07.2014 / 03:21
1

Como os outros mencionaram, uma partição swap é uma boa ideia, mesmo que você tenha bastante memória RAM. Não é uma boa ideia colocá-lo em um SSD; as freqüentes gravações de uma partição swap acabarão por desgastar sua unidade.

Se você tiver uma porta USB 3.0 de reposição, sugiro usar uma unidade flash para o seu espaço de troca. Há uma abundância de flash drives de alta velocidade que são tão rápidos quanto o seu SSD, mas muito mais barato - barato o suficiente para substituir se ele começar a falhar. Uma pesquisa rápida na Amazon mostra que há muitos drives flash USB de 16 GB decentes por menos de US $ 20, e até mesmo alguns drives de 64 GB abaixo de US $ 60.

Particione a unidade flash inteira como espaço de troca, e você terá espaço de troca se precisar, e fique tranquilo sabendo que a memória sendo repetidamente escrita é fácil (e barata) substituível.

    
por 07.07.2014 / 19:08
1

Você ficará bem mesmo com 1GiB (e provavelmente menos) de swap. Meu computador de trabalho geralmente não usa mais do que 140-150 MiB. Um gigabyte tem muito provisionamento para isso.
A menos que você calcule tarefas que exijam conjuntos de dados nas centenas de gigabytes e (este é importante!) Os dados são acessados de uma forma mais ou menos de acesso único, você nunca desejará ter um swap muito maior que isso. Mas, novamente, simplesmente o 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 usa esses 16GiB, você pode também não deixá-los de lado em primeiro lugar. Mas se você usá-los, o que acontece? O disco, comparado à 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 objetará que você está paginando uma dúzia de páginas de 4kB, não 16GiB de uma só vez. Embora isso seja verdade, o ponto permanece. Se você precisa apenas trocar algumas páginas, você não precisa de 16GiB de swap, mas se você precisar de 16GiB de swap, você também irá transferi-las (de uma forma ou de outra).

Em teoria, 99,9% de todos os usuários poderiam até usar uma máquina de 64GiB (ou qualquer máquina de 8 + GiB) sem qualquer troca, e provavelmente nunca perceberão algo faltando. No entanto, isso não é aconselhável.
Primeiro, é sub-ótimo porque o sistema operacional tem menos opções no que pode descartar quando fica sem memória física. Há duas coisas que podem ser feitas: Troque algo que não é usado ou jogue fora as páginas do cache de buffer. Se você não tem swap, só há uma coisa que pode fazer. A eliminação de páginas do cache de buffer é inofensiva, mas pode impactar 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 disponível para satisfazê-los todos, e não há swap, o sistema operacional tem apenas essa opção, exceto ...
Terceiro, o temido assassino da OOM pode entrar. O que significa que um processo mais ou menos aleatório é morto. Não, obrigada. Isso não é algo que você queira que aconteça.

Com isso dito, conselhos como você precisa de uma troca X vezes a quantidade de RAM instalada vem de pessoas que repetem algo que ouviram (e não entenderam!) de alguém que repetiu algo que ouviu (e não entendeu há décadas atrás.
A regra "use 2X your RAM" foi fácil de lembrar nas décadas de 1980 e 1990, nunca foi a "verdade dourada" (algo que funcionou bem para a maioria dos usuários), e não se aplica em nada hoje em dia .

Você deve ter uma quantidade razoável de swap que você pode facilmente pagar (digamos, um gigabyte), então o sistema operacional pode mostrar algumas coisas obsoletas, e assim o mundo não termina imediatamente quando você uma vez pede um pouco mais de memória. Mas é isso.

    
por 08.07.2014 / 17:58