Força um processo a ser executado na memória virtual? Ubuntu

1

Estou executando uma série de testes para uma implementação de um pager remoto que envia falhas de página para outros computadores em uma rede.

Para encurtar a história, fiquei me perguntando se existe uma maneira fácil de forçar um processo a usar a memória virtual como se opor à RAM física, para que eu possa medir melhor o desempenho da minha implementação em relação ao desempenho do sistema ao alternar para o disco rígido.

    
por Everaldo Aguiar 09.12.2010 / 05:22

4 respostas

1

Isso é difícil, mas o que você precisa essencialmente é que um processo separado consuma toda a RAM disponível, bloqueando seus próprios dados na RAM física, mas deixando toda a troca disponível (você deve ser capaz de ver o efeito usando o comando 'free')

Eu acho que já existem ferramentas para fazer isso (não me lembro de nenhum exemplo específico, mas existem ferramentas para preencher a memória ou testar a memória para erros de bit enquanto o sistema está rodando ... esse tipo de coisa ) ou algo próximo a ele.

Minha pergunta é ... por quê? Por que intencionalmente prejudicar a máquina de teste apenas para obter um número que é altamente específico para sua configuração de swap (tipo de disco, tamanho, taxa de rotação, etc)? Além disso, qual é o recurso intensivo em sua aplicação? Se não for muito (digamos, um ou dois meg de RAM), a troca não vai doer muito.

    
por 09.12.2010 / 06:36
0

bem, para ser claro, a RAM faz parte da hierarquia de memória virtual

não é possível que um processo ignore a RAM ... como as páginas trocadas voltariam a entrar no cache da CPU?

você pode simular algo parecido com uma caixa com RAM ridiculamente baixa, mas mesmo assim você pode ver pelo vmstat que ela ainda está sendo usada e usada de uma maneira não determinística em relação ao seu conjunto de testes

    
por 09.12.2010 / 05:57
0

Você pode limitar a quantidade de RAM física disponível para um processo com ulimit -m . Observe que ulimit é um shell interno, documentado na página do manual do shell ( man sh ou man bash ). Por exemplo, o snippet a seguir limita o programa a 400 kB de memória física:

(ulimit -m 400; exec /path/to/application)

A interface subjacente é setrlimit(RLIMIT_RSS, …) . A página de manual afirma que este limite não é suportado em kernels 2.6, mas eu acho que é obsoleto como RLIMIT_RSS parece ser usado pelos kernels 2.6 atuais .

    
por 10.12.2010 / 00:48
0

Parece-me que ele quer testar se a mensagem do pager sai mesmo quando a máquina que está sendo monitorada está atolada com trocas pesadas. Este é um caso de teste razoável.

Eu provavelmente configurei um programa que alocava lotes de memória e faz leituras e gravações aleatórias por toda essa memória, certificando-se de que cada endereço seja uma página diferente. Execute algumas cópias disso e algumas cópias de um trabalho de compactação de vídeo para consumir ciclos de CPU - isso deve deixar a máquina ocupada.

    
por 10.12.2010 / 01:07