Andrea Righi, em colaboração com Tejun Heo, introduziu um novo patch para o sched_ext que traz suporte à conscientização de LLC (Last Level Cache) na política de seleção de CPUs ociosas do Linux. Esse patch aproveita as informações da topologia do agendador do kernel para melhorar as decisões de alocação de CPUs ociosas, principalmente em sistemas que utilizam múltiplos LLCs, como aqueles baseados em arquiteturas NUMA ou chiplets.
Por que o reconhecimento de LLC é importante?
O principal benefício desta funcionalidade é a otimização do uso de cache, mantendo as tarefas dentro do mesmo domínio LLC, o que melhora a localidade de cache e, consequentemente, o desempenho do sistema. Em sistemas com múltiplos nós NUMA ou chips com várias camadas de cache, a eficiência da utilização do cache pode ter um impacto significativo no desempenho, principalmente em tarefas de processamento intensivo ou em ambientes com múltiplas CPUs.
Como funciona a conscientização de LLC
O patch garante que a política de seleção de CPUs ociosas priorize processadores dentro do mesmo domínio LLC, caso nenhuma CPU completamente ociosa esteja disponível. O código verifica, por meio da máscara de CPUs (cpumask), quais CPUs estão dentro do mesmo domínio LLC e tenta manter as tarefas dentro desse conjunto de processadores, garantindo que os dados mantidos em cache sejam reutilizados o máximo possível.
Essa implementação é particularmente eficiente, pois a conscientização de LLC é aplicada apenas a tarefas que podem ser executadas em todas as CPUs do sistema. Caso a afinidade de uma tarefa seja modificada pelo espaço do usuário, é responsabilidade desse espaço escolher o domínio de agendamento mais apropriado.
Principais alterações na política de seleção ociosa
- Manter a CPU anterior, se ociosa: Sempre que possível, a CPU utilizada anteriormente será reutilizada, aproveitando dados já presentes no cache de níveis L1 e L2.
- Priorizar núcleos completamente ociosos no mesmo domínio LLC: Se não houver núcleos completamente ociosos, o sistema tenta encontrar uma CPU ociosa dentro do mesmo domínio LLC.
- Aplicar a seleção de CPU baseada em SMT: A seleção prioriza núcleos de SMT (Simultaneous Multithreading) ociosos para evitar interferências entre threads no mesmo núcleo físico.
Condições de aplicação
Esta otimização é aplicada apenas quando a tarefa pode ser executada em todos os processadores do sistema. Quando a afinidade de CPU de uma tarefa é restrita por processos de espaço do usuário, essa política não será aplicada, e cabe ao usuário definir o domínio de agendamento correto.
Futuras melhorias
Esse patch é parte de um esforço maior para tornar o sched_ext mais eficiente e consciente de topologias complexas, como sistemas NUMA e arquiteturas baseadas em chiplets. O trabalho contínuo pode incluir mais ajustes para otimizar o comportamento em ambientes multicore, aproveitando ao máximo a infraestrutura de cache compartilhado.
Explicando alguns termos no texto
- O que é LLC (Last Level Cache)?
O LLC é o cache de nível mais alto dentro de um processador. Ele armazena dados frequentemente acessados para acelerar o processamento, permitindo que a CPU acesse essas informações rapidamente sem precisar buscar na memória principal, que é mais lenta. Melhorar a eficiência do uso do LLC pode reduzir o tempo que a CPU leva para executar tarefas. - O que é NUMA (Non-Uniform Memory Access)?
NUMA é uma arquitetura de memória usada em sistemas com múltiplos processadores. Em um sistema NUMA, cada processador tem seu próprio conjunto de memória ao qual ele pode acessar mais rapidamente. Se uma CPU precisar acessar a memória de outro processador, isso pode causar atrasos. A conscientização de NUMA no kernel ajuda a otimizar essas interações, mantendo as tarefas mais próximas da memória “local” ao processador, melhorando a eficiência do sistema. - O que é uma política de seleção de CPUs ociosas?
Quando uma tarefa é atribuída a uma CPU, o sistema operacional precisa escolher qual CPU será usada para executar essa tarefa. A política de seleção de CPUs ociosas garante que a escolha seja feita de forma a maximizar o desempenho do sistema. Por exemplo, ela tenta manter as tarefas na mesma CPU ou no mesmo domínio de cache para aproveitar dados já armazenados no cache.