PCIe PASID Memungkinkan Satu Perangkat Membawa Banyak Konteks Address Space

Sebuah fungsi PCIe biasanya memiliki Requester ID yang berasal dari identitas bus, device, dan function. Identifier ini memberi tahu komponen platform fungsi mana yang mengirim transaksi, tetapi cakupannya terlalu kasar ketika satu perangkat menangani pekerjaan dari beberapa address space proses secara bersamaan.

Process Address Space ID (PASID) menambahkan identitas lain pada jalur transaksi. PASID dapat memilih konteks address space di bawah fungsi perangkat yang sama, sehingga IOMMU dapat membedakan traffic memori milik proses yang berbeda tanpa memerlukan fungsi PCIe terpisah untuk setiap proses.

Properti utamanya adalah multiplexing. PASID tidak menggantikan Requester ID dan tidak melakukan translasi alamat dengan sendirinya. PASID menyediakan konteks yang digunakan oleh mekanisme translasi dan proteksi.

Requester ID mengidentifikasi fungsi, PASID memperinci konteks

PCIe Requester ID mengidentifikasi fungsi yang memulai transaksi. Jika satu accelerator menangani pekerjaan untuk proses A dan proses B, kedua aliran tetap dapat membawa Requester ID yang sama karena keduanya berasal dari fungsi yang sama.

PASID menyediakan selector yang lebih rinci:

Requester ID 03:00.0
    |
    +-- PASID 41  -> address space A
    |
    +-- PASID 92  -> address space B

Nilai numeriknya merupakan identifier, bukan alamat. Software platform membentuk hubungan antara PASID dan konteks translasi yang harus diterapkan pada transaksi yang membawa nilai tersebut.

Pemisahan ini memungkinkan hardware queue atau work submission berbagi satu physical function sambil mempertahankan konteks memori yang berbeda. Arsitektur queue tetap spesifik terhadap perangkat; PASID hanya menyediakan konteks transaksi yang diperlukan platform.

Shared Virtual Addressing menghubungkan PASID dengan memori proses

Linux Shared Virtual Addressing (SVA) memungkinkan perangkat dan proses yang kompatibel menggunakan virtual address yang sama. Pada sistem x86 yang didukung, Linux mengalokasikan PASID untuk proses yang menggunakan SVA dan mengonfigurasi IOMMU agar transaksi dengan PASID tersebut diselesaikan melalui konteks address space proses.

Hal ini mengubah antarmuka antara software dan accelerator. Work descriptor dapat berisi virtual address aplikasi, bukan namespace alamat DMA terpisah milik perangkat, selama seluruh jalur SVA aktif.

PASID hanya salah satu bagian jalur tersebut. Platform juga memerlukan dukungan IOMMU yang sesuai, sedangkan perangkat dapat mengandalkan PCIe Address Translation Services (ATS) dan Page Request Interface (PRI) untuk cache translasi serta layanan terkait page fault.

work submission
    |
    | konteks proses
    v
transaksi perangkat dengan PASID
    |
    v
konteks translasi IOMMU
    |
    v
memori milik proses

Nilai PASID saja tidak membuat sembarang user pointer valid untuk DMA. Sistem operasi harus melakukan binding perangkat ke address space dan membentuk state translasi yang diperlukan.

PASID dan ATS menangani masalah yang berbeda

ATS memungkinkan perangkat meminta translasi dan menyimpan informasi alamat hasil translasi secara lokal. PASID mengidentifikasi konteks address space yang terkait dengan transaksi. Keduanya sering muncul bersama pada sistem SVA, tetapi perannya berbeda.

Perangkat dapat memerlukan PASID karena beberapa address space berbagi satu fungsi. Perangkat dapat memerlukan ATS karena permintaan translasi berulang jika tidak akan terus melewati jalur IOMMU. Ketika keduanya aktif, state translasi yang di-cache harus tetap terkait dengan konteks address space yang benar.

Hal ini juga membuat scope invalidasi menjadi penting. Jika mapping proses berubah, state translasi stale untuk konteks tersebut harus dihentikan sesuai protokol platform, IOMMU, dan PCIe. Invalidasi untuk satu address space tidak dapat dianggap sebagai izin untuk membuang atau menggunakan kembali state translasi lain tanpa mengikuti aturan yang berlaku.

Lifetime PASID mengikuti lifetime address space

Identifier yang memilih konteks translasi tidak dapat digunakan kembali secara sembarangan. Jika pekerjaan lama pada perangkat masih dapat membawa PASID X sementara software telah menetapkan X ke address space lain, traffic yang terlambat dapat ditafsirkan menggunakan konteks baru.

Karena itu, sistem operasi dan IOMMU mengelola alokasi, binding, invalidasi, serta pelepasan PASID sebagai sebuah lifecycle, bukan sekadar pemberian integer. Linux mendokumentasikan pengelolaan PASID tingkat proses pada jalur SVA x86, termasuk pelepasan pada operasi yang mengubah address space seperti fork() dan exec() dalam implementasi tersebut.

Detail lifecycle bersifat spesifik platform, tetapi invariant-nya lebih luas: reuse hanya boleh terjadi setelah transaksi lama dan state translasi turunannya tidak lagi dapat ditafsirkan sebagai bagian dari konteks sebelumnya.

Pola ini serupa dengan resource lain yang memakai tag. Tag hanya berguna selama setiap komponen sepakat mengenai objek yang dirujuk tag tersebut.

Shared work queue memperjelas pemisahan identitas

Shared hardware work queue dapat menerima command dari beberapa proses tanpa mendedikasikan hardware queue atau fungsi PCIe terpisah untuk setiap proses. Perangkat tetap memerlukan cara untuk menghubungkan traffic memori yang dihasilkan dengan proses yang mengirim pekerjaan.

Pada desain yang mendukungnya, PASID menyediakan hubungan tersebut. Dokumentasi SVA x86 Linux menjelaskan shared work queue dalam model ini dan menyatakan bahwa request DMA perangkat membawa PASID proses yang sama dengan konteks submission.

Susunan tersebut memisahkan dua resource yang mudah tercampur:

identitas hardware queue != identitas address space proses

Banyak proses dapat berbagi satu queue sambil mempertahankan PASID yang berbeda. Sebaliknya, kebijakan alokasi queue merupakan urusan device driver dan tidak ditentukan oleh semantik PASID.

PASID meningkatkan kepadatan konteks, bukan isolation dengan sendirinya

PASID dapat membuat satu fungsi mewakili banyak konteks address space, tetapi identifier tersebut bukan security boundary dengan sendirinya. Isolation berasal dari state translasi dan permission yang dipilih oleh identifier itu, ditambah perilaku perangkat, IOMMU, kernel, dan firmware yang benar.

Perangkat yang mengirim PASID keliru dapat mengarahkan transaksi ke konteks terkonfigurasi yang salah jika hardware di sekitarnya mengizinkannya. Karena itu, kebijakan platform tetap menentukan perangkat mana yang boleh memakai fitur berbasis PASID serta cara perangkat tersebut diisolasi atau di-assign.

Efek arsitekturalnya spesifik: PASID menambahkan konteks berskala proses di bawah identitas fungsi PCIe. Tag tambahan ini memungkinkan perangkat bersama berpartisipasi dalam translasi memori untuk beberapa address space tanpa memperbanyak physical function. Manfaat dan beban correctness berasal dari fakta yang sama: lebih banyak konteks translasi dapat hidup pada satu sumber transaksi, sehingga binding, invalidasi, dan lifetime-nya harus tetap tidak ambigu.