Nos arquivos de serviço do systemd, é possível definir as seguintes opções relacionadas ao planejamento (a partir do systemd.exec
man page , corrija-me se estiver errado):
Nice
Sets the default nice level (scheduling priority) for executed processes. Takes an integer between -20 (highest priority) and 19 (lowest priority). See setpriority(2) for details.
Qual é o nível familiar agradável. Parece que seu efeito é "subvertido" de alguma forma devido ao recurso "autogroup" dos kernels linux recentes. Então, as opções abaixo podem ser o que eu realmente quero definir para manter os processos se comportando bem para a minha experiência de desktop.
CPUSchedulingPolicy
Sets the CPU scheduling policy for executed processes. Takes one of other, batch, idle, fifo or rr. See sched_setscheduler(2) for details.
CPUSchedulingPriority
Sets the CPU scheduling priority for executed processes. The available priority range depends on the selected CPU scheduling policy (see above). For real-time scheduling policies an integer between 1 (lowest priority) and 99 (highest priority) can be used. See sched_setscheduler(2) for details.
CPUSchedulingResetOnFork
Takes a boolean argument. If true, elevated CPU scheduling priorities and policies will be reset when the executed processes fork, and can hence not leak into child processes. See sched_setscheduler(2) for details. Defaults to false.
Eu entendo a última opção. Eu entendo pela explicação dos dois primeiros que eu posso escolher uma política de escalonamento e então, dada essa política, uma prioridade. Não está totalmente claro para mim o que devo escolher para quais tipos de tarefas. Por exemplo, é seguro escolher "inativo" para tarefas de backup (com uso intensivo de CPU, porque desduplica), ou outro é mais adequado?
Em geral, obter uma visão geral compreensível de cada política, com cada uma das suas prioridades e adequação para fins específicos é o que estou procurando. Também a interação com o nível bom é de interesse.
Próximo ao agendamento da CPU, há o agendamento de IO. Eu acho que isso corresponde a ionice
(me corrija se eu estiver errado).
IOSchedulingClass
Sets the I/O scheduling class for executed processes. Takes an integer between 0 and 3 or one of the strings none, realtime, best-effort or idle. See ioprio_set(2) for details.
IOSchedulingPriority
Sets the I/O scheduling priority for executed processes. Takes an integer between 0 (highest priority) and 7 (lowest priority). The available priorities depend on the selected I/O scheduling class (see above). See ioprio_set(2) for details.
Aqui vemos a mesma estrutura do agendamento da CPU. Eu estou procurando o mesmo tipo de informação também.
Para todas as opções de "Programação", as páginas do manual mencionadas não são claras o suficiente para mim, principalmente para traduzir as coisas para o ponto de vista de um usuário de área de trabalho tecnicamente inclinado.