A NVIDIA apresentou uma série de novos patches para o kernel Linux, visando aprimorar a funcionalidade do GPU Direct RDMA (Acesso Direto à Memória Remota) e DMA ponto a ponto (P2P DMA). Esses patches estendem o suporte ao P2P DMA para páginas privadas de dispositivos, uma melhoria crucial para otimizar o desempenho de comunicação entre GPUs e dispositivos, como adaptadores de rede, sem a necessidade de passar pela memória do sistema.
Avanços no DMA ponto a ponto no Linux
Nos últimos anos, o kernel Linux tem evoluído para oferecer melhor suporte ao P2P DMA, o que permite a comunicação direta entre dispositivos, como aceleradores, GPUs e adaptadores de rede. Essa abordagem elimina cópias desnecessárias de dados na memória do sistema, melhorando a eficiência e o desempenho geral das transferências. Os novos patches da NVIDIA vão além, habilitando o P2P DMA para páginas de memória privada de dispositivos, o que representa um avanço significativo no fluxo de dados entre dispositivos conectados.
Patches otimizam uso de páginas privadas de dispositivos
Yonatan Maman, engenheiro da NVIDIA, explicou que a série de patches foi projetada para permitir que aplicativos centrados em GPUs, que utilizam RDMA, se beneficiem do acesso DMA ponto a ponto a páginas privadas de dispositivos. Isso elimina a necessidade de trafegar dados pela memória do sistema, o que é o método convencional de exposição de páginas privadas de dispositivos.
As mudanças propostas incluem ajustes no código de gerenciamento de memória do Linux e no Gerenciamento Heterogêneo de Memória (HMM), que agora passam a permitir que a GPU mapeie diretamente essas páginas privadas para operações de P2P DMA. O uso da função hmm_range_fault
foi otimizado para permitir conexões P2P sem a necessidade de gerenciar falhas de página da maneira tradicional, reduzindo a sobrecarga de transferência de dados.
Atualizações nos drivers NVIDIA e de código aberto
Os patches também trazem melhorias para drivers-chave no ecossistema Linux, incluindo o driver NVIDIA Mellanox MLX5 e o driver de código aberto Nouveau.
Driver NVIDIA Mellanox MLX5
O driver Mellanox MLX5 foi atualizado para otimizar o suporte a P2P via PCIe, com melhorias no uso da memória ODP (On-Demand Paging). Isso inclui a ativação do serviço de tradução de endereços (ATS), que garante um melhor desempenho ao acessar páginas privadas de dispositivos em operações P2P.
Driver Nouveau
Embora o driver Nouveau não seja amplamente utilizado em workloads exigentes, ele recebeu suporte para operações de P2P DMA por meio da função de callback p2p_page
. Esse suporte demonstra a capacidade de lidar com operações de páginas P2P em um ambiente totalmente de código aberto, seguindo as políticas de upstream do kernel Linux. A integração no Nouveau serve como uma demonstração prática do uso dessas funcionalidades com drivers open-source.
Principais atualizações técnicas:
- Gerenciamento de Memória (MM): Foi implementado o suporte para operações de páginas P2P utilizando a estrutura
pagemap_ops
, que permite à GPU mapear diretamente as páginas privadas de dispositivos. - Driver IB/Core: Uma nova flag chamada
TRY_P2P_REQ
foi adicionada ao chamar a funçãohmm_range_fault
, facilitando o mapeamento eficiente de páginas P2P. - Driver Nouveau: O suporte ao DMA P2P foi integrado ao driver Nouveau, com uma nova função de callback chamada
p2p_page
, que lida com operações de páginas ponto a ponto. - Driver MLX5: Melhorias no driver da NVIDIA Mellanox MLX5, com ativação do serviço ATS para otimizar a memória ODP, garantindo maior eficiência em operações P2P.
Essas mudanças reforçam o compromisso da NVIDIA com a otimização do desempenho de suas GPUs e a interoperabilidade com outros dispositivos, garantindo que o suporte a drivers de código aberto seja mantido e aprimorado.
Conclusão
Com esses novos patches, a NVIDIA não apenas melhora a eficiência do DMA ponto a ponto no Linux, mas também reforça a interoperabilidade entre GPUs e outros dispositivos de alta performance. A otimização para páginas privadas de dispositivos representa um avanço importante para aplicações que demandam altíssimo desempenho, como inteligência artificial e computação de alto desempenho.
Para mais detalhes, consulte a série de patches publicada pela equipe da NVIDIA.