Eu tenho um laptop Debian (Buster) com 8 GB de RAM e 16 GB de swap. Estou executando uma tarefa de execução muito longa. Isso significa que meu laptop foi deixado nos últimos seis dias enquanto o agitava.
Enquanto isso, periodicamente preciso usar meu laptop como laptop. Isso não deve ser um problema; a tarefa de longa execução é vinculada à E / S, trabalhando em um disco rígido USB e não requer muita RAM (<200 MB) ou CPU (<4%).
O problema é que, quando voltar ao meu laptop depois de algumas horas, ele ficará muito lento e poderá levar 30 minutos para voltar ao normal. Isso é tão ruim que os monitores de falha sinalizam seus respectivos aplicativos como congelados (especialmente as janelas do navegador) e as coisas começam a falhar incorretamente.
Olhando no monitor do sistema, dos 2,5 GB usados em torno da metade são trocados para troca. Confirmei que esse é o problema removendo o espaço de troca ( swapoff /dev/sda8
). Se eu o deixar sem espaço de troca, ele volta à vida quase instantaneamente, mesmo depois de 24 horas. Com a troca, é praticamente um tijolo nos primeiros cinco minutos, restando apenas seis horas. Confirmei que o uso da memória nunca excede 3 GB, mesmo enquanto estiver ausente.
Eu tentei reduzir o swappiness ( veja também: Wikipedia ) para valores de 10
e 0
, mas o problema ainda persiste. Parece que após um dia de inatividade, o kernel acredita que a GUI inteira não é mais necessária e a limpa da RAM (a troca para o disco). A longa tarefa é ler uma vasta árvore de arquivos e ler todos os arquivos. Portanto, pode ser que o kernel esteja confuso ao pensar que o cache ajudaria. Mas, com uma única varredura de um HD USB de 2 TB com ~ 1 bilhão de nomes de arquivo, uma GB de RAM extra não ajudará muito o desempenho. Este é um laptop barato com um disco rígido lento. Simplesmente não é possível carregar os dados de volta para a RAM com rapidez suficiente.
Como posso dizer ao Linux para usar apenas o espaço de troca em uma emergência? Eu não quero correr sem troca. Se algo inesperado acontecer, e o sistema operacional precisar de alguns GBs extras de repente, não quero que as tarefas sejam mortas e prefiro começar a usar o swap. Mas, no momento, se eu deixar a troca ativada, meu laptop não poderá ser usado quando eu precisar.
A definição precisa de "emergência" pode ser motivo de debate. Mas, para esclarecer o que quero dizer: uma emergência seria onde o sistema é deixado sem outra opção além de trocar ou eliminar processos.
O que é uma emergência? - Você realmente precisa perguntar? ... Espero que você nunca se encontre em um prédio em chamas!
Não é possível definir tudo o que possa constituir uma emergência nesta questão. Mas, por exemplo, pode ser uma emergência quando o kernel é tão pressionado por memória que começa a interromper os processos com o OOM Killer . Uma emergência NÃO é quando o kernel pensa que pode melhorar o desempenho usando swap.
Edição final: aceitei uma resposta que faz exatamente o que pedi no nível do sistema operacional. Os futuros leitores também devem tomar nota das respostas que oferecem soluções em nível de aplicativo.