A troca não é copiada de volta na memória física

1

Tenho uma pergunta sobre swap e physical memory . Muitas vezes executo um programa que requer muita memória e, como resultado, vejo alguns dos dados serem copiados do physical memory para swap . No entanto, uma vez que o programa é encerrado, e o physical memory é liberado, ainda posso ver uma quantidade considerável de dados em swap , o que significativamente atrasa o sistema e é irritante!

Qual é a razão por trás disso e como o sistema operacional decide qual parte dos dados deve ir para swap ? Por quanto tempo esses dados devem estar lá e como são "liberados"?

    
por GradGuy 27.03.2012 / 00:45

2 respostas

2

Se você costuma experimentar lentidão devido à troca de páginas, provavelmente precisará de mais memória. O desligamento de serviços não utilizados ou de baixa prioridade e a realização de outros ajustes redutores de memória podem ser usados como um temporário temporário.

  

Qual é a razão por trás disso e como o sistema operacional decide qual parte dos dados deve ser trocada?

Enquanto o processo de memória pesada estava sendo executado, as páginas de gerenciamento de memória eram trocadas para dar espaço ao seu processo. Isso geralmente é feito em uma base menos utilizada recentemente. (Os programas geralmente têm páginas de memória que eram necessárias em um ponto, mas não são mais.)

Se você tiver vários dispositivos, poderá quebrar o mapeamento da página removendo essa partição de troca. Isso forçará as páginas na memória (embora elas possam ser trocadas rapidamente).

  

Por quanto tempo esses dados devem estar lá e como são "liberados"?

Uma vez mapeado para swap, as páginas podem permanecer mapeadas para trocar até que o processo seja finalizado, ponto no qual as páginas são "liberadas". Páginas mapeadas para o espaço de troca podem estar localizadas na memória. O gerenciador de páginas pode manter o mapeamento para evitar a necessidade de remapear a página se precisar ser trocado novamente.

Alguma lentidão enquanto as páginas são trocadas na memória é esperada. Dependendo da demanda de memória e do agendamento do programa, o uso do swap é conhecido por diminuir significativamente o desempenho.

Usar sar ou munin para monitorar a atividade de entrada / saída da página deve permitir que você veja quanto tempo leva para mapear páginas ativas na memória. Uma vez que eles tenham sido trocados de volta na memória, eles devem permanecer lá enquanto a memória estiver disponível.

Algumas coisas que podem aumentar o desempenho do swap.

  • Uma partição de troca dedicada localizada próxima a partições ativamente acessadas. Isso reduz a latência da cabeça quando a troca é necessária.
  • Usando um arquivo de troca localizado na partição mais usada. Isso pode reduzir a latência da cabeça.
  • Uma unidade dedicada para a partição de troca. Várias melhorias de desempenho de E / S se aplicam.
  • Uso de um SSD para espaço de troca. AE / S é muito mais rápida que o disco. (Uma unidade USB rápida também pode ter um desempenho melhor do que o seu disco, mas mede as taxas de E / S primeiro.)

Arquivos e partições de troca podem ser adicionados e removidos de um sistema em execução. Dispositivos de troca podem ter prioridades diferentes para controlar qual dispositivo é usado primeiro.

    
por BillThor 27.03.2012 / 02:21
3

Estou simplificando as coisas, mas há apenas duas instâncias em que a memória paginada na troca é copiada de volta para a RAM física:

  1. Há uma falha de página (o aplicativo tenta chamar a memória mapeada para trocar).
  2. Você usa sudo swapoff -a (et al) para desativar a troca.

Qualquer outra coisa tende a ser uma perda de tempo. A memória no swap tende a ser algo relativamente não utilizado, com baixo tráfego. O algoritmo que o Linux usa para troca é LRU (Menos recentemente usado). Se você se encontrar em uma situação na qual está obtendo lixo de disco e os aplicativos estão parando nas falhas da página, o problema é simples de corrigir: você precisa de mais memória RAM.

A memória apenas em swap não atrasa o computador. Só tem esse efeito quando algo tem que ser preso na troca e usado.

Nota: Como eu disse, estou simplificando as coisas aqui. Gerenciamento de memória é um tópico absolutamente enorme e meus poucos parágrafos não fazem os algoritmos, seus projetistas ou seus implementadores fazerem justiça. Eu tive minha própria quota de batalhas com a memória Linux e gerenciamento de cache ao longo dos anos, mas algo que aprendi até agora: o Kernel devs sabe mais do que eu. Eles configuram as coisas do jeito que estão por um motivo.

    
por Oli 27.03.2012 / 01:17