Forçar as páginas do processo a serem desfeitas

3

Eu iniciei 4 processos fazendo cálculos pesados. A máquina tem 4 núcleos completos, e cada processo é single-threaded, então eles não competem pela CPU. No entanto, percebi que eles exigem mais memória do que fisicamente existem neste sistema (16GB). Agora, o espaço de endereçamento alocado combinado é de cerca de 20 GB, então cada um deles tem parte de seu espaço de endereço trocado.

Então eu decidi suspender um desses processos e queria colocar suas páginas de memória para trocar, para que a memória física servisse apenas os outros três processos. Eu suponho que isso acabará acontecendo enquanto os três processos vivos tentarem acessar as páginas trocadas. Mas eu gostaria de forçá-lo para que os cálculos não tenham que esperar por IO.

Minhas perguntas:

  1. É possível forçar a troca de memória de um processo suspenso? (para que não haja IO quando os processos vivos fizerem novas alocações)

  2. É possível forçar a memória de um processo vivo a retornar à RAM?

Este é o Debian SID.

    
por liori 21.04.2012 / 17:34

1 resposta

2

Você pode suspender um dos processos, por exemplo, anexando um depurador ao processo.

 gdb process_executable process_pid

e deixe o agendador linux fazer o resto. Quando os três primeiros processos terminarem, basta desconectar o depurador para retomar o quarto processo.

Você pode alcançar o mesmo propósito apenas emitindo SIGSTOP para o processo:

 kill -stop process_pid

e

 kill -cont process_pid

Para retomar quando os recursos estiverem disponíveis. No futuro, você pode considerar o uso de um agendador de tarefas, como o torque, para agendar os processos de acordo com os requisitos de recursos de forma automática.

Edit: Eu não prestei atenção à pergunta original e perdi que suspender o processo não é um problema. A questão é que simplesmente mover páginas para trocar e voltar leva muito tempo.

    
por 21.04.2012 / 17:54