
Estou usando o zram no meu computador como um swap compactado com suporte de RAM. Quando o sistema precisa trocar algo, trocá-lo por um arquivo de troca baseado em zram é mais ou menos equivalente a compactar esses dados na memória para liberar espaço. Isso torna a troca muito rápida na maioria das vezes, em relação à troca apoiada em disco. Por causa disso, eu me pergunto se há algum desempenho a ser obtido incentivando o sistema a trocar coisas não utilizadas de forma mais agressiva, já que ele pode fazer isso sem realmente atingir o disco.
Então, alguém mexeu em, digamos, definir vm.swappiness
100 ao usar o zram? Isso seria desejável?
sysctl -w vm.swappiness=100
Responder1
Resposta curta: vm.swappiness=100
évalor apropriadopara zram (pelo menos no Debian Stretch com Linux 4.9, acredito que seja o melhor valor)
Eu já testei vm.swappiness=100
para mim.
Eu acho que você pode fazeralgum teste simplespara ter certeza de qual valor é melhor para você.
Também eu fizoutro programa simplespara testar esta questão. x Na minha máquina, um vm.swappiness
valor muito baixo (como vm.swappiness=1
) causará problemas óbvios de capacidade de resposta.
Sobre SwapCached
em /proc/meminfo
:
Primeiro, tente vm.page-cluster=0
issotalvez possa reduzir algumas inutilidades SwapCached
da troca.
SwapCached pode acelerar o zram da mesma forma que um dispositivo de troca não-zram
SwapCached
é possível reutilizar (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$
Responder2
Eu realmente não recomendaria aumentar a troca. Um mecanismo comum no kernel é colocar páginas (pedaço de memória) na troca para liberar alguma memória para outras tarefas em execução.
Primeiro "problema" quando o kernel deseja 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-criadas na RAM, não tenho certeza se isso pode atrapalhar o kernel ou não.
De qualquer forma, quando você tiver páginas na troca, é possível que você use o aplicativo posteriormente 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 troca (que com a troca padrão pode ser vista comocache, portanto, quando o aplicativo voltar para segundo plano, o kernel não precisará gravar essas páginas na troca lenta). No entanto, com o zram talvez não seja um truque inteligente, porque você terá na memória as m páginas do zram + as n páginas que estão de volta na memória!
O kernel normalmente possui uma "memória total" que pode ser usada para fazer seus negócios. Quando você adiciona zram, ele conta apenas na memória "swap", como seria com 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 indesejado por causa disso!
Com o zram, seria bom que o kernel não trocasse muito para esta área quando estiver sob pressão de memória. E você deve sempre ter uma partição de troca de disco rígido real maior, pelo menos, do tamanho máximo do zram, para que o sistema não receba OOM e, ao mesmo tempo, você veja bastante espaço livre, conforme relatado por free
!
Responder3
https://wiki.archlinux.org/title/Zram#Optimizing_swap_on_zram
Esses valores sãoo que Pop! _OS usa. Essa solicitação pull do Pop!_OS GitHub também está vinculada aalguns testes feitos por usuários no r/Fedora, que determinou que vm.page-cluster = 0 é o ideal. Eles também descobriram que um alto valor de troca é ideal, o que corresponde ao sugerido poros documentos do kernel:
O valor padrão é 60. Para troca na memória, como zram ou zswap, bem como configurações híbridas que possuem troca em dispositivos mais rápidos que o sistema de arquivos, valores acima de 100 podem ser considerados. Por exemplo, se o IO aleatório no dispositivo de troca for em média 2x mais rápido que o IO do sistema de arquivos, a troca deve ser 133 (x + 2x = 200, 2x = 133,33).
Responder4
As páginas precisam ser trocadas (para o disco) quando a memória estiver cheia. Se você estiver usando memória para criar o local para trocar páginas quando a memória estiver cheia, alguém poderia pensar que isso supera o propósito, exceto se a compactação fizer diferença (e então seria natural compactar a memória diretamente em vez de passar por trocar). Acho que seria necessário avaliar isso, já que os computadores são cada vez mais rápidos na compactação e descompactação em comparação com a velocidade da memória.