Perangkat yang mendukung DMA dapat mengirim transaksi memori tanpa CPU menyalin setiap payload. Pada sistem dengan IOMMU, alamat yang dibawa transaksi perangkat tidak harus berupa alamat fisik host. IOMMU dapat menerjemahkan I/O virtual address yang terlihat oleh perangkat menjadi halaman fisik dan menolak akses di luar mapping yang telah dikonfigurasi.
Batas translasi tersebut memengaruhi isolasi sekaligus perpindahan data. Driver dan sistem operasi dapat memberikan ruang alamat terbatas kepada perangkat, sementara hardware perlu mempertahankan state translasi cukup dekat dengan jalur I/O agar setiap permintaan DMA tidak selalu memicu page-table walk.
Alamat DMA membentuk domain alamat terpisah
Tanpa translasi alamat pada jalur I/O, perangkat umumnya memerlukan alamat DMA yang sesuai dengan lokasi memori yang dapat dijangkau melalui interconnect platform. Dengan IOMMU aktif, software dapat memasang mapping dari I/O virtual address ke memori fisik.
permintaan DMA perangkat
|
v
I/O virtual address
|
v
IOMMU
|
v
alamat fisik host
|
v
memoriPerangkat beroperasi pada alamat yang diberikan kepadanya. Translasi dilakukan oleh platform, bukan oleh instruksi load dan store CPU biasa.
Pemisahan ini memungkinkan halaman fisik yang sama muncul pada alamat berbeda di sisi perangkat. Software juga dapat tidak menyediakan mapping untuk memori yang tidak boleh diakses perangkat.
Istilah spesifik berbeda antararsitektur. Dokumentasi Intel lazim memakai istilah DMA remapping pada VT-d, sedangkan sistem Arm memakai SMMU untuk tugas translasi I/O yang sebanding. Model pemrogramannya tidak identik, sehingga uraian IOMMU secara umum merupakan abstraksi sistem, bukan satu antarmuka register universal.
Isolasi bergantung pada konteks translasi aktif
Keberadaan IOMMU saja tidak otomatis menghasilkan isolasi. Isolasi berasal dari konteks translasi dan page table yang dipilih untuk perangkat atau requester.
Sebuah mapping dapat memberikan akses baca, akses tulis, atau izin lain yang spesifik terhadap arsitektur untuk sekumpulan halaman. Transaksi DMA di luar translasi yang diizinkan dapat menghasilkan fault alih-alih mencapai memori fisik secara bebas.
Hal ini penting pada device assignment. Sebuah virtual machine dapat menerima perangkat sementara host mengonfigurasi mapping I/O yang membatasi DMA ke memori milik guest tersebut. Page table CPU dan mapping IOMMU melindungi sumber transaksi yang berbeda, sehingga kedua batas tersebut sama-sama penting.
Kualitas isolasi juga bergantung pada identifikasi requester dan topologi platform yang benar. Jika hardware tidak dapat membedakan requester pada batas yang diperlukan, software tidak dapat menciptakan isolasi yang lebih rinci hanya melalui entri page table.
Cache translasi mengurangi page-table walk berulang
Translasi I/O memiliki persoalan lokalitas yang serupa dengan memori virtual CPU: page-table walk pada setiap transaksi akan menambah pekerjaan yang dapat dihindari. Karena itu, IOMMU memakai cache translasi yang spesifik terhadap implementasi.
Translasi yang tersimpan di cache memungkinkan permintaan DMA berikutnya memakai kembali mapping yang telah diselesaikan. Jalur umum menjadi lebih ringan, tetapi perubahan atau penghapusan mapping kemudian memerlukan pengelolaan state.
mapping dipasang
|
v
translasi tersimpan di cache
|
v
mapping diubah
|
v
invalidasi translasi lama
|
v
mapping baru aman digunakanSoftware harus mengikuti aturan invalidasi dan ordering arsitektur sebelum menganggap translasi lama tidak lagi dapat digunakan. Menghapus entri page table di memori saja bukan jaminan universal bahwa seluruh translasi I/O yang tersimpan di cache telah hilang.
Biaya invalidasi bergantung pada workload dan implementasi. Penalti latensi atau throughput yang tetap tidak dapat disimpulkan hanya dari keberadaan IOMMU.
Granularitas mapping memengaruhi tekanan translasi
Page table IOMMU umumnya mendukung mapping berukuran halaman, dan sebagian implementasi mendukung ukuran mapping yang lebih besar. Mapping besar dapat mencakup lebih banyak memori dengan lebih sedikit entri translasi ketika alignment, kontiguitas, izin, dan kemampuan platform mengizinkannya.
Pada kondisi yang sesuai, hal itu dapat mengurangi kedalaman page table atau tekanan cache translasi, tetapi batas mapping juga menjadi lebih kasar. Mapping besar tidak otomatis lebih baik ketika buffer memerlukan kontrol lifetime atau izin yang rinci.
Scatter-gather I/O menunjukkan kasus sebaliknya. Halaman fisik yang terpisah dapat dipetakan ke rentang yang terlihat oleh perangkat sehingga software dan hardware dapat mendeskripsikan DMA tanpa memerlukan satu alokasi fisik yang kontigu. Susunan yang tersedia tetap bergantung pada perangkat, DMA API, implementasi IOMMU, dan kebijakan sistem operasi.
Translasi alamat di sisi perangkat mengubah jalur
Perangkat PCI Express dapat mendukung Address Translation Services, atau ATS. Dengan ATS, perangkat yang kompatibel dapat meminta translasi dan menyimpan alamat hasil translasi secara lokal di bawah kendali platform.
Mekanisme ini menempatkan sebagian pemakaian ulang translasi lebih dekat ke requester, tetapi menambah kewajiban koherensi untuk state translasi. Ketika mapping berubah, translasi lama di sisi perangkat harus diinvalidasi sesuai protokol yang berlaku.
Dukungan ATS bukan berarti isolasi dilewati. ATS adalah mekanisme translasi terkoordinasi yang keamanan dan ketepatannya tetap bergantung pada IOMMU, perilaku perangkat, protokol invalidasi, dan konfigurasi software.
Fasilitas PCIe terkait seperti Process Address Space ID dapat membedakan ruang alamat yang terkait dengan transaksi pada sistem yang mendukungnya. Fitur tersebut memungkinkan konsep alamat virtual dibagi lebih langsung antara proses dan perangkat, tetapi dukungannya spesifik terhadap perangkat dan platform.
Fault menampilkan DMA tidak valid tanpa memperbaikinya secara diam-diam
IOMMU dapat mendeteksi transaksi yang tidak memiliki translasi valid atau melanggar izin yang dikonfigurasi. Platform dapat melaporkan fault tersebut kepada software sistem beserta informasi requester dan alamat yang ditentukan oleh arsitektur.
Fault sering menunjukkan masalah lifetime atau konfigurasi yang konkret: driver mungkin melepas mapping buffer terlalu cepat, memprogram alamat DMA yang salah, memilih domain yang keliru, atau membiarkan perangkat terus beroperasi setelah teardown.
IOMMU tidak membuat urutan DMA yang keliru menjadi benar. Nilai proteksinya terletak pada kemampuan memblokir dan menampilkan transaksi tidak valid agar transaksi tersebut tidak mencapai halaman fisik yang tidak terkait.
Penanganan fault juga bukan mekanisme demand paging universal. Sebagian arsitektur dan perangkat menyediakan fasilitas untuk permintaan halaman yang dapat dipulihkan, tetapi fault DMA biasa tidak dapat diasumsikan berhenti lalu dilanjutkan secara transparan.
Mode bypass menghilangkan sebagian batas
Platform dapat menyediakan identity mapping atau mode bypass translasi untuk perangkat maupun konfigurasi tertentu. Dalam mode tersebut, alamat yang terlihat oleh perangkat dapat langsung sesuai dengan alamat fisik untuk jalur transaksi terkait.
Bypass dapat menghilangkan pekerjaan translasi, tetapi juga menghilangkan perlindungan dari mapping yang ditranslasikan pada jalur tersebut. Ketersediaan dan kelayakan bypass bergantung pada kebijakan platform, asumsi kepercayaan, firmware, konfigurasi sistem operasi, dan kebutuhan perangkat.
Perbandingan performa karena itu harus menyebut mode yang benar-benar aktif. IOMMU aktif dengan translasi tersimpan di cache, domain identity-mapped, dan full bypass merupakan konfigurasi berbeda meskipun aplikasi mengirim I/O yang sama.
Perilaku IOMMU berada di antara maksud driver dan akses memori
Driver mengatur buffer dan mapping DMA; perangkat mengirim transaksi; IOMMU menegakkan konteks translasi aktif; memori hanya menerima transaksi yang lolos dari jalur tersebut.
Batas ini berguna karena terpisah dari translasi alamat CPU biasa. IOMMU dapat membatasi perangkat otonom, mendukung ruang alamat DMA yang dipetakan ulang, dan menampilkan akses tidak valid sebagai fault.
Biaya praktisnya bukan satu tambahan tetap. Struktur page table, ukuran mapping, lokalitas translasi, frekuensi invalidasi, fitur translasi di sisi perangkat, topologi platform, dan detail implementasi bersama-sama membentuk perilaku akhirnya.