H. Problemas
Nos meus experimentos iniciais, vi que não funcionava. Ou o serviço não iniciava, ou iniciava em um só núcleo, ou não funcionava nada.
Especulo que o sistema não conseguiu identificar a multiplicidade, todos os núcleos, devido à alguma variável de ambiente.
Como você sabe que não funcionou? Execute alguns testes:
# swapon -sv
Só verá a Swap normal ou, ela e um só núcleo ativado.
Para verificar mais, execute:
# systemctl status zswap@zram0.service
E verá erros de serviço, parado ou descarregado. Agora execute:
# usr/sbin/zswap.sh start ram0
Isso ativa só um núcleo, e indica que seu ZRAM funciona, porém não iniciando no boot.
I. Solução
ResolvÍ com um "procedimento técnico e científico rigoroso", uma tradicional "gambiarra"! rsrs!
Localize o arquivo
/etc/systemd/system/local-fs.target.wants/zswap@zram0.service e o copie, para protegê-lo. Isso sempre é uma boa prática em
Linux:
# cp /etc/systemd/system/local-fs.target.wants/zswap@zram0.service /etc/systemd/system/local-fs.target.wants/zswap@zram0.service.original
Agora, edite o arquivo como root, usando seu editor padrão ou favorito. Eu usei Kwrite, mas você pode usar o que quiser:
kdesudo kwrite /etc/systemd/system/local-fs.target.wants/zswap@zram0.service
Deixe o arquivo semelhante ao meu, apenas adaptando para o número de núcleos do seu processador:
[Unit]
Description=zRAM Swap %i
[Service]
Type=oneshot
RemainAfterExit=true
# Linhas eram assim, no Arquivo Original, Comentadas para não atuar
# ExecStart=/usr/sbin/zswap.sh start %i
# ExecStop=/usr/sbin/zswap.sh stop %i
# Editado para Iniciar e Parar todos os núcleos, de 0 a 7
# Adapte para o seu número de núcleos, ou só alguns, caso não queira iniciar todos:
ExecStart=/usr/sbin/zswap.sh start ram0
ExecStop=/usr/sbin/zswap.sh stop ram0
ExecStart=/usr/sbin/zswap.sh start ram1
ExecStop=/usr/sbin/zswap.sh stop ram1
ExecStart=/usr/sbin/zswap.sh start ram2
ExecStop=/usr/sbin/zswap.sh stop ram2
ExecStart=/usr/sbin/zswap.sh start ram3
ExecStop=/usr/sbin/zswap.sh stop ram3
ExecStart=/usr/sbin/zswap.sh start ram4
ExecStop=/usr/sbin/zswap.sh stop ram4
ExecStart=/usr/sbin/zswap.sh start ram5
ExecStop=/usr/sbin/zswap.sh stop ram5
ExecStart=/usr/sbin/zswap.sh start ram6
ExecStop=/usr/sbin/zswap.sh stop ram6
ExecStart=/usr/sbin/zswap.sh start ram7
ExecStop=/usr/sbin/zswap.sh stop ram7
[Install]
WantedBy=local-fs.target
Salve o arquivo, sem mudar o nome. Feche a sessão e reinicie o micro. Tudo deve estar funcionando, agora.
Danilo Pianini (página 2, REF. 10) sugere que se isso ocorrer, você crie várias instâncias do serviço, uma para cada núcleo, tipo o exemplo, para dois núcleos:
# systemctl enable zswap@zram0.service
# systemctl enable zswap@zram1.service
Mas se você tiver vários núcleos, eu acho pouco prático.