PCIe ACS Menentukan Apakah Traffic Peer Dapat Melewati IOMMU

IOMMU hanya dapat membatasi DMA untuk transaksi yang benar-benar mencapai pemeriksaan translasi dan permission miliknya. PCI Express membuat batas ini lebih rumit karena dua endpoint dalam hierarchy yang sama dapat bertukar traffic peer-to-peer tanpa mengirim setiap transaksi melalui root complex. Sebuah switch dapat meneruskan request langsung dari satu downstream port ke downstream port lain.

PCIe Access Control Services (ACS) menambahkan kontrol pada batas routing tersebut. Bergantung pada komponen dan fitur ACS yang didukung, fabric dapat memvalidasi request, memblokir traffic hasil translasi tertentu, mengarahkan request atau completion peer ke upstream, atau membatasi egress. Dampaknya bukan sekadar pilihan rute. ACS dapat menentukan apakah dua perangkat bisa dipisahkan pada batas IOMMU.

Jalur peer dapat tetap berada di bawah root port

Bayangkan dua endpoint terhubung ke switch PCIe yang sama. Perangkat A mengirim Memory Write ke alamat yang diekspos perangkat B. Jika switch dapat meneruskan request tersebut langsung ke B, transaksi tidak perlu lebih dulu naik ke root port.

                 root complex
                      |
                  root port
                      |
                    switch
                   /      \
           perangkat A  perangkat B
                   \------>/
                 jalur P2P lokal

Jalur lokal ini berguna untuk DMA peer-to-peer. Jalur yang sama juga dapat menjadi masalah isolasi ketika software mengharapkan IOMMU memediasi traffic di antara kedua endpoint. IOMMU yang berada di upstream tidak dapat menegakkan kebijakan pada transaksi yang tidak pernah mencapainya.

Karena itu, batas yang relevan mencakup topologi PCIe, bukan hanya page table IOMMU. Tabel translasi yang benar tidak dapat menggantikan interconnect path yang melewati unit translasi.

Request redirect mengubah jalur yang terlihat oleh platform

ACS P2P Request Redirect dapat memaksa request peer yang sesuai menuju upstream port, alih-alih membiarkan komponen meneruskannya langsung di antara downstream peer. P2P Completion Redirect menyediakan kontrol terkait untuk completion.

Jalur yang mengalami redirect dapat disederhanakan seperti berikut:

perangkat A
   |
   v
 switch PCIe
   |
   | ACS redirect
   v
jalur upstream
   |
batas kebijakan IOMMU / root complex
   |
   v
jalur tujuan

Rute dan perilaku enforcement yang tepat bergantung pada topologi platform serta ACS capability yang diimplementasikan setiap komponen. ACS merupakan sekumpulan kontrol, bukan satu sakelar universal. Source Validation, Translation Blocking, P2P Request Redirect, P2P Completion Redirect, Upstream Forwarding, P2P Egress Control, dan Direct Translated P2P adalah fungsi ACS yang berbeda.

Perbedaan ini penting saat memeriksa hardware. Adanya ACS capability tidak membuktikan bahwa seluruh fungsi ACS tersedia, aktif, atau menyediakan properti isolasi yang dibutuhkan suatu deployment.

IOMMU group mencerminkan jalur yang tidak dapat diisolasi dengan aman

Linux mengekspos IOMMU group sebagai kumpulan perangkat yang membentuk unit isolasi minimum untuk ownership berbasis IOMMU. Dokumentasi VFIO mencatat bahwa topologi interconnect dapat mengurangi granularitas isolasi walaupun IOMMU mampu membedakan requester secara individual. Bridge tanpa perilaku ACS yang sesuai dapat membiarkan transaksi berpindah antarpiranti tanpa mencapai IOMMU.

Kondisi itu dapat menempatkan beberapa endpoint dalam IOMMU group yang sama.

IOMMU group 18
  0000:41:00.0
  0000:42:00.0

Pengelompokan tersebut bukan sekadar pilihan administratif untuk menyatukan hardware terkait. Ia mewakili batas isolasi yang ditemukan dari topologi perangkat dan interconnect. Menyerahkan hanya satu anggota kepada userspace driver atau virtual machine yang tidak dipercaya dapat berbahaya jika anggota lain menyediakan jalur yang melewati batas DMA yang seharusnya berlaku.

Komponen routing dengan ACS dapat memungkinkan pemisahan lebih halus ketika kontrol yang didukung dan dikonfigurasi membentuk isolasi yang diperlukan. Faktor lain tetap berpengaruh, termasuk multifunction device, bridge yang menyembunyikan requester identity, dan perilaku IOMMU yang spesifik terhadap platform.

