Setelah didiskusikan dalam berbagai bentuk sejak 2017, IOMMUFD telah diajukan untuk kernel Linux 6.2 sebagai landasan untuk merombak penanganan IOMMU oleh QEMU dan mesin virtual di Linux.
Jason Gunthorpe dari NVIDIA mengirimkan permintaan penarikan IOMMUFD hari ini untuk jendela penggabungan Linux 6.2. Begini cara dia menjelaskannya:
Ini adalah PR pertama untuk perangkat char baru yang disebut `iommufd`. Ini telah didiskusikan selama sekitar dua tahun sekarang, sementara upaya untuk mengimplementasikan fitur yang diperlukan telah dicoba sejak tahun 2017. Pada bulan Januari, sekelompok dari kami duduk dan benar-benar berhasil.
Mungkin tampak aneh bahwa fungsi tingkat rendah, yang tampaknya internal, seperti iommu akan memiliki API pengguna. Namun, untuk kinerja, telah menjadi sangat populer untuk mengatur mesin virtual sehingga HW (misalnya perangkat jaringan/penyimpanan) dapat mengarahkan DMA ke dalam memori mesin virtual itu sendiri. Untuk mencapai hal ini diperlukan pemrograman khusus dari IOMMU HW.
Selanjutnya, kami memiliki fitur PCI lanjutan seperti Process Address Space ID (PASID) dan Page Request Interface (PRI) yang mengandalkan IOMMU HW untuk mengimplementasikannya. Khususnya PASID & PRI digunakan untuk membuat sesuatu yang disebut Shared Virtual Addressing (SVA atau SVM) di mana DMA dari perangkat dapat langsung dikirim ke alamat memori virtual proses dengan membuat IOMMU HW langsung menjalankan tabel halaman CPU untuk proses tersebut , dan memicu kesalahan untuk DMA ke halaman yang tidak ada.
Biasanya orang ingin memiliki versi virtual dari semua ini. Driver vIOMMU yang dapat mengimplementasikan vPASID dan vPRI untuk mencapai vSVA dalam VM.
Jadi, kita sampai ke iommufd. Ini adalah uAPI untuk memungkinkan sesuatu seperti qemu memiliki kontrol langsung atas IOMMU untuk mengimplementasikan, di ruang pengguna, emulasi perangkat vIOMMU yang dapat menyediakan semua layanan ini ke driver IOMMU yang berjalan di VM. Seperti KVM, ini dilakukan dengan cara umum di mana kami mendelegasikan fungsionalitas ke ruang pengguna dan jika ruang pengguna adalah sesuatu seperti qemu maka itu akan menyusun fungsionalitas itu menjadi perangkat vIOMMU yang ditiru. iommufd sendiri tidak berinteraksi dengan virtualisasi atau KVM.
PR ini adalah titik awal, ini hanya menyiapkan semua infrastruktur sehingga sebagus VFiO saat ini. Kami melihat kebutuhan yang luas untuk fitur yang diperluas, beberapa di antaranya sangat spesifik untuk perangkat IOMMU:
- Mengikat iommu_domain ke PASID/SSID
- Tabel halaman IO Userspace, untuk ARM, x86 dan S390
- Kernel melewati pembatalan tabel halaman pengguna
- Penggunaan kembali tabel halaman KVM di IOMMU
- Pelacakan halaman kotor di IOMMU
- Peningkatan/Penurunan Runtime ukuran IOPTE
- Dukungan PRI dengan kesalahan diselesaikan di ruang penggunaLebih detail dan status saat ini di IOMMUFD dapat ditemukan melalui permintaan tarik.
IOMMUFD adalah API pengguna untuk mengontrol subsistem IOMMU yang berkaitan dengan pengelolaan tabel halaman IO dari ruang pengguna menggunakan deskriptor file. Itu dimaksudkan untuk menjadi umum dan dapat dikonsumsi oleh driver mana pun yang ingin mengekspos DMA ke ruang pengguna. Driver ini pada akhirnya diharapkan untuk menghentikan logika IOMMU internal apa pun yang mungkin sudah/secara historis mereka terapkan (mis. vfio_iommu_type1.c).
Minimal iommufd memberikan dukungan universal untuk mengelola ruang alamat I/O dan tabel halaman I/O untuk semua IOMMU, dengan ruang dalam desain untuk menambahkan fitur non-generik untuk melayani fungsionalitas perangkat keras tertentu.
Dalam konteks ini huruf kapital (IOMMUFD) mengacu pada subsistem sedangkan huruf kecil (iommufd) merujuk pada deskriptor file yang dibuat melalui /dev/iommu untuk digunakan oleh ruang pengguna. Ada juga dokumentasi kernel yang juga mencakup detail lebih lanjut tentang IOMMUFD.
Kecualikan keberatan apa pun dari Linus Torvalds, kode IOMMUFD awal harus membuatnya menjadi Linux 6.2 sementara ada pekerjaan fitur lebih lanjut yang sudah ditangani untuk siklus kernel di masa mendatang.
Itulah berita seputar IOMMUFD Diserahkan Untuk Linux 6.2 Untuk Merombak Penanganan IOMMU, semoga bermanfaat. Disadur dari Phoronix.com.