{"id":20578,"date":"2026-08-12T13:59:33","date_gmt":"2026-08-12T11:59:33","guid":{"rendered":"https:\/\/webhosting.de\/cfs-scheduler-fair-scheduling-hosting\/"},"modified":"2026-08-12T13:59:33","modified_gmt":"2026-08-12T11:59:33","slug":"cfs-scheduler-agendamento-equitativo-alojamento","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/cfs-scheduler-fair-scheduling-hosting\/","title":{"rendered":"Agendador CFS do kernel: Compreender o agendamento equitativo em servidores de alojamento"},"content":{"rendered":"<p>Vou explicar como o <strong>CFS<\/strong> O agendador distribui de forma equitativa o tempo de CPU nos servidores de alojamento e mant\u00e9m os tempos de resposta previs\u00edveis. Para tal, mostro concretamente como <strong>vruntime<\/strong>, como as prioridades e os limites do sistema interagem entre si e quais s\u00e3o os par\u00e2metros que fazem a diferen\u00e7a em configura\u00e7\u00f5es produtivas.<\/p>\n\n<h2>Pontos centrais<\/h2>\n\n<p>Para uma vis\u00e3o geral eficaz, vou resumir os aspetos mais importantes antes de aprofundar o assunto. O <strong>Completamente<\/strong> O Fair Scheduler distribui o tempo de processamento de forma justa e atribui prioridades \u00e0s tarefas consoante as necessidades. Nos servidores de alojamento, influencia a lat\u00eancia, o d\u00e9bito e a sensa\u00e7\u00e3o de estabilidade. Avalio par\u00e2metros pr\u00e1ticos de ajuste, cargas de trabalho t\u00edpicas e limites razo\u00e1veis. Al\u00e9m disso, mostro como combino Cgroups, CPU-Quota e Affinity. Desta forma, compreendo as causas dos tempos de espera e reajo de forma espec\u00edfica a <strong>Mudan\u00e7a de contexto<\/strong>.<\/p>\n<p>Os pontos seguintes ajudam a compreender rapidamente o assunto:<\/p>\n<ul>\n  <li><strong>Equidade<\/strong> Antes do desempenho de ponta: distribui\u00e7\u00e3o equitativa da CPU em vez de desempenho individual m\u00e1ximo.<\/li>\n  <li><strong>vruntime<\/strong> controla a ordem: as tarefas com prioridade mais baixa s\u00e3o processadas primeiro.<\/li>\n  <li><strong>Grupos C<\/strong> Or\u00e7amentos limitados: os servi\u00e7os partilham os recursos de forma controlada.<\/li>\n  <li><strong>Lat\u00eancia<\/strong> e granularidade: ajuste preciso da rea\u00e7\u00e3o e da efici\u00eancia.<\/li>\n  <li><strong>Prioridade<\/strong> e interessante: a pondera\u00e7\u00e3o determina a ordem de execu\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/serverraum-fair-scheduling-8247.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Como o CFS distribui de forma justa: vruntime, pondera\u00e7\u00e3o e \u00e1rvore vermelha-preta<\/h2>\n\n<p>Por tr\u00e1s da equidade est\u00e1 a <strong>vruntime<\/strong>, ou seja, um tempo de execu\u00e7\u00e3o virtual que regista o consumo por tarefa de forma ponderada. Cada tarefa acumula vruntime enquanto est\u00e1 em execu\u00e7\u00e3o, e aquela que tiver acumulado menos tem prioridade. O kernel coloca as tarefas execut\u00e1veis numa \u00e1rvore vermelha-preta e, assim, encontra rapidamente a tarefa com o menor \u201eatraso\u201c. Desta forma, poupo intervalos de tempo r\u00edgidos e reduzo a carga administrativa no caminho normal. O importante continua a ser a <strong>pondera\u00e7\u00e3o<\/strong>, que controlo atrav\u00e9s dos valores \u00abnice\u00bb e, assim, ajusto com precis\u00e3o a ordem de prioridade.<\/p>\n\n<p>Em sistemas multicore, o CFS distribui tarefas por fila de execu\u00e7\u00e3o da CPU e equilibra a carga entre os n\u00facleos. Ao faz\u00ea-lo, observo como a afinidade e a topologia NUMA alteram os tempos de execu\u00e7\u00e3o. Se os threads permanecerem num \u00fanico n\u00facleo, reduzem as falhas de cache e perdem menos tempo com a migra\u00e7\u00e3o. Se mudar de n\u00facleo com demasiada frequ\u00eancia, aumentam os custos associados \u00e0s trocas de contexto e aos caches. Uma atribui\u00e7\u00e3o adequada da CPU traz aqui benef\u00edcios percet\u00edveis <strong>Acentos<\/strong>.<\/p>\n\n<h2>Equidade vs. Desempenho em servidores de alojamento<\/h2>\n\n<p>Em servidores com elevada carga, os servidores Web, as bases de dados e os workers competem pelos mesmos n\u00facleos, o que coloca a equidade em destaque. O CFS mant\u00e9m uma distribui\u00e7\u00e3o equitativa, mas, com muitas tarefas ativas, pode causar <strong>Mudan\u00e7a de contexto<\/strong> gerar. Se o n\u00famero de processos em execu\u00e7\u00e3o aumentar significativamente, a carga administrativa cresce de forma mensur\u00e1vel. Por isso, procuro manter um paralelismo realista e limito o n\u00famero de threads de acordo com o perfil de E\/S ou da CPU. Quem quiser avaliar alternativas e complementos, encontrar\u00e1 informa\u00e7\u00f5es adicionais em <a href=\"https:\/\/webhosting.de\/pt\/linux-scheduler-cfs-alternative-hosting-kernelperf-boost\/\">Alternativas ao CFS<\/a>, para contextualizar as decis\u00f5es.<\/p>\n\n<p>Distribuir de forma justa n\u00e3o significa distribuir cegamente de maneira uniforme. Os servi\u00e7os cr\u00edticos devem responder de forma mais fi\u00e1vel do que as tarefas em segundo plano nos per\u00edodos de pico. \u00c9 precisamente para isso que utilizo prioridades, quotas e grupos de servi\u00e7o. Desta forma, a resposta do <strong>API<\/strong> de forma fluida, enquanto as cargas de trabalho em lote continuam a ser executadas \u2013 apenas com uma redu\u00e7\u00e3o de desempenho. Este equil\u00edbrio torna os hosts produtivos bem percet\u00edveis <strong>mais constante<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/meeting_scheduler_server_8972.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Cgroups, quota da CPU e afinidade em conjunto<\/h2>\n\n<p>Agrupo os servi\u00e7os por cliente, contentor ou fun\u00e7\u00e3o em <strong>Grupos C<\/strong>, para que cada conjunto tenha um or\u00e7amento bem definido. Com a quota de CPU e as quotas de CPU, defino limites r\u00edgidos ou pondera\u00e7\u00f5es relativas. Desta forma, evito que um vizinho ruidoso sobrecarregue a m\u00e1quina. Al\u00e9m disso, sempre que necess\u00e1rio, atribuo threads a n\u00facleos por afinidade, para aproveitar melhor as caches. Uma boa introdu\u00e7\u00e3o a <a href=\"https:\/\/webhosting.de\/pt\/politicas-de-programacao-de-servidores-equidade-desempenho-otimizacao-do-alojamento\/\">Pol\u00edticas de agendamento<\/a> ajuda a estruturar as estrat\u00e9gias de forma clara.<\/p>\n\n<p>No que diz respeito \u00e0s pilhas web, separo o front-end, os workers PHP e a base de dados em grupos com quotas adequadas. Os sistemas de cache, como o Redis ou o Memcached, recebem CPU suficiente para absorver picos de tr\u00e1fego de forma eficiente. As c\u00f3pias de seguran\u00e7a e a compress\u00e3o s\u00e3o executadas em segundo plano com quotas mais reduzidas. Em n\u00f3s com carga heterog\u00e9nea, defino quotas por cliente, para que cada um tenha um tempo de processamento previs\u00edvel. Esta clareza facilita <strong>Planeamento de capacidades<\/strong> e reduz as surpresas.<\/p>\n\n<h2>Par\u00e2metros importantes do kernel: lat\u00eancia e granularidade<\/h2>\n\n<p>Ao fazer o ajuste fino, recorro sobretudo aos par\u00e2metros relacionados com <strong>Lat\u00eancia<\/strong> e granularidade. Estas controlam a frequ\u00eancia com que o CFS muda e o tamanho dos intervalos de tempo efetivos. Valores de lat\u00eancia mais baixos melhoram a resposta, mas aumentam a sobrecarga. Valores mais elevados poupam tempo de gest\u00e3o, mas podem prolongar as respostas individuais. Vou analisando os perfis, medindo e comparando os resultados com os picos de carga, antes de planear os pr\u00f3ximos passos.<\/p>\n\n<p>A tabela seguinte apresenta os principais par\u00e2metros de configura\u00e7\u00e3o, com o seu efeito e indica\u00e7\u00f5es t\u00edpicas para ambientes de alojamento. Os valores s\u00e3o orienta\u00e7\u00f5es, n\u00e3o regras r\u00edgidas. Verifico sempre as altera\u00e7\u00f5es atrav\u00e9s de testes de carga e monitoriza\u00e7\u00e3o. Cada plataforma reage de forma ligeiramente diferente, sobretudo quando h\u00e1 muitos contentores e m\u00e1quinas virtuais. \u00c9 precisamente por isso que documento meticulosamente os ajustes e os implemento gradualmente, para <strong>Riscos<\/strong> para baixar.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Par\u00e2metros<\/th>\n      <th>Efeito<\/th>\n      <th>Nota sobre o alojamento<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>kernel.sched_latency_ns<\/td>\n      <td>Define o tempo de execu\u00e7\u00e3o alvo de um ciclo completo para todas as tarefas<\/td>\n      <td>Reduzir os valores pequenos <strong>Rea\u00e7\u00e3o<\/strong>, aumentam os custos de programa\u00e7\u00e3o<\/td>\n    <\/tr>\n    <tr>\n      <td>kernel.sched_min_granularity_ns<\/td>\n      <td>Tempo m\u00ednimo de execu\u00e7\u00e3o por tarefa dentro da lat\u00eancia<\/td>\n      <td>Um pouco maior em tarefas que exigem muito da CPU, menor no Web-Mix<\/td>\n    <\/tr>\n    <tr>\n      <td>kernel.sched_wakeup_granularity_ns<\/td>\n      <td>Limiar a partir do qual as tarefas que est\u00e3o a ser reativadas passam a ter prioridade<\/td>\n      <td>Um valor mais elevado reduz a frequ\u00eancia de preemp\u00e7\u00e3o, o que \u00e9 eficaz contra o Thrash<\/td>\n    <\/tr>\n    <tr>\n      <td>kernel.sched_migration_cost_ns<\/td>\n      <td>Fator de custo na migra\u00e7\u00e3o entre kernels<\/td>\n      <td>O aumento reduz a migra\u00e7\u00e3o e promove o cache\u2011<strong>Acertos<\/strong><\/td>\n    <\/tr>\n    <tr>\n      <td>kernel.sched_cfs_bandwidth_slice_us<\/td>\n      <td>Intervalo de tempo para o controlo da largura de banda do CFS atrav\u00e9s de quotas<\/td>\n      <td>Ajustar \u00e0 carga de trabalho e \u00e0 periodicidade das quotas<\/td>\n    <\/tr>\n    <tr>\n      <td>kernel.sched_autogroup_enabled<\/td>\n      <td>Agrupa automaticamente as tarefas interativas<\/td>\n      <td>Testar de forma espec\u00edfica nos servidores; o efeito depende da carga<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/kernel-scheduler-cfs-hosting-7481.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Classificar corretamente os tipos de carga de trabalho<\/h2>\n\n<p>Distingo entre tarefas que exigem muito da CPU, que dependem da mem\u00f3ria e que s\u00e3o dominadas pela E\/S <strong>Cargas de trabalho<\/strong>. O CFS destaca-se em tarefas mistas de servidor e em cargas cl\u00e1ssicas da CPU. Em padr\u00f5es que exigem muita mem\u00f3ria, muitas vezes \u00e9 a largura de banda ou a lat\u00eancia do sistema de mem\u00f3ria que limita o desempenho, e n\u00e3o o agendador. Nesses casos, \u00e9 mais \u00fatil preservar a localidade da mem\u00f3ria e evitar o swapping. Em cen\u00e1rios altamente paralelizados, verifico se os threads est\u00e3o a utilizar os n\u00facleos de forma eficiente ou se se bloqueiam mutuamente. Ao reduzir o paralelismo desnecess\u00e1rio, a sobrecarga diminui e o desempenho da m\u00e1quina melhora sensivelmente <strong>mais l\u00edquido<\/strong>.<\/p>\n\n<p>Para interfaces web, planeio utilizar um n\u00famero de threads ligeiramente superior ao n\u00famero de n\u00facleos, uma vez que muitas solicita\u00e7\u00f5es ficam em espera de E\/S. As bases de dados beneficiam de um paralelismo bem planeado e de uma afinidade bem definida. Agrupo as tarefas em lote em intervalos de tempo em que o tr\u00e1fego de utilizadores \u00e9 reduzido. Mantenho as tarefas de compress\u00e3o ou transcodifica\u00e7\u00e3o que exigem muito da CPU em grupos separados, para que a interatividade n\u00e3o seja prejudicada. Estes padr\u00f5es minimizam as surpresas e proporcionam-me <strong>Controlo<\/strong> sobre o impacto de cada altera\u00e7\u00e3o.<\/p>\n\n<h2>Compreender as prioridades, os \u00abnice\u00bb e as pondera\u00e7\u00f5es<\/h2>\n\n<p>Utilizo valores \u00abnice\u00bb para <strong>pondera\u00e7\u00e3o<\/strong> definir a prioridade de um processo e, assim, a sua quota de tempo de CPU. Valores \u00abnice\u00bb mais baixos significam maior import\u00e2ncia, enquanto valores \u00abnice\u00bb mais elevados limitam as tarefas em segundo plano. Desta forma, garanto que os servi\u00e7os essenciais respondam de forma fi\u00e1vel, enquanto as tarefas de manuten\u00e7\u00e3o ficam em segundo plano. Al\u00e9m disso, observo quantas tarefas por grupo est\u00e3o ativas simultaneamente, uma vez que isso influencia ainda mais a distribui\u00e7\u00e3o. Uma vis\u00e3o geral da classifica\u00e7\u00e3o das <a href=\"https:\/\/webhosting.de\/pt\/servidor-agendador-de-cpu-agendamento-de-classes\/\">Classes de agendador<\/a> Utilizo isto para distinguir claramente o CFS das classes em tempo real.<\/p>\n\n<p>O importante \u00e9 a coer\u00eancia: documento as configura\u00e7\u00f5es e mantenho-as iguais ao longo das implementa\u00e7\u00f5es. Caso contr\u00e1rio, pondera\u00e7\u00f5es diferentes por fase geram efeitos dif\u00edceis de explicar. Se prestar aten\u00e7\u00e3o \u00e0 consist\u00eancia, consigo identificar mais rapidamente as causas dos valores at\u00edpicos. Passos pequenos e compreens\u00edveis facilitam o retrocesso, se necess\u00e1rio. Assim, o efeito de <strong>Prioridades<\/strong> transparente.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/fair_scheduling_server_2390.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Virtualiza\u00e7\u00e3o e contentores: dois n\u00edveis de distribui\u00e7\u00e3o equitativa<\/h2>\n\n<p>Nos hipervisores, as m\u00e1quinas virtuais competem pelas CPUs do anfitri\u00e3o, enquanto o CFS coordena os processos na inst\u00e2ncia convidada. Defino as vCPUs de forma realista, em vez de fazer promessas vazias que, sob press\u00e3o, <strong>roubar<\/strong>. Nos contentores, recorro a quotas de CPU e a limites de utiliza\u00e7\u00e3o, para que os picos de determinados servi\u00e7os n\u00e3o afetem todo o n\u00f3. A combina\u00e7\u00e3o entre a atribui\u00e7\u00e3o de recursos ao anfitri\u00e3o e a equidade entre os convidados permite manter as lat\u00eancias previs\u00edveis. S\u00f3 com limites claros \u00e9 que a experi\u00eancia do utilizador se mant\u00e9m agrad\u00e1vel e <strong>Fi\u00e1vel<\/strong>.<\/p>\n\n<p>Nos sistemas NUMA, tenho tamb\u00e9m em conta a localiza\u00e7\u00e3o da mem\u00f3ria. Quando os contentores migram aleatoriamente entre sockets, as lat\u00eancias de mem\u00f3ria aumentam e a taxa de transfer\u00eancia diminui. Por isso, associo os servi\u00e7os sens\u00edveis a n\u00f3s espec\u00edficos e garanto uma atribui\u00e7\u00e3o de mem\u00f3ria adequada. Esta intera\u00e7\u00e3o reduz os efeitos colaterais e contribui para tempos de resposta uniformes. O CFS continua a ser o elemento central <strong>Inst\u00e2ncia<\/strong> por fila de execu\u00e7\u00e3o da CPU.<\/p>\n\n<h2>Monitoriza\u00e7\u00e3o e ajuste gradual na pr\u00e1tica<\/h2>\n\n<p>Come\u00e7o com a configura\u00e7\u00e3o padr\u00e3o, fa\u00e7o medi\u00e7\u00f5es e s\u00f3 depois \u00e9 que introduzo altera\u00e7\u00f5es. Indicadores como o comprimento da fila de execu\u00e7\u00e3o, a taxa de mudan\u00e7a de contexto, a satura\u00e7\u00e3o da CPU e as percentagens por Cgroup mostram onde h\u00e1 perdas de desempenho. Uma elevada frequ\u00eancia de mudan\u00e7as de contexto com uma carga moderada da CPU indica uma granularidade excessivamente fina. Filas de execu\u00e7\u00e3o longas com lat\u00eancias elevadas sugerem um n\u00famero excessivo de threads ativos. No final, o que importa \u00e9 se as a\u00e7\u00f5es dos utilizadores t\u00eam um efeito mais r\u00e1pido e se os gr\u00e1ficos apresentam os resultados esperados <strong>Tend\u00eancia<\/strong> espet\u00e1culo.<\/p>\n\n<p>Registo cada ajuste, indicando a data, o \u00e2mbito e o objetivo. Os testes de carga, realizados antes e depois da altera\u00e7\u00e3o, permitem verificar a viabilidade da ideia. Se uma abordagem falhar, reverto a altera\u00e7\u00e3o e experimento outra combina\u00e7\u00e3o. Prefiro recorrer a ambientes de teste separados antes de intervir nos sistemas produtivos. Esta disciplina tem um custo reduzido e poupa muito mais mais tarde <strong>Tempo<\/strong>.<\/p>\n\n<h2>Perfis de desempenho para alojamento: cen\u00e1rios pr\u00e1ticos<\/h2>\n\n<p>Numa pilha t\u00edpica do WordPress, atribuo quotas claras ao Nginx\/Apache, ao PHP-FPM e ao Redis, e mantenho o n\u00famero de workers PHP ligeiramente acima do n\u00famero de n\u00facleos. A base de dados tem prioridade sobre as exporta\u00e7\u00f5es em lote, para que o checkout e a pesquisa se mantenham fluidos. A transcodifica\u00e7\u00e3o de ficheiros multim\u00e9dia transfiro-a para intervalos de tempo \u201ecalmos\u201c ou defino quotas mais restritivas. Nos n\u00f3s da API, limito mais as tarefas em segundo plano, para controlar as lat\u00eancias de cauda. Em todos os casos, verifico se a <strong>Tempo de resposta<\/strong> mais est\u00e1vel e o rendimento se mant\u00e9m constante.<\/p>\n\n<p>Em ambientes partilhados, apresento aos clientes or\u00e7amentos em euros por m\u00eas e traduzo-os em quotas de CPU claras. A transpar\u00eancia evita desilus\u00f5es e facilita a venda de servi\u00e7os adicionais quando os picos de carga aumentam. S\u00e3o os valores medidos que sustentam estas conversas, n\u00e3o a intui\u00e7\u00e3o. Consigo identificar quando um cliente deve aumentar as vCPUs ou os limites. Desta forma, os hosts mant\u00eam-se com uma carga de trabalho equilibrada e o desempenho global \u00e9 otimizado <strong>constante<\/strong>.<\/p>\n\n<h2>Decis\u00e3o de compra e escolha do servi\u00e7o de alojamento<\/h2>\n\n<p>Ao analisar ofertas, verifico se o tempo de CPU \u00e9 distribu\u00eddo de forma justa em per\u00edodos de pico e se o isolamento funciona de forma consistente. Quem compara servi\u00e7os de alojamento, servidores ou pacotes de WordPress deve prestar aten\u00e7\u00e3o a quotas claras, Cgroups bem definidos e informa\u00e7\u00f5es de monitoriza\u00e7\u00e3o fi\u00e1veis. Relatos de experi\u00eancias e testes de desempenho mostram como as plataformas reagem em hor\u00e1rios de pico. Nas compara\u00e7\u00f5es, o webhoster.de surge frequentemente como vencedor dos testes, quando a equidade na utiliza\u00e7\u00e3o da CPU e o isolamento convencem visivelmente. Avalio isso de forma objetiva e tenho em aten\u00e7\u00e3o que o pre\u00e7o e <strong>Desempenho<\/strong> que se adequem ao perfil das suas pr\u00f3prias cargas de trabalho.<\/p>\n\n<h2>Cgroup v2 na pr\u00e1tica: utilizar corretamente o cpu.max e o cpu.weight<\/h2>\n\n<p>Nas distribui\u00e7\u00f5es modernas, prefiro utilizar o Cgroup v2. A\u00ed, calibro os or\u00e7amentos da CPU com <strong>cpu.max<\/strong> e <strong>cpu.weight<\/strong>. Com cpu.max, defino um limite de tempo r\u00edgido por per\u00edodo (por exemplo, \u201e50 ms 100 ms\u201c para 50% de uma CPU). Se o segundo n\u00famero for deixado em branco, aplica-se o padr\u00e3o do sistema. O <strong>pondera\u00e7\u00e3o<\/strong> Controlo isso com cpu.weight (1\u201310000); assim, distribuo a capacidade restante de forma equitativa quando h\u00e1 v\u00e1rios grupos ativos. Para cada servi\u00e7o, documento se este necessita de limites r\u00edgidos (por exemplo, tarefas em lote que consomem muitos recursos) ou se deve ser ponderado de forma relativa (APIs, bases de dados). Atrav\u00e9s de pondera\u00e7\u00f5es consistentes por fun\u00e7\u00e3o, os anfitri\u00f5es permanecem plane\u00e1veis e <strong>justo<\/strong>.<\/p>\n\n<p>O importante \u00e9 o equil\u00edbrio entre a pondera\u00e7\u00e3o e a quota: uma quota restrita protege os vizinhos, mas pode limitar o tr\u00e1fego prematuramente em picos de curta dura\u00e7\u00e3o. Se a pondera\u00e7\u00e3o por si s\u00f3 for suficiente, defino a quota de forma generosa ou prescindo dela por completo. Em per\u00edodos de pico de tr\u00e1fego, uma pondera\u00e7\u00e3o ligeiramente maior ajuda na interatividade, enquanto o arquivo e os relat\u00f3rios funcionam bem com uma pondera\u00e7\u00e3o moderada.<\/p>\n\n<h2>Controlo da largura de banda CFS em pormenor: per\u00edodo, quota e limita\u00e7\u00e3o de tr\u00e1fego<\/h2>\n\n<p>O controlo de largura de banda CFS limita o tempo de CPU por Cgroup num intervalo definido <strong>Per\u00edodo<\/strong>. Normalmente, defino o \u00abperiod\u00bb e o \u00abquota\u00bb (v1) ou o \u00abcpu.max\u00bb (v2). Se o or\u00e7amento se esgotar, <strong>reduz<\/strong> CFS at\u00e9 ao pr\u00f3ximo per\u00edodo. \u00c9 precisamente aqui que surgem facilmente picos na curva de lat\u00eancia. Evito arestas acentuadas ajustando o per\u00edodo e o <strong>Tamanho da fatia<\/strong> (kernel.sched_cfs_bandwidth_slice_us) de acordo com a carga de trabalho: fatias mais pequenas distribuem a execu\u00e7\u00e3o de forma mais precisa, mas aumentam a sobrecarga. No caso de servi\u00e7os com picos de tr\u00e1fego muito intensos, opto por um per\u00edodo moderado (por exemplo, 50\u2013100 ms) e um or\u00e7amento suficiente para que os picos t\u00edpicos de pedidos sejam processados sem limita\u00e7\u00e3o de largura de banda.<\/p>\n\n<p>Se observar restri\u00e7\u00f5es frequentes de desempenho, apesar de uma baixa utiliza\u00e7\u00e3o total da CPU, significa que a quota \u00e9 insuficiente. Aumento o or\u00e7amento de acordo com a carga de trabalho ou opto por uma pondera\u00e7\u00e3o em vez de limites r\u00edgidos. Se ocorrerem apenas gargalos de curta dura\u00e7\u00e3o, distribuo os picos de carga por v\u00e1rios <strong>Trabalhador<\/strong> com a atividade ligeiramente desfasada, para que os per\u00edodos n\u00e3o fiquem vazios ao mesmo tempo.<\/p>\n\n<h2>Utilizar de forma adequada o SMT, a afinidade de IRQ e o isolamento do n\u00facleo<\/h2>\n\n<p>Em sistemas com <strong>SMT\/Hyper-Threading<\/strong> Tenho em conta que duas threads partilham as unidades de execu\u00e7\u00e3o de um n\u00facleo. Para front-ends em que a lat\u00eancia \u00e9 cr\u00edtica, procuro agrupar as threads ativas preferencialmente em n\u00facleos f\u00edsicos pr\u00f3prios, enquanto as tarefas em segundo plano preenchem os slots SMT adjacentes. Al\u00e9m disso, configuro <strong>Afinidade de IRQ<\/strong> para placas de rede e filas NVMe, selecionando conjuntos de CPU adequados. Desta forma, os Softirqs ficam pr\u00f3ximos dos consumidores <strong>Threads de trabalho<\/strong>, os acertos na cache aumentam e o jitter diminui.<\/p>\n\n<p>Se precisar de isolamento rigoroso, reservo alguns n\u00facleos atrav\u00e9s de par\u00e2metros do kernel (por exemplo, n\u00facleos isolados \u201elivres de tarefas de manuten\u00e7\u00e3o\u201c). Para l\u00e1, transfiro apenas servi\u00e7os dedicados e as respetivas interrup\u00e7\u00f5es, mantendo os threads do sistema afastados. Ao faz\u00ea-lo, testo cuidadosamente para garantir que os servi\u00e7os do kernel n\u00e3o fiquem sem recursos. Muitas vezes, basta uma afinidade clara, sem isolamento total, para obter tempos de resposta est\u00e1veis.<\/p>\n\n<h2>Escalabilidade de frequ\u00eancia: regulador e turbo para uma lat\u00eancia constante<\/h2>\n\n<p>O <strong>Frequ\u00eancia da CPU<\/strong> influencia sensivelmente as lat\u00eancias de cauda. Com o regulador \u201eschedutil\u201c, a frequ\u00eancia de clock acompanha de perto a perspetiva do agendador quanto \u00e0 carga de trabalho. No entanto, para APIs em que a lat\u00eancia \u00e9 cr\u00edtica, recorro frequentemente ao governador \u201eperformance\u201c ou aumente a frequ\u00eancia m\u00ednima, para que os n\u00facleos n\u00e3o entrem em estados P profundos. Utilizo o Turbo Boost de forma seletiva: acelera picos de atividade curtos, mas pode ativar o controlo de temperatura e reduzir as frequ\u00eancias posteriormente. Medei os tempos de resposta com e sem o Turbo e tomo uma decis\u00e3o caso a caso para cada n\u00f3. O objetivo \u00e9 <strong>Constan\u00e7a<\/strong>, e n\u00e3o valores m\u00e1ximos em condi\u00e7\u00f5es laboratoriais.<\/p>\n\n<p>Em n\u00f3s mistos, combino o seguinte: alguns n\u00facleos mantidos a um n\u00edvel elevado de forma fixa para interatividade e os restantes de forma din\u00e2mica para processamento em lote. \u00c9 importante manter a pol\u00edtica energ\u00e9tica do anfitri\u00e3o de forma consistente, para que os testes sejam reproduz\u00edveis e o efeito do ajuste do CFS n\u00e3o seja mascarado pela l\u00f3gica de poupan\u00e7a de energia.<\/p>\n\n<h2>Aprofundar o diagn\u00f3stico: pontos de rastreio, perf e estat\u00edsticas de agendamento<\/h2>\n\n<p>Se os efeitos continuarem pouco claros, aprofundo a an\u00e1lise. Com o \u00abperf\u00bb e os \u00abTracepoints\u00bb, analiso <strong>Despertares<\/strong>, mudan\u00e7as de contexto e tempos de espera na fila de execu\u00e7\u00e3o. Observa\u00e7\u00f5es como \u201emuitas preemp\u00e7\u00f5es logo ap\u00f3s o despertar\u201c indicam um valor demasiado baixo para wakeup_granularity ou um paralelismo excessivo. Os ficheiros \/proc\/schedstat e \/proc\/sched_debug mostram tempos de execu\u00e7\u00e3o, taxas de migra\u00e7\u00e3o e distribui\u00e7\u00e3o por CPU. Correlaciono estes valores com as quotas dos Cgroups e as m\u00e9tricas das aplica\u00e7\u00f5es, at\u00e9 que a <strong>Causa<\/strong> \u00e9 percet\u00edvel numa onda de lat\u00eancia.<\/p>\n\n<p>O valor acrescentado resulta da compara\u00e7\u00e3o: testes id\u00eanticos antes e depois de uma altera\u00e7\u00e3o, padr\u00f5es de carga id\u00eanticos, intervalos de tempo fixos. S\u00f3 ent\u00e3o \u00e9 que reavalio os resultados. Se as curvas de medi\u00e7\u00e3o apresentarem ru\u00eddo, reduzo as vari\u00e1veis (por exemplo, frequ\u00eancia fixa, n\u00famero constante de threads) antes de ajustar outros par\u00e2metros.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/kernel_scheduler_cfs_8945.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Uma vis\u00e3o geral das E\/S e da rede: Softirqs, RPS\/RFS e Block-Scheduler<\/h2>\n\n<p>A equidade da CPU s\u00f3 funciona se o percurso de dados acompanhar o ritmo. Eu organizo <strong>Softirqs<\/strong> (ksoftirqd) \u00e0s CPUs da aplica\u00e7\u00e3o, para que os pacotes e o processamento coincidam espacialmente. Com filas de NIC distribu\u00eddas e a afinidade adequada, alivio a carga nos pontos de congest\u00e3o. Em caso de elevado d\u00e9bito de rede, as configura\u00e7\u00f5es de RPS\/RFS e XPS ajudam a distribuir a carga de forma mais ampla. No que diz respeito ao armazenamento, procuro garantir um agendador de E\/S em bloco adequado e o controlo de E\/S por Cgroups, para que os processos com elevado consumo de E\/S n\u00e3o reduzam indiretamente o tempo de CPU de outros. Desta forma, evito que a equidade ao n\u00edvel da CPU seja prejudicada por <strong>Atraso<\/strong> \u00e9 contrariada no percurso de E\/S.<\/p>\n\n<p>Para cargas de trabalho com io_uring ou E\/S ass\u00edncrona intensiva, reservo conjuntos ou grupos de CPU espec\u00edficos para os threads auxiliares de E\/S, para que n\u00e3o concorram com os threads de trabalho do front-end pelo mesmo or\u00e7amento.<\/p>\n\n<h2>Anti-padr\u00f5es e manuais de estrat\u00e9gias comprovados<\/h2>\n\n<p>Na pr\u00e1tica, deparo-me com padr\u00f5es recorrentes que prejudicam os tempos de resposta. Evito-os sistematicamente:<\/p>\n<ul>\n  <li>Demasiados <strong>T\u00f3picos<\/strong> No caso de servi\u00e7os dependentes da CPU: come\u00e7o com um n\u00famero pr\u00f3ximo do n\u00famero de n\u00facleos e escalo horizontalmente, em vez de iniciar centenas de workers.<\/li>\n  <li>Demasiado estreito <strong>Probabilidades<\/strong> com um per\u00edodo curto: isto provoca ondas de \u00abthrottle\u00bb. Melhor: utilizar um or\u00e7amento ou uma pondera\u00e7\u00e3o ligeiramente superiores.<\/li>\n  <li>Ambiguas <strong>afinidade<\/strong>: Threads em migra\u00e7\u00e3o que sacrificam a localidade da cache. Fixo os hotpaths e as respetivas interrup\u00e7\u00f5es de forma consistente.<\/li>\n  <li>Mistas <strong>Etapas<\/strong> com valores diferentes de nice e de peso: isso gera surpresas. Eu harmonizo as predefini\u00e7\u00f5es.<\/li>\n  <li>Autogroup ativado de forma generalizada: nos servidores, testo o efeito de forma espec\u00edfica; as otimiza\u00e7\u00f5es interativas do ambiente de trabalho nem sempre ajudam no centro de dados.<\/li>\n<\/ul>\n\n<p>Os meus manuais s\u00e3o pragm\u00e1ticos: primeiro, garantir a visibilidade (m\u00e9tricas, traces); depois, aplicar medidas gerais (threads, cgroups); e s\u00f3 depois proceder ao ajuste fino (lat\u00eancia, granularidade). Cada altera\u00e7\u00e3o \u00e9 revers\u00edvel e documentada. Desta forma, o ambiente permanece control\u00e1vel e <strong>previs\u00edvel<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/hosting-serverraum-7482.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Brevemente resumido<\/h2>\n\n<p>O <strong>CFS<\/strong> O agendador distribui o tempo de CPU de forma equitativa, mant\u00e9m um elevado n\u00edvel de interatividade e continua a ser a melhor base para cargas de trabalho mistas de alojamento. S\u00e3o fundamentais limites adequados com Cgroups, paralelismo realista e prioridades claras. Apenas ajusto os valores de lat\u00eancia e granularidade quando as medi\u00e7\u00f5es revelam um estrangulamento. Em seguida, verifico o efeito e, caso o resultado n\u00e3o seja satisfat\u00f3rio, reaverifico a configura\u00e7\u00e3o. Com esta abordagem pragm\u00e1tica, garanto um desempenho constante <strong>Tempos de resposta<\/strong> e capacidades previs\u00edveis \u2013 sem sobrecarregar a m\u00e1quina.<\/p>","protected":false},"excerpt":{"rendered":"<p>O CFS Scheduler explicado: agendamento justo no kernel do Linux para servidores de alojamento, desempenho e distribui\u00e7\u00e3o ideal da CPU.<\/p>","protected":false},"author":1,"featured_media":20571,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[676],"tags":[],"class_list":["post-20578","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server_vm"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"92","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"CFS Scheduler","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20571","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=20578"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20578\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/20571"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=20578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=20578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=20578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}