Direct memory access memungkinkan perangkat memindahkan data antara dirinya dan memori sistem tanpa membuat CPU menyalin setiap byte. Network adapter, storage controller, GPU, dan perangkat ber-throughput tinggi lainnya mengandalkan DMA agar data dapat bergerak secara efisien.

Kemampuan itu juga menciptakan persoalan proteksi. Perangkat yang dapat mengeluarkan transaksi memori tanpa pembatasan dapat membaca atau menimpa page fisik milik kernel, proses lain, atau virtual machine lain. Input-output memory management unit, yang umum disebut IOMMU, menempatkan translasi alamat dan access control di antara perangkat yang mampu melakukan DMA dan memori fisik.

Secara umum mekanismenya menyerupai translasi virtual memory CPU, tetapi melayani transaksi yang berasal dari perangkat, bukan load dan store prosesor biasa.

Alamat yang terlihat oleh perangkat dapat berbeda dari alamat fisik

Perangkat yang mampu melakukan DMA biasanya bekerja dengan alamat yang diberikan driver. Tanpa remapping, alamat tersebut dapat berkorespondensi langsung dengan lokasi memori fisik atau mengikuti aturan DMA khusus platform.

Dengan IOMMU aktif, perangkat dapat mengeluarkan permintaan DMA menggunakan I/O virtual address. IOMMU menerjemahkan alamat itu melalui pemetaan yang dikonfigurasi software berprivilege dan mengarahkan transaksi hasilnya ke page fisik yang diizinkan.

Lapisan translasi tambahan ini memberi operating system atau hypervisor kendali atas rentang memori yang terlihat oleh perangkat. Perangkat tidak memerlukan akses tanpa batas ke seluruh address space fisik mesin.

Sebuah pemetaan juga dapat menyajikan rentang yang tampak kontigu bagi perangkat meskipun page fisik pendukungnya tersebar. Properti ini dapat mengurangi batasan pada beberapa DMA engine, walaupun kemampuan tepatnya bergantung pada platform dan perangkat.

Domain translasi memisahkan akses perangkat

Konfigurasi IOMMU umumnya mengelompokkan pemetaan ke dalam translation domain. Sebuah domain mendefinisikan address space dan permission terkait untuk satu atau beberapa perangkat.

Perangkat yang terhubung ke satu domain dapat mengakses page yang dipetakan ke domain tersebut. Page yang tidak ada dalam pemetaan bukan target DMA yang valid bagi perangkat itu. Permission read dan write juga dapat dikendalikan secara terpisah ketika hardware dan software stack mendukungnya.

Boundary ini sangat penting dalam virtualisasi. Hypervisor dapat memberikan perangkat fisik kepada guest sambil mengatur pemetaan IOMMU agar perangkat hanya mencapai memori milik guest tersebut, bukan page host atau guest lain secara arbitrer.

IOMMU tidak membuat assignment perangkat aman dengan sendirinya. Routing interrupt, perilaku reset, firmware, state perangkat, dan batasan grouping juga dapat berpengaruh. DMA remapping menangani bagian akses memori dari persoalan isolasi.

Page table mendefinisikan pemetaan DMA

Seperti memory-management unit CPU, IOMMU umumnya menggunakan struktur page table di memori. Software berprivilege membuat entry yang mengaitkan rentang alamat yang terlihat perangkat dengan page fisik dan permission yang sesuai.

Ketika perangkat mengeluarkan transaksi DMA, IOMMU mengidentifikasi konteks translasi yang relevan, mencari pemetaan, memeriksa hak akses, dan menghasilkan tujuan fisik jika permintaan valid.

Pemetaan yang tidak ada atau tidak diizinkan dapat memicu fault alih-alih membiarkan transaksi mencapai memori arbitrer. Operating system dapat mencatat fault tersebut untuk diagnosis, dan fault berulang sering menunjukkan masalah driver, firmware, assignment, atau konfigurasi.

