É possível impedir que um programa específico (por exemplo, rhythmbox e suas dependências) seja trocado para o disco?
Estou perguntando, porque tenho um problema quando um reprodutor de música soluça sempre que o Chromium consome muita memória. Existe uma maneira de contornar isso? Isso não é mais um problema no Windows, então presumivelmente existe um caminho.
ps
outop
para ver se o rhytmbox é realmente trocado verificando o campoRSS
/RES
? Acho que seu problema é causado principalmente por agendamento inadequado. Você deve tentarrenice
o processo rhytmbox ou alterar algumas de suas configurações, por exemplo, o tamanho do buffer de áudio.Respostas:
Eu acho que o problema do soluço não é necessariamente causado pela troca. Se um programa estiver reproduzindo algo, o Linux deve perceber isso e não trocá-lo. Programas que não fazem muito são os primeiros que são trocados. Você pode verificar se o programa está realmente sendo trocado olhando para o campo
RSS
/RES
do ps ou top .RSS
é o tamanho do conjunto residente, a memória física não trocada que uma tarefa está usando (em kiloBytes).Acho que o seu problema provavelmente é causado por agendamento inadequado de CPU e E / S e um pouco de ineficiência do Rhythmbox, o que o torna sensível a altas cargas do sistema. A prioridade da CPU pode ser alterada com os comandos nice e renice . A prioridade de E / S pode ser alterada com o comando ionice . Somente o super usuário pode usar altas prioridades. Você também deve saber que os caras do kernel do Linux estão tentando melhorar a capacidade de resposta dos sistemas de desktop com vários patches de baixa latência, portanto, considere usá-los. Um deles é um patch de ~ 200 linhas escrito por Mike Galbraith que impressionou até Linus. A alternativa para esse patch é o truque dos cgroups de Lennart Poettering que eu acho que será o padrão no Fedora 15.
De qualquer forma, sem esses patches, existem duas opções: iniciar o programa com alta prioridade ou alterá-lo posteriormente. Para a primeira opção, você pode usar um script de wrapper no Rhythmbox:
Você precisará executá-lo como root. Se você não quiser fazer login como root apenas para iniciar isso, use
su
ousudo
.Quanto à alteração da prioridade posteriormente, se você estiver com preguiça de fazer login como root para alterá-la, tente usar um trabalho cron que seja executado a cada 5 minutos e defina a prioridade do
rhythmbox
processo, mas eu não recomendaria isso:fonte
Resposta curta: você não pode e não deveria.
Há muito tempo, os arquivos executáveis respeitavam a parte complicada
+t
que dizia ao kernel para não trocar, mas hoje é ignorado.Se o kernel decidir que precisa trocar, com certeza tem um motivo válido. O Linux é muito agressivo no uso da memória, porque a RAM ociosa é um recurso desperdiçado.
Se você realmente não deseja trocar, obtenha mais RAM ou apenas
# swapoff -a
(não recomendado, pode inutilizar o sistema se você já tiver problemas).Shouldn't
ocorre quando você está desenvolvendo algum aplicativo e não deseja que ele seja trocado. Dê uma olhada nesta postagem no stackoverflow .fonte
Isso parece já ter sido respondido aqui:
/programming/578137/can-i-tell-linux-not-to-swap-out-a-particular-processes-memory
Embora o consenso seja que você provavelmente não deveria: /
fonte
Existem várias maneiras de fazer isso. Você pode tentar "se" diz que o Linux trabalha menos com swap (geralmente):
De: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
Outra opção é usar o gerenciador de kernel do cgroups, isso é específico por processo, mas você terá algum "trabalho" a fazer: Respondido aqui: /unix/10214/per-process-swapiness-for -linux # 10227
fonte
Você pode usar o
mlockall()
syscall. mlockall () força o processo de memória a ser residente (= sem troca, sem supercomprometimento, etc ...). AFAIK, não há nenhum comando shell para fazê-lo, mas é fácil criar um. Seria como:Observe que você precisa ser root para ligar
mlockall()
.No entanto, como dito em outra resposta, não acho que seja realmente o que você deseja.
fonte