Usando cgroups para escrever um agendador de trabalhos

1

Um problema com o cron é que, se houver mais tarefas que possam ser executadas razoavelmente em um determinado momento, o cron não se importa: ele gerará os trabalhos de qualquer maneira, resultando em desempenho ruim para todos eles.

Suponha que eu queira escrever um agendador do tipo cron, mas um que limita a geração apenas ao que a máquina pode realmente manipular. Os trabalhos que atualmente não podem ser tratados são adiados e repetidos.

Por exemplo, suponha que haja, por exemplo, 10 trabalhos executados a cada 5 minutos. A máquina pode, na verdade, apenas lidar com, digamos, 5 por vez. Por exemplo, às 11:05, em vez de gerar todos os 10 trabalhos, ele geraria apenas 5. No entanto, a cada poucos segundos, veria se a carga da CPU havia caído (porque alguns dos 5 trabalhos originais foram concluídos). Nesse caso, isso geraria alguns dos trabalhos anteriormente adiados. Isso seria repetido até que todos os trabalhos que deveriam ser executados às 11h05 tenham sido executados; ou, para trabalhos que não puderam ser executados antes que a próxima instância deles seja executada (neste caso, às 11:10) simplesmente não serão executados (ignorados).

Se eu quiser restringir todos esses trabalhos para não usar mais do que, digamos, 50% da CPU, parece que usar um cgroup seria uma maneira de realizar isso.

A questão : existe uma maneira de saber quanto da capacidade atual da CPU do cgroup está sendo usada? Por exemplo, se o agendador gerou 5 trabalhos e esses 5 empregos no total estão usando apenas, digamos, 80% dos 50%, então o agendador provavelmente poderia gerar pelo menos mais um trabalho, já que 20% dos 50% estão sendo desperdiçados atualmente .

    
por Paul J. Lucas 10.08.2016 / 18:47

0 respostas