Eu uso o unix há um bom tempo e, nos últimos dois anos, senti que a troca é um anacronismo, mas ficaria curioso para saber o que as outras pessoas pensam.
Meu argumento é mais ou menos isso (supondo que não haja ulimit global ou ajustes nas configurações do OOM):
There is little value in swap because if you need to swap out to disk,
odds are it's going to be a vicious cycle where an app will continue
to eat not only real memory, but swap as well until it gets OOM
reaped (_if_ it gets OOM reaped).
If you have swap enabled, it will only prolong this death march to
the detriment of other processes - and in the worst case where the
process is not OOM reaped in a timely manner, grind the system to
a halt.
Without swap, it will probably get OOM reaped sooner (if at all)
Para qualquer serviço ajustado para desempenho, eu acho que entender os limites superiores do uso de recursos seria a chave para ajustá-lo em primeiro lugar; nesse caso, você sabe o quanto precisa.
Não consigo imaginar muitas situações (algumas, mas não muitas) em que você suspenderia um processo em execução e ele poderia ser trocado para dar lugar a outras coisas, mas você ainda perderia seus soquetes se fizesse isso, forçando uma core-dump via gcc ou copiar a memória manualmente seria funcionalmente equivalente.
Definitivamente, eu não gostaria de trocar em um sistema incorporado (mesmo que ele possua uma ram menor disponível), se você ficar sem RAM, prefiro que meu processo morra do que rasgar uma memória flash de um milhão de gravações por setor dirigir durante um fim de semana, nivelando os setores até o ponto mais baixo.
Alguma barba unix por aí tem razões convincentes para continuar trocando?
UPDATE respostas e análise:
CONFIRMADO? - fork () requer a mesma quantidade de memória para o processo filho que o pai
O fork moderno () é copy-on-write para crianças no POSIX (em geral), mas especificamente no Linux e no FreeBSD , e estou assumindo o OSX por extrapolação. Considero essa parte da bagagem anacrônica que a troca leva consigo.
Curiosamente, este artigo do Solaris afirma que, embora o Solaris use o Copy-on-Write com fork (), você deve ter pelo menos 2x (!) O tamanho do processo pai na memória virtual livre para que o fork () não seja um meio. Enquanto o elemento Solaris detém um pouco o argumento de que a troca é um anacronismo - acho que sistemas operacionais suficientes implementam corretamente o CoW de tal maneira que é mais importante dissipar o mito do que marcá-lo como justificativa adicional para a troca. Desde a. Vamos encarar. Nesse ponto, as pessoas que realmente usam o Solaris provavelmente são apenas funcionários da Oracle. Sem ofensa Solaris!
CONFIRMADO - os arquivos tmpfs / ramfs podem ser trocados como uma conveniência quando o tmpfs / ramfs é preenchido
Não use no-limit tmpfs / ramfs! Sempre defina explicitamente a quantidade de ram que você deseja que o tmpfs / ramfs use.
PROVÁVEL - Faça uma pequena troca 'por precaução'
Um dos meus antigos chefes costumava ter um ótimo ditado, 'você não sabe o que não sabe' - essencialmente, você não pode tomar uma decisão com base em informações que ainda não possui. Este é um argumento plausível para troca para mim, no entanto - suspeito que os tipos de coisas que você faria para detectar se seu aplicativo está sendo trocado ou não seriam mais pesados do que verificar se o malloc () é bem-sucedido ou captura a exceção de um novo com falha ().
Isso pode ser útil nos casos em que você está executando uma área de trabalho e tem várias coisas aleatórias acontecendo, mas mesmo assim - se algo der errado, prefiro que o OOM seja colhido do que mergulhar no inferno das trocas. Sou apenas eu.
BUSTED! - No Solaris , a troca é importante por alguns motivos
tmpfs - states A quantidade de espaço livre disponível para tmpfs depende da quantidade de espaço de troca não alocado no sistema. O tamanho de um sistema de arquivos tmpfs aumenta para acomodar os arquivos gravados nele, mas existem algumas vantagens inerentes aos usuários pesados de tmpfs. O Tmpfs compartilha recursos com os segmentos de dados e pilha dos programas em execução. A execução de programas muito grandes pode ser afetada se os sistemas de arquivos tmpfs estiverem próximos do tamanho máximo permitido. O Tmpfs é livre para alocar todos os 4 MB de espaço de troca do sistema, com exceção de 4 MB.
Fatos e mitos do Solaris sobre estados de swap Atualmente, a memória virtual consiste na soma total de RAM física e espaço de swap no disco. O Solaris NÃO exige que nenhum espaço de troca seja configurado. Se você escolher esta opção, quando a RAM estiver cheia, você não poderá iniciar novos processos. .
Não tenho certeza se isso significa que o mapa virtual máximo que você pode criar é ram + swap , ou se você ainda pode fazer algo como mmap (), um arquivo maior que ram, e confiar na preguiçosa inicialização do mmap (). provavelmente pode executar o Solaris hoje em dia sem troca, parece menos amigável do que outros sistemas operacionais POSIXy.
BUSTED! As populares ferramentas de hibernação do Linux parecem confiar na troca
Por padrão, o TuxOnIce parece confiar na troca de hibernação - embora existam outros back-end. No entanto, se você não está executando uma caixa que precisa hibernar, eu ainda estaria por trás da declaração de que 'swap é anacronístico no linux'