Como configuro o Linux para usar menos memória para cache?

1

Eu tenho uma pergunta de acompanhamento para 377448 , mas não o suficiente para comentar lá.

Antes de eu começar a fazer a mesma pergunta idiota, deixe-me dizer que tenho lido muitos posts e respostas semelhantes sobre cache, e eu entendo o que está acontecendo lá, mas não encontrei uma resposta que se encaixe meu contexto. Qual é isso?

O VirtualBox, ao contrário do que sua documentação diz atualmente, não aloca a memória de base completa do host quando a VM convidada é lançada, mas a aloca como o convidado exige. Em vez de sintonizar e benchmarcar e reajustar a memória base para se ajustar à VM em constante mudança, aloquei mais do que o suficiente - 4 Gig.

O que eu notei é que logo após a inicialização, a VM consome cerca de 2 Gig, mas que com o tempo, mesmo que os aplicativos rodando na VM estejam ociosos, o cache de memória do linux aumenta lentamente até o limite de 4 Gig alcançado.

Como a RAM no laptop é preciosa e minhas demandas de processamento (desempenho) são baixas, adicionei um comando @reboot do cron assim;

@reboot root while true; do sleep 1; /sbin/sysctl -w vm.drop_caches=3; done

que elimina o crescimento contínuo de uma forma que não prejudica visivelmente o desempenho. Intervalos de 1 segundo podem ser muito agressivos, mas vou experimentar isso depois.

Estou muito feliz com o resultado, mas esta solução parece um hack brutal.

Existe um método existente para configurar o cache de memória como 'preguiçoso' / 'agressivo' ou 'alto desempenho' / 'baixo desempenho' ou fornecendo algum limite de tamanho de cache ou intervalo de limpeza de cache?

    
por CAB 01.10.2013 / 20:36

1 resposta

2

Você parece ter dois requisitos conflitantes. "Eu quero alocar 4G para este host" e "Eu não quero que o host use 4G".

Além desse fato, o que faz você pensar que perder esses caches faz com que o hipervisor deixe cair a memória no mapa?

No hypervisor (host virtualbox), pode haver demanda por paging acontecendo - isso é bom, mas o que você acha que está acontecendo provavelmente não é.

Existem dois estágios quando a memória virtual é solicitada.

  • O que é confirmado
  • O que é alocado

Quando a VM inicia, ela se compromete a 4G de memória. Isso é o quanto pode ter, mas não necessariamente o quanto ele realmente usará.

Quando a VM começar a consumir memória, ela alocará as páginas conforme necessário, até o que foi confirmado. A alocação coloca a memória no ram / swap.

Em seu cenário, na verdade, a VM pode (eu não sei o modelo de caixa virtual, mas vou tomar sua palavra para ele) comprometer-se a 4G de memória. Conforme a VM preenche a pagecache, ela alocará toda a memória, como você mencionou. O que não acontecerá acontece, no entanto, é o virtualbox liberando a memória que foi alocada quando você coloca os caches na VM.

Assim, ao liberar o cache de páginas, enquanto parece que a memória está livre na VM, a memória ainda está alocada e usada para o hipervisor.

Como tal, você não salvou nenhuma memória no laptop host, na verdade, você acabou de desperdiçar, porque a memória que poderia ter sido usada para impedir pesquisas de E / S na VM não está mais disponível.

    
por 01.10.2013 / 20:49