Direct Rendering Manager

Origem: Wikipédia, a enciclopédia livre.
Direct Rendering Manager
Autor kernel.org & freedesktop.org
Desenvolvedor kernel.org & freedesktop.org
Escrito em C
Gênero(s)
Licença
Página oficial dri.freedesktop.org/wiki/DRM

Direct Rendering Manager (abreviado como DRM, Gerenciador de Renderização Direta em inglês) é um subsistema do kernel do Linux que faz interface com as GPUs das placas de vídeo modernas. O DRM expõe uma API que os programas de espaço de usuário podem usar para enviar comandos e dados para a GPU, e para executar operações, como configurar o modo de exibição do monitor. O DRM foi desenvolvido inicialmente como o componente de espaço do kernel do Direct Rendering Infrastructure do servidor X,[1] mas desde então tem sido usado por outras alternativas de pilha gráfica como o Wayland.

Os programas de espaço do usuário podem usar a API do DRM para comandar a GPU para fazer a renderização em 3D e a decodificação de vídeo acelerada por hardware, além da computação GPGPU.

Visão geral[editar | editar código-fonte]

O kernel do Linux já tinha uma API chamada fbdev, usada para gerenciar o framebuffer de um adaptador gráfico,[2] mas ela não podia ser usada para lidar com as necessidades do hardware de vídeo baseado em GPU com aceleração 3D moderno. Esses dispositivos geralmente exigem a configuração e o gerenciamento de uma fila de comandos em sua própria memória para enviar comandos para a GPU, e também exigem o gerenciamento de buffers e espaço livre nessa memória.[3] Inicialmente, os programas de espaço do usuário (como o servidor X) gerenciavam esses recursos diretamente, mas geralmente agiam como se fossem os únicos com acesso a eles. Quando dois ou mais programas tentavam controlar o mesmo hardware ao mesmo tempo e definiam seus recursos, cada um à sua maneira, na maioria das vezes eles terminavam catastroficamente.[3]

O Direct Rendering Manager foi criado para permitir que vários programas usem recursos de hardware de vídeo cooperativamente.[4] O DRM obtém acesso exclusivo à GPU e é responsável por inicializar e manter a fila de comandos, a memória e qualquer outro recurso de hardware. Os programas que desejam usar as solicitações de envio de GPU para o DRM, que atua como um árbitro e toma cuidado para evitar possíveis conflitos.

O escopo do DRM foi expandido ao longo dos anos para abranger mais funcionalidades previamente tratadas pelos programas de espaço do usuário, como gerenciamento de framebuffer e configuração de modo, compartilhamento de objetos de memória e sincronização de memória.[5][6] Algumas dessas expansões recebem nomes específicos, como o Graphics Execution Manager (GEM) ou o Kernel Mode-Setting (KMS), e a terminologia prevalece quando a funcionalidade que eles fornecem é especificamente aludida. Mas eles são realmente partes de todo o subsistema DRM do kernel.

A tendência de incluir duas GPUs em um computador—uma GPU discreta e uma integrada—levou a novos problemas, como a comutação da GPU, que também precisavam ser resolvidos na camada de DRM. A fim de combinar a tecnologia Nvidia Optimus, o DRM foi expandido com a capacidade de descarregamento de GPU, chamado PRIME.[7]

Adoção[editar | editar código-fonte]

O subsistema de kernel Direct Rendering Manager foi inicialmente desenvolvido para ser usado com a nova infraestrutura de renderização direta do servidor de exibição XFree86 4.0, posteriormente herdado por seu sucessor, o X.Org Server. Portanto, os principais usuários do DRM eram clientes DRI que se vinculam à implementação do OpenGL acelerada por hardware que reside na biblioteca do Mesa 3D, bem como ao próprio servidor X. Atualmente, o DRM também é usado por vários compositores Wayland, incluindo o compositor de referência Weston. O kmscon é uma implementação de console virtual que é executada no espaço do usuário usando os recursos do KMS presentes no DRM.[8]

Em 2015, a versão 358.09 (beta) do driver proprietário Nvidia GeForce recebeu suporte para a configuração de modo da interface DRM implementada como um novo blob do kernel chamado nvidia-modeset.ko. Esse novo componente de driver funciona em conjunto com o módulo do kernel nvidia.ko para programar o mecanismo de exibição (ou seja, o controlador de exibição) da GPU.[9]

Ver também[editar | editar código-fonte]

Referências

  1. «Linux kernel/drivers/gpu/drm/README.drm». kernel.org (em inglês). Consultado em 29 de maio de 2018. Arquivado do original em 26 de fevereiro de 2014 
  2. Uytterhoeven, Geert. «The Frame Buffer Device». Kernel.org (em inglês). Consultado em 2 de março de 2021 
  3. a b White, Thomas. «How DRI and DRM Work» (em inglês). Consultado em 29 de maio de 2018 
  4. Faith, Rickard E. (11 de maio de 1999). «The Direct Rendering Manager: Kernel Support for the Direct Rendering Infrastructure» (em inglês). Consultado em 29 de maio de 2018 
  5. Corbet, Jonathan (6 de novembro de 2007). «Memory management for graphics processors». LWN.net (em inglês). Consultado em 29 de maio de 2018 
  6. Packard, Keith; Anholt, Eric (13 de maio de 2008). «GEM - the Graphics Execution Manager». dri-devel mailing list (em inglês). Consultado em 29 de maio de 2018 
  7. Airlie, Dave (12 de maio de 2010). «GPU offloading - PRIME - proof of concept» (em inglês). Consultado em 29 de maio de 2018. Cópia arquivada em 15 de dezembro de 2017 
  8. Herrmann, David (10 de dezembro de 2012). «KMSCON Introduction» (em inglês). Consultado em 29 de maio de 2018 
  9. «Linux, Solaris, and FreeBSD driver 358.09 (beta)» (em inglês). 10 de dezembro de 2015 

Ligações externas[editar | editar código-fonte]