1. PCIe原子操作介紹
??原子操作(Atomic Operation, AtomicOp)是指不可被中斷的一個或一系列操作,即該操作執行完畢前不會被任何其他事務或事件打斷,PCIe進行原子操作時,發送單筆transaction即可完成 ① 讀取目的地址原始值、② 修改原始值、③ 回傳原始值這三步操作,且該三步不可被打斷,原子操作有以下三種:
??1. FetchAdd,該請求包含一個運算元,即需要累加的值A,該請求對應四步操作:讀取目的地址原始值O -> 兩數補碼相加求和(O補+A補,忽略僅為與溢位) -> 把求得的和sum寫入目的地址 -> 回傳目的地址原始值O,
??2. Swap,該請求包含一個運算元,即需要交換的值S,該請求對應三步操作:讀取目的地址原始值O -> 把值S寫入目的地址 -> 回傳目的地址原始值O,
??3. CAS(Compare and Swap),該請求包含兩個運算元,即需要比較的值C及需要交換的值S,該請求對應四步操作:讀取目的地址原始值O -> C與O進行比較 -> 若O=C即把S寫入目的地址 -> 回傳目的地址原始值O,
??Atomic操作運算元位寬有32/64/128 bit三種,FetchAdd、Swap、CAS均支持32bits及64bits,目前(PCIe 5.0)僅CAS支持128bits運算元,Otomic操作的回傳值位寬與運算元位寬相同,
??PCIe中原子操作能力是可選的,軟體可以通過讀取完成者PCIe設備能力2暫存器來獲知完成者是否具備原子操作能力及原子操作路由能力,在發送原子操作請求之前也必須軟體使能發送者PCIe設備控制2暫存器中的相關控制位,按照原子操作的請求者及完成者分類,PCIe原子操作可分為三類,分別為RC-to-EP, EP-to-RC, EP-to-EP,原子操作的發送者、完成者及原子操作包途徑的所有交換節點均需具備原子操作的能力才能完成原子操作,為了防止原子操作請求包被推送到不相關的路由節點,可以軟體配置設備控制2暫存器的原子出口阻塞位元位,這樣不相關路由節點在接收到原子操作請求后會把其當作畸形包處理,需要注意的是,PCIe到PCI/PCI-X橋之間是不支持原子操作的,此時可以采用目標鎖定的方式發送locked transaction實作跟原子操作相同的功能,
??說到底,PCIe原子操作是一種存盤器操作,所有存盤器空間管理標準亦適用于PCIe原子操作,

PCIe Device Capabilities 2 Register

PCIe Device Control 2 Register
2. PCIe原子操作優點及應用場景
??跟PCIe目標鎖定請求相比,PCIe原子操作時延更低、可擴展性更強、對其他PCIe報文影響更小,尤其在對高級同步演算法的良好支持方面,PCIe原子操作為高性能SMP應用到PCIe互聯多處理器(緊耦合加速器、協處理器或通用圖形處理器GPGPU等)系統的快速移植提供了可能,
3. PCIe原子操作報文協議相關總結
- PCIe原子操作是非轉發記憶體讀取事務(NP Mrd),支持32bit及64bit地址格式;
- 原子操作的三種型別(FetchAdd, Swap, CAS)分別采用獨立的型別碼;
- 完成者根據原子操作請求包中的length域及型別碼來獲知其需要回傳的運算元位寬;
- 若請求者支持自動地址轉換(ATS),其發出的原子操作中的地址可以是轉換后的地址;
- 原子操作完成者收到原子操作請求包后,若其在訪問目的地址或執行原子操作時出現不可糾正的錯誤,完成者需反饋CA;
- 若原子操作完成者收到了其不支持的操作請求或運算元長度,按照UR進行處理;
4. 隨時更新,,,
參考
- PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)
| 版本 | 描述 | 時間 |
|---|---|---|
| v0.1 | 初稿,PCIe原子操作基本介紹 | 2021.09.02 ??🔥😄 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/297341.html
標籤:其他