Ukuran page dan format table berbeda antarimplementasi. Pemetaan large page dapat mengurangi overhead translasi untuk region DMA besar, sedangkan page yang lebih kecil memungkinkan placement dan proteksi yang lebih granular.

Cache translasi mengurangi biaya lookup berulang

Melakukan page-table walk untuk setiap transaksi DMA akan menambah overhead yang besar. Karena itu IOMMU menggunakan translation cache yang menyimpan pemetaan yang baru saja diselesaikan.

Translasi yang tersimpan di cache memungkinkan transaksi berikutnya menghindari table walk penuh. Hal ini berguna bagi perangkat yang berulang kali mengakses descriptor ring, packet buffer, command queue, frame buffer, atau region aktif lainnya.

Caching menimbulkan kebutuhan maintenance. Ketika software mengubah pemetaan DMA, translasi lama di cache tidak boleh tetap dapat digunakan setelah pemetaan lama seharusnya tidak valid.

Interface IOMMU menyediakan operasi invalidation untuk tujuan ini. Software harus mengikuti aturan ordering platform agar perubahan pemetaan, invalidation, dan aktivitas perangkat berlangsung dalam urutan yang aman.

Biaya mapping dan invalidation dapat terlihat pada workload yang membuat dan menghapus pemetaan DMA dengan laju sangat tinggi.

DMA remapping tidak menggantikan proteksi page CPU

Page table CPU dan pemetaan IOMMU melindungi sumber transaksi yang berbeda.

Proses yang berjalan di CPU dibatasi oleh pemetaan address space dan pemeriksaan privilege prosesor saat itu. Perangkat PCIe yang melakukan DMA tidak menjalankan load dan store proses tersebut, sehingga permission page table CPU saja tidak mengatur transaksi memorinya.

IOMMU menambahkan enforcement point terpisah untuk akses yang berasal dari perangkat. Sebuah page fisik dapat dipetakan ke address space proses, domain IOMMU, keduanya, atau tidak satu pun, sesuai data path yang dimaksud.

Driver dan operating system mengoordinasikan pemetaan ini ketika buffer disiapkan untuk akses perangkat. API tepatnya berbeda antar-operating system, tetapi persyaratan utamanya tetap sama: perangkat harus menerima alamat yang valid dalam konteks translasi DMA-nya.

Isolasi bergantung pada granularitas perangkat

Boundary proteksi hanya setepat kemampuan platform dalam mengidentifikasi sumber transaksi DMA.

Transaksi PCIe membawa informasi requester identity yang dapat digunakan IOMMU untuk memilih konteks translasi. Pada banyak sistem, hal ini mendukung isolasi pada granularitas perangkat atau function.

Hardware nyata dapat menerapkan batasan grouping. Beberapa function mungkin berbagi perilaku atau topologi yang membuatnya tidak dapat diperlakukan sebagai boundary keamanan yang sepenuhnya independen. Bridge, fitur legacy, atau perangkat dengan perilaku peer-to-peer yang tidak biasa juga dapat memengaruhi keputusan assignment.

Software virtualisasi sering mengekspos IOMMU group atau konsep serupa untuk mewakili sekumpulan perangkat yang tidak dapat dipisahkan dengan aman untuk direct assignment pada platform tersebut.

Group kecil memudahkan assignment karena lebih sedikit perangkat yang tidak terkait harus dipindahkan bersama. Group besar dapat membuat direct device passthrough tidak praktis meskipun DMA remapping tersedia.

Mode bypass menukar proteksi dengan translasi yang lebih sederhana

Tidak setiap transaksi perangkat harus selalu melewati address space yang ditranslasikan. Platform dan operating system dapat mendukung identity mapping atau mode menyerupai bypass, ketika alamat yang terlihat perangkat berkorespondensi langsung dengan alamat fisik.

Konfigurasi seperti itu dapat mengurangi kerja translasi atau mendukung perangkat dengan kebutuhan khusus, tetapi juga mengubah boundary proteksi. Perangkat dengan identity mapping luas dapat mencapai setiap rentang fisik yang dicakup pemetaan tersebut.

