- 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
- Cihaz Bilgisi Sorgulama: DEV_QUERY (IOCTL ile GPU donanım bilgilerini kontrol etme, ROM alanını kullanma)
- Bellek Tahsisi ve İzolasyon: VM_CREATE, VM_BIND, VM_DESTROY, VM_GET_STATE, BO_CREATE, BO_MMAP_OFFSET
- Zamanlama Grubu Yönetimi: GROUP_CREATE, GROUP_DESTROY, GROUP_GET_STATE (ayrıntılar bir sonraki yazıda)
- İş Gönderme: GROUP_SUBMIT (cihaz komut tamponu ile GPU'da çalıştırma isteği)
- 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.