3 puan yazan GN⁺ 2025-08-08 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Bu yazı, Rust ile geliştirilen Linux çekirdeği için en son GPU sürücüsü Tyrin geliştirme sürecine ve GPU sürücülerinin çalışma prensiplerine odaklanır
  • GPU sürücü geliştirmesinde UMD (Kullanıcı Modu Sürücüsü) ile KMD (Çekirdek Modu Sürücüsü) rollerinin ayrımı ve etkileşimi VkCube örneğiyle açıklanır
  • UMD, yüksek seviyeli API'leri GPU'nun anlayabileceği düşük seviyeli komutlara dönüştürürken, KMD bellek tahsisi, iş zamanlama, cihaz başlatma gibi temel görevleri üstlenir
  • Tyr sürücüsünün sunduğu API, Panthor ile aynıdır ve cihaz sorgulama, bellek yönetimi, grup yönetimi, iş gönderme, Tiler yığın yönetimi gibi bileşenlerden oluşur
  • Bir sonraki yazıda Arm CSF donanım mimarisi ve temel bileşenleri (ör. MCU) ile önyükleme süreci ele alınacaktır

Giriş: Rust tabanlı modern bir GPU çekirdek sürücüsü geliştirme

  • Bu yazı, Linux çekirdeğinde Arm Mali CSF tabanlı GPU'yu destekleyen en yeni Rust GPU çekirdek sürücüsü Tyr geliştirme serisinin ikinci yazısıdır
  • Pratik bir örnek olarak Vulkan API ile dönen bir küpü render eden basit bir 3D program olan VkCube seçilerek GPU sürücüsünün iç çalışma mantığı anlatılır
  • VkCube'un sade yapısı, GPU sürücüsü çalışma prensiplerini öğrenmek için uygun bir örnektir

GPU Sürücüsünün Temelleri: UMD ve KMD'nin Rolü ile Yapısı

  • User Mode Driver(UMD) ve Kernel Mode Driver(KMD) olmak üzere iki katmandan oluşur
    • UMD: panvk (Mesa'nın Vulkan sürücüsü vb.) gibi genel program API'lerini (Vulkan, OpenGL vb.) uygular
    • KMD: Tyr gibi yetkili bir kernel seviyesindeki donanım sürücüsü olup Linux çekirdeğinin bir parçası olarak çalışır
  • Kernel mod sürücüsü, UMD ile gerçek GPU arasındaki bağı kurar; UMD ise API komutlarını GPU'nun anlayabileceği komut setine çevirir
  • UMD, bir sahneyi oluşturmak için gereken geometri, doku, shader gibi verileri hazırlar ve çalıştırmadan önce bunların GPU belleğinde ayrılmasını KMD'den ister
  • Shader, GPU'da çalışan bağımsız bir programdır; VkCube'da küp yerleştirme, renklendirme ve dönüşüm uygulama gibi görevleri üstlenir. Shader çalıştırmak dış veriler (geometri, renk, dönüş matrisi vb.) gerektirir
  • UMD, hazırlanan komutları (ör. VkCommandBuffers) KMD'ye ileterek çalıştırır; iş tamamlandığında bildirim alır ve sonucu belleğe yazabilir

KMD (Kernel Mode Driver)'in Başlıca Sorumlulukları

  • GPU belleği tahsis ve eşleme (uygulama bazında izolasyon sağlar)
  • Donanım kuyruğuna iş gönderme ve tamamlanma anında kullanıcıya bildirim verme
  • Asenkron ve paralel donanım ortamlarında iş bağımlılığı yönetimi zorunludur; doğru sonuç için KMD, zamanlama ve bağımlılık doğrulama görevini üstlenir
  • Cihaz başlatma, saat/gerilim regülatörü sürme, başlangıç kodunun çalıştırılması, birden fazla istemciye donanımın adil şekilde paylaşılması için erişim rotasyon yönetimi gibi ek görevler de dahildir

Karmaşıklığın Yeri: UMD ile KMD'nin İş Bölümü

  • GPU sürücüsünün karmaşıklığının çoğu UMD'de yoğunlaşır
    • UMD: Yüksek seviyeli API komutlarını donanım komutlarına çevirir
    • KMD: UMD'nin düzgün çalışması için bellek izolasyonu, paylaşım ve adil erişim gibi kritik işlevleri sağlar

Tyr'nin Sağladığı Sürücü Arayüzü (API) Yapısı

  • Tyr sürücü API'si (=Panthor ile aynı) 5 ana gruba ayrılır
    1. Cihaz Bilgisi Sorgulama: DEV_QUERY (IOCTL ile GPU donanım bilgilerini kontrol etme, ROM alanını kullanma)
    2. Bellek Tahsisi ve İzolasyon: VM_CREATE, VM_BIND, VM_DESTROY, VM_GET_STATE, BO_CREATE, BO_MMAP_OFFSET
    3. Zamanlama Grubu Yönetimi: GROUP_CREATE, GROUP_DESTROY, GROUP_GET_STATE (ayrıntılar bir sonraki yazıda)
    4. İş Gönderme: GROUP_SUBMIT (cihaz komut tamponu ile GPU'da çalıştırma isteği)
    5. Tiler Heap Yönetimi: TILER_HEAP_CREATE, TILER_HEAP_DESTROY (tile tabanlı render GPU'larının bellek gereksinimlerini karşılar)
  • Bu API'ler doğrudan çizim yapmakla ilgili değildir; gerçek komut yürütme UMD tarafından yapılır ve KMD yalnızca donanıma erişim için yalnızca bu arayüzü sağlar

Sonuç ve Sonraki Plan

  • Bu yazıda GPU sürücüsünün genel mimarisi ve iç akışı ile Tyr'nin sunduğu temel API'ler incelendi
  • Bu temele dayanarak serinin ilerleyen yazılarında Arm CSF donanım mimarisi, Mikro Kontrolör Birimi (MCU) gibi kritik bileşenler ve sürücü başlatma süreci ele alınacaktır

Henüz yorum yok.

Henüz yorum yok.