Ah, mas os cgroups são fáceis :) Instale o pacote libcgroup. Crie um /etc/cgconfig.conf:
mount {
cpu = /cgroup/cpu_and_mem;
cpuacct = /cgroup/cpu_and_mem;
memory = /cgroup/cpu_and_mem;
}
group sshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
group nosshd {
cpu {
cpu.shares="500";
}
cpuacct {
cpuacct.usage="0";
}
memory {
memory.limit_in_bytes="1G";
}
}
Inicie o processo cgconfig
, que criará a hierarquia, cgroups e definirá os limites. Se isso der certo, você tem dois cgroups, ambos com 50% da CPU atribuída e 1G de memória disponível (não sei qual é a quantidade real de memória disponível; supondo que seja 2G neste exemplo). Agora você só precisa mover todas as tarefas (ou seja, todos os processos em execução no sistema) do grupo raiz para o nosshd cgroup:
cgroup]# cat tasks >> nosshd/tasks
cgroup]# echo > tasks
Então você só precisa obter o PID do processo sshd
e movê-lo para o arquivo de tarefas sshd:
cgroup]# echo $PID >> sshd/tasks
Ta-da, você está feito. Agora você pode ter certeza de que o sshd sempre terá 50% da CPU e 1G de memória.