Qual é o valor apropriado de vm.swappiness ao usar o zram?

13

Estou usando o zram no meu computador como um swap suportado por RAM compactado. Quando o sistema precisa trocar alguma coisa, trocá-lo por um arquivo de swap com suporte a zram é mais ou menos equivalente a compactar esses dados na memória para liberar espaço. Isso faz com que a troca seja muito rápida na maioria das vezes, em relação ao swap com backup em disco. Por causa disso, eu me pergunto se há algum desempenho a ser obtido encorajando o sistema a trocar coisas não usadas de forma mais agressiva, já que ele pode fazer isso sem realmente bater no disco?

Então alguém mexeu com, digamos, definir vm.swappiness para 100 enquanto usava o zram? Isso seria desejável?

sysctl -w vm.swappiness=100
    
por Ryan Thompson 12.03.2012 / 22:26

3 respostas

2

Eu realmente não recomendaria colocar o swappiness mais alto. Um mecanismo comum no kernel é que ele irá colocar páginas (pedaço de memória) no swap para liberar alguma memória para outras tarefas em execução.

Primeiro "problema" quando o kernel quer que n páginas sejam liberadas, m (com m < n, m é o número de páginas compactadas necessárias para conter n) são recém-criados na RAM, não tenho certeza se isso pode perturbe o kernel ou não.

Então, de qualquer maneira, quando você tem páginas no swap, é possível que você use o aplicativo mais tarde com algumas de suas páginas na troca. O que o kernel faz é trazer de volta essas páginas para a memória física, mas não as remove da swap (que com swap padrão pode ser visto como caching , então quando o aplicativo volta em segundo plano, o kernel faz não tem que escrever de volta as páginas para a troca lenta). No entanto, com zram, talvez não seja um truque sábio, porque você tem na memória as m páginas em zram + as n páginas que estão de volta na memória!

O kernel tem normalmente uma "memória total" que pode ser usada para fazer seus negócios. Quando você adiciona zram, ele está contando apenas na memória "swap", como seria em qualquer swap baseado em disco, mas reduziu a "memória total" real e isso não é esperado / antecipado pelo kernel. Às vezes você pode ter um comportamento estranho e não desejado por causa disso!

Com o zram, seria bom que o kernel não alternasse demais para essa área quando estivesse sob pressão de memória. E você deve sempre ter uma partição de swap de disco rígido maior, pelo menos, que o tamanho máximo do zram, para que o sistema não receba OOM, enquanto, ao mesmo tempo, você veria muito espaço livre, conforme relatado por free !

    
por 03.03.2013 / 20:02
2

Resposta curta: vm.swappiness=100 é valor apropriado para zram (em menos no Debian Stretch com Linux 4.9, eu acredito que é o melhor valor)

Eu já testei vm.swappiness=100 para mim.

Acho que você pode fazer algum teste simples para saber qual valor é melhor para você.

Também fiz outro programa simples para testar esta questão. x Na minha máquina, um valor vm.swappiness muito baixo (como vm.swappiness=1 ) causará problemas óbvios de resposta.

Sobre SwapCached em /proc/meminfo :

Primeiro, experimente vm.page-cluster=0 , mas talvez possa reduzir alguns SwapCached inúteis de swap-in.

O SwapCached pode acelerar o zram da mesma forma que o dispositivo de troca não-zram

SwapCached pode ser reutilizado (gratuito) quando necessário:

./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715:   delete_from_swap_cache(p);
shmem.c:1115:       delete_from_swap_cache(*pagep);
shmem.c:1645:            * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652:               delete_from_swap_cache(page);
shmem.c:1668:       delete_from_swap_cache(page);
vmscan.c:673:       __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227:   __delete_from_swap_cache(page);
swapfile.c:947:         delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023:            delete_from_swap_cache(page);
swapfile.c:1571:            delete_from_swap_cache(page);
./linux-4.9/mm$ 
    
por 29.07.2017 / 20:23
0

As páginas precisam ser trocadas (em disco) quando a memória está cheia. Se você estiver usando memória para criar o lugar para trocar páginas quando a memória estiver cheia, pode-se pensar que ela supera a finalidade, exceto se a compactação fizer diferença (e então seria natural comprimir a memória diretamente ao invés de passar por troca). Acho que seria necessário fazer um benchmark, já que os computadores estão cada vez mais rápidos em compactar e descomprimir em comparação com a velocidade da memória.

    
por 12.03.2012 / 23:17