Eu tenho uma caixa Debian, onde estou recuperando dados usando o ddrescue em um SSD sata. O processo está em execução há 24 horas e ainda faltam 24 (pelo menos), de qualquer forma, o PC tem 16 GB de RAM e 10 GB de swap. Por alguma razão, há 8 GB de swap em uso e 2 GB de RAM em uso. Isso parece um uso ineficiente de recursos. Eu gostaria de evitar esse comportamento no futuro. Por que os dispositivos de memória estão sendo utilizados dessa maneira?
E o que pode ser feito para evitar esse tipo de operação no futuro?
Swap está sendo usado em vez de memória RAM porque a memória enviada para swap estava inativa, não estava sendo usada, e provavelmente seu ddrescue está puxando muitos dados que estão enchendo o cache na memória RAM.
Este não é realmente um problema de eficiência; ele deve ser capaz de retirar os dados do swap rapidamente quando necessário. Está em troca porque o sistema pensa que aumentar o cache é um melhor uso da memória RAM. Geralmente isso é verdade, mas o ddrescue provavelmente usará esses blocos de disco apenas uma vez.
Esta é uma situação praticamente inofensiva, mas se realmente incomoda você, você pode criar um cgroup, mover o ddrescue para ele e então atualizar o
memory.max
parâmetro desse cgroup para limitar a quantidade de memória RAM que o ddrescue pode usar.Observe que se o ddrescue estiver relendo os blocos mais de uma vez, isso poderá torná-lo muito mais lento. E se não for, alterar este parâmetro não tornará o resto do sistema significativamente mais rápido, pois se as páginas trocadas estivessem sendo usadas, elas não teriam sido trocadas.
Utiliza-se espaço de troca para controlar o que acontece quando os programas alocam toda a memória real e desejam mais. Após todo o cache liberável (alguns blocos em cache estão "em uso" e não podem ser liberados) ter sido liberado, o sistema entra no estado Out-Of-Memory. Na condição Out-Of-Memory, com swap, alguma memória da tarefa é gravada no disco, liberada para reutilização e posteriormente devolvida à memória (trocada) quando a tarefa é executada. Sem swap, o sistema pode congelar, o temido OOM-Killer (um pseudoprocesso, codificado no kernel) é executado e escolhe um processo para KILL, a fim de liberar memória. O OOM-Killer é conhecido por escolhas inconvenientes.