Menonaktifkan redirect dapat membantu P2P sekaligus mengurangi isolasi

Linux menyediakan parameter kernel disable_acs_redir= untuk perangkat PCI tertentu. Dokumentasi kernel menyatakan bahwa memaksa ACS redirect capability menjadi nonaktif dapat memungkinkan traffic peer melewati bridge tanpa dipaksa menuju upstream. Dokumentasi yang sama memperingatkan bahwa tindakan ini menghilangkan isolasi antarpiranti dan dapat membuat lebih banyak perangkat masuk ke IOMMU group yang sama.

Trade-off ini berasal dari struktur jalur. Direct peer path dapat dibutuhkan workload yang sengaja memindahkan data antarpiranti, misalnya pada konfigurasi storage, accelerator, atau network tertentu. Namun jalur yang lebih pendek dan batas isolasi yang lebih kuat dapat membutuhkan perilaku routing yang berlawanan.

Ini tidak berarti ACS harus selalu aktif atau direct P2P harus selalu dinonaktifkan. Konfigurasi yang tepat mengikuti model ownership. Sekumpulan perangkat yang dipercaya sebagai satu unit dapat memiliki kebutuhan routing berbeda dari perangkat yang diberikan kepada guest terpisah atau proses tidak tepercaya yang berbeda.

Dukungan PCI peer-to-peer DMA di Linux juga mengevaluasi topologi karena routing peer melintasi host bridge tidak didefinisikan secara seragam oleh PCIe. Pengaturan ACS dapat menentukan apakah transaksi tetap berada dalam hierarchy PCIe dengan perilaku yang jelas atau diarahkan menuju host bridge. Karena itu, kelayakan P2P dan isolasi berbagi sebagian analisis topologi yang sama.

Source Validation memeriksa requester identity pada suatu batas

ACS Source Validation menangani bagian lain dari persoalan ini. Transaksi PCIe membawa requester identity, sedangkan mekanisme isolasi sering memakai identitas tersebut untuk memilih konteks translasi atau permission. Komponen yang mendukung Source Validation dapat memeriksa apakah request yang diterima membawa requester identity yang valid untuk ingress path tersebut.

Fungsi ini berbeda dari P2P Request Redirect. Redirect mengontrol arah penerusan traffic. Source Validation memeriksa apakah source identity dapat diterima pada titik kedatangan request.

Keduanya dapat berkontribusi pada tujuan isolasi yang sama, tetapi bekerja pada properti berbeda. Menganggap ACS sebagai satu fitur boolean menutupi perbedaan itu dan dapat menghasilkan kesimpulan yang keliru dari capability listing.

ACS tidak membuat setiap topologi memiliki isolasi per perangkat

ACS tidak dapat memperbaiki setiap sumber shared fate dalam hierarchy PCIe. Multifunction device dapat memiliki jalur internal antarfungsi yang berada di luar kontrol switch upstream. Legacy PCI bridge dapat menyamarkan granularitas requester. Platform juga dapat memiliki batasan IOMMU atau root complex yang membuat beberapa perangkat tetap tidak dapat dipisahkan.

Untuk device assignment, properti yang relevan bukan sekadar apakah satu switch melaporkan ACS. Yang menentukan adalah apakah keseluruhan jalur menyediakan batas isolasi yang dapat diandalkan system software.

Linux mengodekan hasil tersebut melalui IOMMU grouping sehingga userspace tidak perlu menyimpulkan keamanan dari satu capability bit. Tool dapat menampilkan status ACS untuk diagnosis, tetapi memaksa grouping berbeda tanpa isolasi hardware yang sepadan hanya mengubah asumsi keamanan, bukan menciptakan isolasi baru.

Kebijakan routing merupakan bagian dari isolasi DMA

Proteksi IOMMU sering digambarkan sebagai persoalan address translation: hubungkan perangkat ke translation domain, petakan hanya page yang diizinkan, lalu tolak akses lainnya. Routing peer PCIe menambahkan syarat sebelum itu. Transaksi harus benar-benar melewati enforcement point agar mapping tersebut berpengaruh.

ACS menyediakan kontrol fabric yang membantu mempertahankan syarat tersebut pada switch dan bridge PCIe. Dampak praktisnya terlihat pada batas IOMMU group, VFIO device assignment, dan keputusan routing P2P. Prinsip yang bertahan adalah topologis: isolasi DMA bergantung pada setiap jalur yang dapat dilalui transaksi perangkat, bukan hanya pada page table yang diprogram ke IOMMU.