PCIe Relaxed Ordering Memungkinkan Transaksi Melintas dalam Aturan Ordering
PCI Express membawa request dan completion melalui switch, bridge, dan logika endpoint yang dapat memiliki beberapa transaksi in-flight sekaligus. Strict ordering di antara setiap packet akan membuat banyak transfer independen menunggu di belakang traffic yang tidak memiliki dependency dengannya. Relaxed Ordering menyediakan sinyal protokol yang mengizinkan reordering lebih luas ketika requester dapat menoleransinya.
Fitur ini tidak menghapus seluruh constraint ordering. Sebuah transaksi ditandai agar memenuhi syarat untuk bergerak lebih bebas relatif terhadap traffic lain, sementara aturan ordering PCIe tetap menentukan kombinasi mana yang dapat saling melintas. Software dan logika device hanya boleh memakai atribut tersebut ketika reordering tidak dapat mengekspos stale state atau merusak dependency producer-consumer.
Atribut berjalan bersama transaksi
Sebuah Transaction Layer Packet dapat membawa atribut Relaxed Ordering. Requester menetapkannya pada transaksi yang posisinya relatif terhadap transaksi tertentu tidak memerlukan jaminan ordering default.
Komponen di sepanjang jalur kemudian dapat memakai kebebasan tambahan itu ketika menjadwalkan traffic. Switch atau bridge dapat menghindari penahanan packet yang memenuhi syarat hanya karena packet lain berada di depannya dalam relasi ordering yang diizinkan untuk dilintasi oleh atribut relaxed.
Kebebasan ini bersifat opsional dalam praktik. Menetapkan atribut mengizinkan reordering; hal itu tidak memaksa setiap komponen melakukan reordering packet. Sebuah jalur masih dapat mengirim traffic dalam urutan yang sama karena state queue, pilihan implementasi, atau timing.
Stall head-of-line dapat berkurang
Pertimbangkan device yang mengirim stream posted write berukuran besar bersama traffic independen. Jika semua transaksi harus mempertahankan ordering yang lebih kuat daripada kebutuhan workload, congestion pada satu stream dapat menunda stream lain di belakangnya.
Relaxed Ordering dapat mengurangi coupling tersebut. Traffic yang memenuhi syarat dapat maju ketika fabric memiliki resource untuknya, alih-alih menunggu transaksi yang tidak terkait hanya demi mempertahankan urutan yang tidak diperlukan.
Efeknya paling berguna ketika banyak operasi outstanding secara bersamaan. Dengan hanya satu transaksi in-flight, hanya sedikit kebebasan ordering yang dapat dimanfaatkan. Device ber-throughput tinggi seperti network controller dan storage controller dapat memiliki lebih banyak peluang karena queue-nya lazim berisi banyak operasi independen.
Data write dan notification write memerlukan ordering yang disengaja
Pola device yang umum menulis data ke host memory lalu menulis flag, queue entry, atau notifikasi lain yang memberi tahu software bahwa data sudah siap. Notifikasi tidak boleh terlihat sebelum data terkait ketika software memperlakukannya sebagai publication event.
Menandai transaksi tanpa menghormati dependency tersebut dapat menciptakan race: processor melihat indikator ready, membaca destination buffer, lalu menemukan data yang belum mencapai visibility point yang diperlukan.
Desain yang aman mempertahankan publication ordering yang diwajibkan. Relaxation sesuai untuk traffic yang benar-benar independen, bukan transaksi yang urutannya membawa makna antara producer dan consumer.
Relaxed Ordering berbeda dari pengacakan packet arbitrer
PCIe memiliki aturan ordering yang terdefinisi untuk berbagai transaction class dan attribute. Relaxed Ordering memodifikasi sebagian aturan tersebut; atribut ini bukan instruksi umum yang membolehkan setiap packet melintasi semua packet lain.
Perbedaan ini relevan saat mendiagnosis fault I/O yang intermiten. Kegagalan yang hanya muncul ketika ordering relaxation aktif dapat menunjukkan bahwa driver, device, atau platform bergantung pada urutan yang tidak dijanjikan protokol setelah atribut tersebut digunakan.
Menonaktifkan fitur dapat menyembunyikan dependency seperti itu dengan mengembalikan perilaku yang lebih kuat, tetapi juga dapat mengurangi concurrency. Perbaikan yang tahan lama adalah mengidentifikasi operasi mana yang memerlukan ordering lalu menerapkan synchronization atau transaction attribute yang tepat pada operasi tersebut.
Completion traffic memiliki dependency terpisah
Non-posted request menghasilkan completion, sehingga flow control request dan completion dapat berinteraksi dengan ordering dan congestion secara berbeda dari posted write. Relaxed Ordering tidak menghapus relasi antara request dan completion-nya, serta tidak membuat completion matching menjadi opsional.
Device tetap mengasosiasikan completion data dengan outstanding request yang benar. Fabric dapat memanfaatkan kebebasan ordering yang diizinkan di antara traffic independen sementara logika endpoint mempertahankan relasi semantik setiap operasi.
Pemisahan ini memungkinkan PCIe mendukung deep queue tanpa mengharuskan link berperilaku seperti satu serial command stream.
Setting platform dapat mengubah performa yang diamati
Firmware, kebijakan operating system, konfigurasi device, dan perilaku driver dapat memengaruhi apakah Relaxed Ordering diaktifkan untuk traffic tertentu. Dukungan hardware saja karena itu tidak menjamin perubahan performa yang terukur.
Workload juga berbeda. Endpoint dengan beban ringan mungkin tidak menunjukkan manfaat karena queue jarang saling memblokir. Jalur jenuh dengan banyak transfer independen dapat memperoleh lebih banyak manfaat dari kebebasan scheduling, khususnya ketika strict sequencing sebaliknya menciptakan penantian yang dapat dihindari.
Pengujian performa perlu menyertakan pemeriksaan correctness selain throughput dan latency. Transfer rate yang lebih tinggi tidak berguna jika hidden ordering dependency menghasilkan stale read sesekali atau queue state yang rusak.
Batas praktisnya adalah dependency, bukan hanya tipe packet
Keputusan utamanya adalah apakah dua operasi memiliki relasi visibility yang diwajibkan. Transfer independen merupakan kandidat untuk perlakuan relaxed. Data publication, ownership transfer, doorbell protocol, dan transisi queue state sering memiliki dependency yang membutuhkan penanganan lebih kuat.
Device designer mengekspresikan relasi tersebut melalui protocol attribute dan logika device. Driver author harus mengikuti ordering model yang didokumentasikan device serta memakai fasilitas synchronization platform ketika diperlukan.
Relaxed Ordering merupakan mekanisme concurrency yang terarah. Mekanisme ini memberi fabric PCIe ruang untuk menjadwalkan pekerjaan independen dengan lebih bebas sambil mempertahankan sequencing yang diwajibkan sebagai bagian eksplisit dari protokol device.