Imagine um cenário em que 2GiB é trocado por zram e compactado para 1GiB.
Uma vez que a pressão da memória é aliviada e os 2GiB gradualmente não são trocados, o Linux libera o 1GiB de páginas que foram usadas para armazenar as páginas zram compactadas?
Em caso afirmativo, ele desfragmenta as páginas existentes?
Deve haver várias páginas em uma página compactada, o que acontece quando todas, exceto uma, não são trocadas? Todas as páginas permanecem na memória até que a última página seja liberada também?
Eu diria que não por padrão, mas pode ser feito assim.
Isso significa que
zram0
é um dispositivo com capacidade de descarte.De
man swapon
:Basta descobrir em sua distribuição Linux específica onde o
swapon
comando ou equivalente é feito e adicionar adequadamente a opção swapon--discard
ou a opção mountdiscard
neste local (ou pelo menos a=pages
variante).Resposta curta : Sim, as páginas de apoio do zram são liberadas automaticamente.
Após a verificação por experiência (kernel 5.10.105), parece que o armazenamento zram não utilizado é liberado automaticamente, mesmo quando o dispositivo zram é montado sem
discard
.Resumo: O script abaixo executa um processo que aloca uma grande quantidade de memória.
O uso do zram (verificado via
zramctl
) aumenta inicialmente e, em seguida, volta à linha de base após interromper o processo e despejar as páginas trocadas.Fonte de
read_all_mem_pages.rb
:Acredito que a memória consumida pelo zRam nunca seja liberada. Ver
O que importa não é 'TOTAL' que aumenta e diminui, mas 'MEM-USED' que até onde eu testei nunca desce. (Tenho que reiniciar o zramswap.service para voltar a zero). Você só pode obter o campo 'MEM-USED' do zramctl com a opção '--output-all'.