O desenvolvedor Ian Rogers enviou à lista de discussão do kernel Linux uma série de patches que propõe um driver de unidade de monitoramento de desempenho (PMU) uncore para os sistemas Broadcom AXI e monitores do VideoCore VPU. A implementação é voltada para os SoCs do Raspberry Pi, cobrindo os modelos desde o BCM2835 até o BCM2712, o que engloba as gerações do Raspberry Pi 1 ao 5.
O que muda na prática
Atualmente, o Linux carece de um driver compatível com a API padrão perf para os blocos de contadores de desempenho AXI da Broadcom nas plataformas Raspberry Pi.
A nota de envio (cover letter) explica que as soluções anteriores, mantidas fora da árvore principal (out-of-tree), dependiam de nós customizados no debugfs e kthreads ad-hoc. Essa arquitetura impedia a integração com ferramentas padrão do Linux perf, como perf stat e perf list.
O novo driver implementa callbacks uncore de hardware struct pmu no diretório drivers/perf/. O código passa a expor aliases de eventos legíveis por humanos no sysfs, dimensionamento de unidades (como Bytes) e filtragem de barramento diretamente para o espaço do usuário.
Arquitetura híbrida e monitoramento uncore

O código proposto expõe eventos do barramento de interconexão AXI uncore através do caminho /sys/bus/event_source/devices/rpi_axi_pmu/. A implementação suporta amostragem de eventos e acumulação de contadores de hardware (local64_add), gerenciando o estouro (wraparound) de contadores de 31 bits durante transferências de interconexão de alta largura de banda.
O driver adota uma arquitetura híbrida que combina MMIO (Memory-Mapped I/O) e fila de trabalho por IPC de mailbox:
- O monitor do sistema realiza leituras de memória mapeadas sobre o espaço de memória física ARM (
MON__SYSTEM). - Para os SoCs BCM2835 a BCM2711, as chamadas IPC do monitor do VideoCore VPU são transferidas para o contexto de processo por meio de uma fila de trabalho dedicada (
vpu_work) e serializadas sobvpu_mutex. Segundo o autor do patch, isso evita bloqueios ou esperas atômicas no contexto de interrupção ou temporizador.
Hotplug de CPU e suporte por geração
O patch registra notificadores dinâmicos de hotplug de CPU (CPUHP_AP_ONLINE_DYN). Quando um núcleo de CPU designado fica offline, o driver migra o contexto da PMU (perf_pmu_migrate_context) para um núcleo online, com o objetivo de evitar a manutenção de estados uncore desatualizados.
A série foi dividida em duas partes para organizar o suporte às gerações de hardware. O primeiro patch adiciona o driver central para os modelos BCM2835 a BCM2711, correspondentes ao Raspberry Pi 1 a 4.
O segundo patch expande o suporte para o BCM2712 (Raspberry Pi 5). Esta etapa adiciona monitoramento de links PCIe RP1 Southbridge, decodificador HEVC, motor de exibição HVS e interconexão L3 do Cortex-A76 DSU.
Validação em hardware
A série documenta validações do código em hardware real. No Raspberry Pi 400 (BCM2711), o teste envolveu os contadores de desempenho do L2 do sistema, da CPU ARM e do IPC de mailbox do firmware VideoCore VPU.
No Raspberry Pi 5 (BCM2712), os testes validaram a taxa de transferência de bytes ao vivo nos ciclos de atualização da tela HVS, no tráfego de memória da interconexão L3 do Cortex-A76 DSU e nas transferências do PCIe RP1 Southbridge.
