Linux prepara eBPF para criar agendadores de tarefas

Linux

Nós alguns dias após o lançamento da versão estável do Linux 6.10, uma versão que incluirá uma série de mudanças bastante interessantes, além de grandes melhorias em termos de suporte a dispositivos, funções e muito mais.

Oportunamente falaremos sobre este lançamento, pois o motivo deste artigo é uma referência à próxima versão esperada do Linux, que é o "Linux 6.11", lançamento do qual foram anunciadas algumas mudanças que menciono. tempo suficiente, adoraria abordá-los em outro post.

Ok, agora passando ao ponto do artigo, que está em referência a um anúncio feito por Linus Torvalds sobre sua disposição de incluir no kernel Linux 6.11, alguns patches que implementam o mecanismo "sched_ext" (SCX).

Este mecanismoou pretende usar eBPF para criar escalonadores de CPU dentro do kernel Linux. Aqui está um resumo de como isso funcionará:

  • Programadores eBPF e CPU: Com o uso do eBPF, os escalonadores de CPU podem ser carregados e executados dinamicamente dentro do kernel Linux. A compilação Just-In-Time (JIT) traduz bytecode eBPF em instruções de máquina para execução.
  • Classe SCHED_EXT: Esta é uma nova classe de programação, cuja prioridade de chamada do kernel está entre as classes SCHED_IDLE e SCHED_NORMAL. Motoristas BPF vinculados a SCHED_EXT pode lidar com tarefas que têm prioridade mais baixa do que a execução em tempo real, sem afetar as tarefas já anexadas ao agendador normal SCHED_NORMAL.
  • Operação: Os drivers BPF analisam filas de tarefas aguardando execução na CPU e selecionam qual tarefa atribuir quando um núcleo da CPU é liberado. Se não houver drivers BPF ativos no SCHED_EXT, as tarefas são tratadas usando o agendador SCHED_NORMAL.
  • Benefícios: O mecanismo agendado_ext facilita a experimentação com diferentes técnicas e estratégias de programação de forma dinâmica. Isso permite criar rapidamente protótipos funcionais de programadores e substituí-los rapidamente em ambientes de produção. Por exemplo, ele pode ser ajustado para se adequar às características específicas de uma aplicação e alterar a estratégia de agendamento com base no status do sistema e em outros fatores.

Cabe mencionar que “sched_ext” foi inicialmente proposto para consideração pelos desenvolvedores do kernel em 2022, seguido pelo lançamento de seis revisões de patch. Apesar de não ser suportado no kernel principal, Diversas distribuições como Ubuntu, Arch Linux, Fedora e NixOS oferecem a instalação de "sched_ext" através de pacotes adicionais. A Canonical está considerando incluir componentes de «agendado_ext» no Ubuntu 24.10, e a Valve está trabalhando em sua integração para o Steam Deck. No Meta, o programador baseado em «agendado_ext» já é utilizado em infraestrutura de produção.

Além disso, é mencionado que, atualmente, cerca de uma dezena de programadores baseados em "sched_ext", cada um com lógica de agendamento de tarefas definida no espaço do usuário e carregada no kernel usando programas BPF.

  1. scx_layered: um agendador híbrido que divide tarefas em camadas, cada uma com sua própria estratégia de agendamento. Permite atribuir determinadas tarefas a camadas específicas com recursos de CPU garantidos ou aumentar a prioridade de aplicativos individuais. Desenvolvido pela Meta, sua lógica de espaço de usuário é escrita em Rust.
  2. scx_rustland: Otimizado para priorizar tarefas interativas em detrimento de tarefas com uso intensivo de CPU. Por exemplo, melhora o FPS no jogo Terraria durante a compilação simultânea do kernel em comparação com o agendador EEVDF padrão. Desenvolvido por funcionário da Canonical, com lógica em Rust.
  3. scx_lavd: Implementa o algoritmo LAVD (Latency-criticality Aware Virtual Deadline), reduzindo a latência em jogos de computador e tarefas interativas considerando a relevância da redução de atrasos e progresso do processo. Desenvolvido por Igalia e Valve, com lógica em Rust.
  4. scx_rusty, scx_rlfifo, scx_mitosis: agendadores que equilibram grupos de tarefas com base na carga, implementam um agendador FIFO simples e vinculam grupos de tarefas a núcleos de CPU. Todos com componentes Rust.
  5. scx_central, scx_flatcg, scx_nest, scx_pair, scx_qmap, scx_simple, scx_userland: Exemplos de programadores com componentes C, demonstrando as diversas capacidades do “sched_ext”.

Por fim, vale acrescentar que o Google está experimentando usar seu próprio framework, o ghOSt, para influenciar as decisões do agendador de tarefas usando programas BPF, e começou a migrar o ghOSt para “sched_ext”. Além disso, o Google está desenvolvendo uma versão “sched_ext” para ChromeOS.

fonte: https://lkml.org


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.