Não existe essa ferramenta porque não faz sentido do ponto de vista de um único programa.
Pode-se considerar CPU / HDD / RAM / swap como recursos. Esses recursos podem ser compartilhados de diferentes maneiras pelo sistema operacional entre processos, usuários, contextos, etc.
Em algumas situações específicas, faz sentido dizer ao sistema operacional para impor limites rígidos:
- Não permita que este programa use mais de 60% da memória.
- Não permita que este usuário use mais de 20% do tempo da CPU se outro usuário precisar. Outra coisa permite que ele use 100% da CPU.
- Não permita que usuários desse grupo usem mais de dois núcleos.
- ...
Isso fornece uma flexibilidade real: os recursos são compartilhados entre os usuários de acordo com os desejos do administrador e o SO está em conformidade.
Por que colocar manualmente um programa para trocar não é uma boa ideia?
- Você está basicamente assumindo que é melhor que a heurística no kernel. O kernel já lida com o espaço de troca sozinho. Se um daemon não tiver sido ativado por um longo tempo e o SO não tiver memória RAM, ele eventualmente será colocado em swap.
- AFAIK, swap não é executável: antes de ser executado, o conteúdo do swap precisa ser recuperado na RAM. Então, se você estava pensando em programas de primeira classe sendo executados a partir da RAM e programas de segunda classe sendo executados a partir de swap: pare agora, isso não funcionará.
- "Sim, mas esse daemon específico é chamado duas vezes por mês. Eu não preciso disso na RAM". Se for verdade, o kernel irá colocar em swap se você não tiver RAM.
- "Por que esperar pela falta de RAM?" Colocar as coisas dentro e fora da troca é muito caro, especialmente em HDD antigo. Se o seu sistema puder manter tudo na RAM, é melhor deixá-lo fazer isso. Se você forçar algo na troca, por enquanto, seu sistema será menos responsivo. Já que seus outros daemons de "1ª classe" provavelmente também farão algumas IO de HDD, eles também serão retardados. A mesma coisa quando o daemon "2ª classe" acorda e precisa ser colocado na RAM.
Agora, por que um usuário não pode usar uma linha de comando mágica para colocar um programa em swap?
- Não está claro o que deve ser colocado na troca de uma perspectiva do espaço de usuário (não-kernel). Seu programa está vinculado a
libmylib.so
, deve colocar isso em swap também? E quanto alibc.so
? - Qual é o comportamento pretendido, na verdade? Você quer que o daemon seja colocado diretamente em swap? Mas terá que fazer algum trabalho de inicialização, não vai? Em seguida, ele retornará à RAM assim que for carregado.
- Como você continua sabendo que o daemon não é mais usado e pode ser colocado com segurança no swap novamente?
- Deveria ser enviado de volta ao swap diretamente ou você deveria esperar um pouco? Caso contrário, a cada sono, seu daemon será colocado em swap e a cada despertar, ele será colocado de volta na RAM. Se o seu daemon atualizar o relógio do seu computador, por exemplo, esteja pronto para horas de troca.
- ...
Em suma, você precisa do kernel para lidar com isso e é precisamente isso que faz. Para a maioria das necessidades, ajustar a capacidade de troca é mais do que suficiente para obter um sistema responsivo.
Agora, se você realmente quiser
atire no pé http://freakoutnation.com/wp-content/uploads/2013 /11/Foot-shot.jpg , o kernel oferece essa "flexibilidade" usando cgroups
. Você pode obter o que você acha que deseja definindo max mem e max mem + swap para seu daemon em cgroups
. Você pode obter um resultado mais razoável definindo a permeabilidade por programa. Mas de qualquer forma, não é uma boa ideia e não vou além de isso uma explicação.