Posso marcar o conteúdo da _current_ memory como não trocável?

4

Background : na minha estação de trabalho linux (ubuntu), eu quero rodar algumas experiências que alocam mais memória que a RAM física enquanto eu faço outras coisas 'normais' em a GUI.

Problema : Eu tenho bastante espaço de troca. Quando os experimentos começam a trocar, a GUI se torna irritantemente lenta. Eu suspeito que o problema é que o material 'normal' é continuamente movido para e do espaço de troca. Eu gostaria que o sistema operacional trocasse apenas a memória experimental, e não a memória "normal".

Pergunta : Posso marcar toda a memória alocada em um determinado ponto (por exemplo, antes de iniciar os experimentos) como 'não intercambiável'? Eu não me importo se isso for feito na página ou no nível do processo.

Obrigado pela sua ajuda!

    
por mhernandez 18.12.2015 / 12:41

1 resposta

0

A memória não trocável é chamada de "fixada" e esse é o tipo de memória normalmente usada para o DMA (acesso direto à memória). Você pode marcar uma parte do endereço virtual usando as funções mlock(2) ou [ mlockall(2) ].

Você pode marcar alguma memória de aplicativo fixada, por exemplo, usando o script do GDB mlock.gdb :

call mlockall(3)
detach

E bloqueie a memória da sua aplicação usando esse comando:

 gdb --pid [PID] --batch -x mlock.gdb
    
por 18.12.2015 / 17:19

Tags