Nilai keamanan berasal dari pemetaan yang restriktif, bukan sekadar keberadaan hardware IOMMU.

Firmware sistem dan operating system juga harus mengaktifkan dan mengonfigurasi fitur tersebut dengan benar. Dukungan hardware yang tetap dinonaktifkan tidak menyediakan barrier DMA-remapping aktif.

Device passthrough mengandalkan pemetaan yang terkoordinasi

Direct assignment memberi virtual machine kendali lebih langsung atas perangkat fisik dibanding interface emulated atau paravirtualized. Hal ini dapat mengurangi overhead software dan mengekspos kemampuan khusus perangkat.

Agar DMA bekerja, perangkat yang diberikan memerlukan pemetaan yang mengarah ke backing memory guest yang diizinkan. Hypervisor mengoordinasikan pemetaan tersebut dengan layout memori guest dan aktivitas DMA perangkat.

Platform modern dapat menyediakan fasilitas tambahan untuk device sharing yang lebih scalable, address-space identifier, atau page request yang dihasilkan perangkat. Fitur tersebut memperluas model dasar, tetapi tidak menghapus boundary utamanya: transaksi memori perangkat harus dikaitkan dengan konteks translasi yang diotorisasi.

Passthrough juga mengurangi kemampuan hypervisor untuk memediasi setiap operasi perangkat. Karena itu administrator memerlukan isolasi hardware yang sesuai, dukungan reset, firmware tepercaya, dan boundary assignment yang benar selain pemetaan IOMMU.

Fault memperlihatkan aktivitas DMA yang tidak valid

IOMMU fault dapat menjadi sinyal yang berguna. Fault dapat menunjukkan perangkat mencoba mengakses alamat yang tidak dipetakan, menggunakan operasi yang tidak diizinkan, atau mengeluarkan transaksi dari konteks yang tidak diharapkan.

Satu fault tidak mengidentifikasi akar masalah dengan sendirinya. Bug driver, descriptor usang, penggunaan ulang buffer terlalu dini, konfigurasi passthrough yang salah, cacat firmware perangkat, dan kesalahan ordering pemetaan dapat menghasilkan gejala serupa.

Diagnosis yang berguna mengorelasikan requester identity, alamat yang mengalami fault, jenis akses, state perangkat, dan operasi pemetaan terbaru. Bukti tersebut dapat mempersempit fault ke data path DMA tertentu.

Menonaktifkan remapping mungkin membuat fault yang terlihat menghilang, tetapi dapat mengubah akses tidak valid yang sebelumnya diblokir menjadi korupsi memori diam-diam. Laporan fault karena itu merupakan bukti yang bernilai, bukan sekadar noise performa.

Efek praktisnya adalah akses memori perangkat yang dibatasi

DMA memberi perangkat akses berkecepatan tinggi ke memori sistem. IOMMU menambahkan boundary yang dapat diprogram di sekitar akses tersebut dengan menerjemahkan alamat yang terlihat perangkat dan menolak transaksi di luar pemetaan yang dikonfigurasi.

Manfaatnya melampaui virtualisasi. Isolasi DMA dapat membatasi dampak perangkat bermasalah, memperketat proteksi memori kernel, mendukung perangkat dengan kemampuan addressing terbatas, dan memberi kendali lebih bersih atas paparan memori fisik.

Mekanisme ini memiliki biaya: page table memakai memori, translasi membutuhkan kerja hardware, cache membutuhkan invalidation, dan software harus mengelola pemetaan dengan benar. Implementasi yang efisien menyembunyikan sebagian besar overhead itu melalui caching, batching, dan pemetaan berumur panjang.

Trade-off intinya tetap jelas. DMA tanpa pembatasan memberi perangkat jangkauan fisik yang luas, sedangkan IOMMU remapping mengubah jangkauan itu menjadi address space yang dipetakan secara eksplisit dengan boundary yang dapat ditegakkan.