Reserve RAM para cache e buffer

5

Eu geralmente executo muitos programas e máquinas virtuais na minha área de trabalho. A CPU não é o gargalo, mas a memória. (Comprar mais memória não é uma solução porque não é meu próprio computador.)

Comecei a experimentar o compcache e ele funciona bem na compactação da memória. Eu posso aumentar seu uso pelo swappiness 100. Mas quando real (descomprimido), a memória começa a encher, então o Linux começa a esvaziar caches e buffers antes de trocar o que é ruim para mim, porque alternar entre programas fica dolorosamente lento.

Não consegui encontrar uma maneira de reservar memória para buffers e caches, então comecei a procurar formas alternativas e encontrei cgroups.

No cgroups você não pode definir o limite de memória para os recursos de root, então eu tentei mover todos os processos para um grupo com memória limitada, mas de alguma forma isso não parece funcionar.

Por favor, ajude como posso reservar memória para buffers e caches e começar a trocar para o compcache em um estágio inicial.

    
por Stone 05.01.2012 / 11:49

4 respostas

4

Se você quiser reservar memória para cache e buffer: echo 10 > / proc / sys / vm / vfs_cache_pressure quando 100 é o valor padrão. Então você pode limitar o máximo de memória RAM usado por cada aplicativo: echo 8192 > / proc / sys / vm / max_map_count. Eu recomendo os valores de swapty = 30 e high / proc / sys / vm / dirty_writeback_centisecs e / proc / sys / vm / dirty_expire_centisecs (ambos: 1250). Também pode ajudar a ajustar o sistema de arquivos:

echo 8192 > /sys/block/mmcblk0/queue/max_sectors_kb
echo 8192 > /sys/block/mmcblk1/queue/max_sectors_kb
echo 0 > /sys/block/mmcblk0/queue/iosched/slice_idle
echo 0 > /sys/block/mmcblk1/queue/iosched/slice_idle
echo 160 > /sys/block/mmcblk0/queue/iosched/quantum
echo 160 > /sys/block/mmcblk1/queue/iosched/quantum
echo 800 > /sys/block/mmcblk0/queue/iosched/fifo_expire_sync
echo 800 > /sys/block/mmcblk1/queue/iosched/fifo_expire_sync
echo 180 > /sys/block/mmcblk0/queue/iosched/fifo_expire_async
echo 180 > /sys/block/mmcblk1/queue/iosched/fifo_expire_async
echo 1 > /sys/block/mmcblk0/queue/iosched/back_seek_penalty 
echo 1 > /sys/block/mmcblk1/queue/iosched/back_seek_penalty

Esses valores são do meu celular e do meu laptop e funcionam muito bem e tornam as coisas muito rápidas. Meu celular é limitado à memória, mas esses ajustes ajudam muito. Meu celular também tem cgroups habilitados e eu recomendaria o 4k wonderpatch porque isso adiciona cgroups personalizados a cada aplicativo que um usuário está rodando a partir do terminal (não desktop) mas eu não sei como limitar a memória com cgroups.

    
por 15.01.2012 / 15:45
1

Você não pode reservar memória diretamente para buffers e cache. O kernel usará memória que não é usada para mais nada, às vezes trocando páginas não usadas muito antigas para ganhar mais espaço, então a maneira de resvalidar memória para caches / buffers é limitar a quantidade de aplicativos de RAM (incluindo o virtual máquinas) estão usando.

Um problema comum é alocar mais memopry às VMs do que o necessário, para que o SO na VM tenha espaço para caches de disco. Você pode remover a necessidade de fazer isso ativando o suporte a cache para seus discos virtuais (como fazer isso depende da sua solução de virtualização, que você não indica) permitindo que o host decida quanto de memória é usada globalmente para armazenamento em cache. Dessa forma, você pode reduzir a quantidade de memória alocada para cada VM com menos degradação de desempenho de E / S do que o contrário. Uma palavra de advertência: ao fazer isso, você se abre para um risco extra de corrupção do sistema de arquivos nos discos virtuais, caso sua máquina host tenha um desligamento inadequado (como causado por um corte de energia).

    
por 05.01.2012 / 12:31
1

Se você tiver memória limitada, não tente ditar o uso da memória para o kernel. O kernel provavelmente já está fazendo um trabalho melhor do que você pode fazer com cgroups ou compcache.

A única solução real, se o aumento de memória não for uma opção, é limitar o uso da RAM. O aumento do espaço de troca pode "resolver" o problema, mas causa uma troca demorada entre os processos. Reduzir o uso de RAM pela VM pode melhorar a situação.

Consulte o artigo Reduza a pegada de memória do Linux . Embora a partir de 2007, ainda possa ajudar.

Você também pode compilar seu próprio kernel, desligando todos os serviços e opções que você não precisa. Veja, por exemplo, este artigo: Guia de ajuste de tamanho do kernel .

Você pode mudar para uma versão de memória pequena do Linux, como neste artigo: 8 das melhores pequenas distribuições Linux .

Mas repito que não há uma solução milagrosa que possa permitir que você use muita memória em um computador sem memória, pelo menos não sem muita troca lenta. Você terá que otimizar seus padrões de uso. Otimizar o kernel pode ajudar um pouco, mas tem seus limites.

    
por 15.01.2012 / 15:13
0

Vá para o terminal e vá para o modo raiz, em seguida, faça: nano /etc/sysctl.conf e, na parte inferior, copie isso.

vm.swappiness = 60

vm.overcommit_ratio = 100

vm.min_free_kbytes = 1000000

Esta é a configuração atual que estou usando, as duas linhas de fundo equivale a 1gb, já que estou limitada a 10gb de meus 12gb de RAM, então ela reserva 10% para mim e ajusta-a como é necessário.

    
por 16.03.2018 / 19:01