【業務領域】PCIE協議理解

PCIE協議理解

提示:這里可以添加系列文章的所有文章的目錄,目錄需要自己手動添加

PCIE學習理解。


文章目錄

  • PCIE協議理解
    • @[TOC](文章目錄)
  • 前言
  • 零、PCIE掌握點?
  • 一、PCIE是什么?
  • 二、PCIE協議總結
    • 物理層
      • 切速
    • 鏈路層
    • 事務層
      • 6.2 TLP的路由
    • 電源管理
    • 虛擬化
  • 三、疑難雜癥
    • PCIE4到PCIE5變化點
    • PCIE5到PCIE6變化點
    • Pcie bar 空間寄存器
    • ATS機制
  • 參考資料
  • 總結

前言

本文內容:PCIE協議理解和總結。

PCIE理解和總結。


提示:以下是本篇文章正文內容

零、PCIE掌握點?

PCIE是什么?
PCIE的優缺點是什么?
PCIE協議與其他協議的不同點是什么?
PCIE有什么應用場景?
PCIE控制器上游對接什么模塊,下游對接什么模塊?
PCIE驅動是什么?
PCIE芯片如何測試?

一、PCIE是什么?

PCIE是一種外圍組件接口協議。

二、PCIE協議總結

物理層

切速

PCIE6下支持怎樣的切速?
在這里插入圖片描述

鏈路層

事務層

6.2 TLP的路由

基于地址的路由:
存儲器讀寫和I/O讀寫使用此方式。

基于ID的路由:
主要用于配置讀寫請求TLP、Cpl、CplD報文和Vender_Defined消息報文。

隱式路由:
消息請求使用隱式路由方式。

電源管理

虛擬化

SR-IOV

SR-IOV介紹
SR-IOV 技術是一種基于硬件的虛擬化解決方案,可提高性能和可伸縮性。

SR-IOV 標準允許在虛擬機之間高效共享 PCIe(Peripheral Component Interconnect Express,快速外設組件互連)設備,并且它是在硬件中實現的,可以獲得能夠與本機性能媲美的 I/O 性能。SR-IOV 規范定義了新的標準,根據該標準,創建的新設備可允許將虛擬機直接連接到 I/O 設備。SR-IOV 規范由 PCI-SIG 在 http://www.pcisig.com 上進行定義和維護。單個 I/O 資源可由許多虛擬機共享。共享的設備將提供專用的資源,并且還使用共享的通用資源。這樣,每個虛擬機都可訪問唯一的資源。因此,啟用了 SR-IOV 并且具有適當的硬件和 OS 支持的 PCIe 設備(例如以太網端口)可以顯示為多個單獨的物理設備,每個都具有自己的 PCIe 配置空間。

在這里插入圖片描述
PF 包含 SR-IOV 功能結構,用于管理 SR-IOV 功能。PF 是全功能的 PCIe 功能,可以像其他任何 PCIe 設備一樣進行發現、管理和處理。PF 擁有完全配置資源,可以用于配置或控制 PCIe 設備。虛擬功能 (Virtual Function, VF)是與物理功能關聯的一種功能。VF 是一種輕量級 PCIe 功能,可以與物理功能以及與同一物理功能關聯的其他 VF 共享一個或多個物理資源。==VF 僅允許擁有用于其自身行為的配置資源。==一個 具備SR-IOV能力的設備可以被配置成被枚舉出多個Virtual Functions(數量可控制),而且每個Function 都有自己的完整有BAR的配置空間。VMM可以把一個或者多個VF 分配給VM。

三、疑難雜癥

PCIE4到PCIE5變化點

除了 PCI Express Gen 5 版本附帶的更嚴格的抖動要求、信道損耗預算約束以及通道電壓和時間裕度要求外,速度提高還需要額外的物理層更改,同時還包括其他改進,以保持與以前的 PCIe 版本所需的向后兼容性。

有序集更改是 PCI Express 5.0 規范版本附帶的一項重要修改。EIEOS 有序集用于幫助退出電氣空閑狀態。在 PCIe Gen 5 慣例中,用于每個 PCIe 4.0 有序對的熟悉的 16 個 0 和 1 的模式變成了對每個通道重復的 32 個 0 和 1。背靠背(重復)EIEOS 信號是 PCIe 5.0 協議的額外更改。數據流起始有序集 (SDS) 也已更新,因此接收方可以清楚地區分 PCI Express Gen 5 數據流起始點。

訓練序列 (TS1/TS2) 受益于旨在促進 PCIe Gen 5 速度倍增的創新新選項。訓練序列是鏈路建立和均衡 (EQ) 的必要先導,但隨著有序集通過每個速度支持增量(從 2.5 GT/秒開始并逐步移動到 32.0 GT/秒 PCIe Gen 5 速度),訓練序列也可能導致延遲。為了解決這個難題,提供了EQ 旁路選項,以基本上“跳過”中間速度均衡級別,或者通過使用“無 EQ”選項立即轉換到 L0 活動數據傳輸狀態來完全省略均衡。

PCIe Gen 5 的改進型 TS1 和 TS2 也增加了新的字段,用于替代協議標識和增強的預編碼支持。一旦系統和設備之間的協商成功,鏈路就可以立即以支持的最高速度進入 L0 狀態,并開始使用協商的備用協議傳輸數據。如果替代協議協商失敗,系統可以快速恢復到主干 PCIe 5.0 協議。

PCIE5到PCIE6變化點

開發者需要考慮的PCIe 6.0的三個主要變化如下:

● 數據速率從32GT/s翻倍至64GT/s

● 從NRZ編碼轉換到PAM-4編碼,以及由此帶來的糾錯影響

● 從傳輸的可變大小TLP到固定大小FLIT

● 除了速度,PCIe 6.0還引入了L0p鏈路狀態,關于它的內容,我們將在介紹鏈路ASPM(L0,L1,L0s和L0p)中介紹。

Pcie bar 空間寄存器

如下圖標紅的兩部分是bar寄存器。
在這里插入圖片描述
為什么需要bar寄存器:

一方面這還是和CPU、操作系統的機制有關,它們不允許PCI設備自己在內存中劃拉片地方供自己使用,而是必須由系統統一分配

另一方面PCI設備需要一定內存空間來存儲自身需要的些數據,例如功能相關的配置數據,而且不同設備不同功能的情況下需要的空間大小還不一致,所以就有了bar寄存器了,用于對不同設備進行量身定制內存空間。

PCI設備有6個bar寄存器,可以啟用全部或其中幾個,一旦啟用,這個bar寄存器就與內存建立了關系,主機就可以根據BARs中所寫入的地址范圍進行訪問。任何時候,當設備發現一個請求事務的地址是映射到自己的一個BAR時,它就會接收這個請求事務,因為它自己就是這個請求的目標設備。

02bar寄存器如何使用:

根據上圖可知,type0和type1擁有的bar數量是不一樣的,為什么不一樣放在后面說,bar在使用上可分為三種,分別是

1、32bit內存地址空間請求

2、64bit內存地址空間請求

3、IO地址空間請求

但在配置機制上是一致的,均是分為三個步驟,

Step 1
主機發起配置請求向目標PCIE設備的目標bar寄存器,對這個bar寄存器進行寫 1操作。
Step 2
主機發起讀配置請求讀取目標PCIE設備的目標bar寄存器的值,由于有些bit 位主機是無法改寫的,在上電就強制為固定值了,所以主機回讀的值部分不是1。
Step 3
主機根據讀取的值判斷bar請求內存空間的大小并為其分配,并將起始地址寫入目標bar寄存器,這就完成了兩個功能,一是確定基地址,二是確定了尋址范圍。具體是如何實現的呢?接下來以32bit內存地址空間請求為例詳細看下bar寄存器的結構
在這里插入圖片描述
這里提到了預取和非預取,對于PCI來說,預取功能能提升性能,但在PCIE上不是很明顯,只不過將此繼承了過來,所以可以先忽略,等后面用到了再說了。

03拿32bit的bar空間申請舉例:
bar寄存器的存在的目的是告訴使用者我需要多大的空間,在訴說之前自身肯定得先知道并做一定設置,這種設置呢就是將某些位寫0,且不可更改。

如下圖是32bit非預取內存請求的申請過程描述,申請4KB大小的空間。
在這里插入圖片描述
如上圖(1)所描述的“Uninitialized bar”,bit0bit3是固定內容,bit11bit4的預設0就是表示申請內存大小的,12bit寫0表示申請內存空間為4KB,因為2^12=4096嘛,如果bit13也是0,那就表示想要申請8KB的內存空間。

那么為啥要這樣搞呢?主機又是怎么知道的呢?首先說主機是怎么知道的,主機會對bar寄存器各個bit位都寫1(0XFFFFFFFF)然后再回讀。對于我們這個例子回讀內容就是0XFFFFF000,通過bit3~0知道了申請內存空間的屬性,又因為bit12是1,所以知道了申請內存大小位4KB。

隨后主機再把內存基地址寫入bar寄存器,例如下圖的0xF9000000,如此主機就知道了這個設備的對應功能的bar0申請4KB內存。

最后說,為什么要這樣做,在我看來,這樣做即實現了我們的目的,也節省了需要的配置字。我們需要告知主機需要多大的空間和屬性,可以單獨占一個字段,讓主機讀就行了。但再發TLP包時,主機尋址也需要知道目的地址,這樣還需要一個字段。現在將兩字段合一的,而且目的還實現了。

04另外兩種bar寄存器的使用
如下圖是對64bit的設置,申請一個64MB內存大小的過程,與32bit相比就是基地址更大些。
在這里插入圖片描述

入下圖是申請一個256Byte大小的過程,也就是bit8~2是固定為0,其中bit0為1表示是IO請求。

在這里插入圖片描述

參考資料:bar空間介紹

ATS機制

ATS全稱是Address Translation Service,顧名思義,就是一個地址翻譯服務機制。PCIe下的ATS是以CPU為中心,PCIe總線上的各個設備可以通過ATS機制向主機申請未翻譯地址對應的物理地址映射以及響應的屬性、權限等信息。

在這里插入圖片描述

一般地,在PCIe體系下,發起地址翻譯請求的設備叫請求者,也叫client,而處理地址翻譯請求的(即CPU)叫完成者,也叫home。因此,對于地址翻譯請求的流程如下:
1、client有數據訪問需求(或者是prefetching引入的需求);
2、client發出翻譯請求給home側,攜帶需要訪問的虛擬地址空間塊和響應屬性、提示信息;
3、home側進行翻譯,之后返回翻譯結果給client;
4、client在本地cache翻譯結果;
5、client引擎發出數據訪問,查本地cache,直接發出查完后的結果訪問home側;
6、home側直接bypass TA,訪問home本地內存。
在這里插入圖片描述
ATS機制想要解決的問題(優勢):
1、能夠分擔主機(CPU)側的查表壓力,特別是大帶寬、大拓撲下的IO數據流,CPU側的IOMMU/SMMU/VT-d的查表將會成為性能瓶頸,而ATS機制正好可以提供將這些查表壓力卸載到不同的設備中,對整個系統實現“who consume it, who pay for it”。
2、對于IO設備往CPU的數據流,其IOMMU/SMMU/VT-d的查表性能在整個IO性能中顯得極為關鍵,查表性能的好壞至今影響IO性能的好壞。而根據現今大量學術界和工業界的研究表明,決定查表性能的好壞的一個最為關鍵的點是TLB的預測。而像傳統PCIe IO數據流,在CPU側集中式做IOMMU/SMMU/VT-d的查表,對于其TLB的預測(prefetch)是很困難,極為不友好的。因為,很多不同workload的IO流匯聚到一點,對于TLB的預測的沖擊很大,流之間的干擾很大,很難做出準確的預測,從而TLB的命中率始終做不到太高,從而影響IO性能。而ATS的機制恰好提供了一個TLB的預測卸載到源頭去的機制,讓用戶(設備)自己根據自己自身的業務流來設計自己的預測策略,而且用戶彼此之間的預測模型不會受到彼此的影響,從而大大提高了用戶自己的預測的準確性。抽象來看,這時候的設備更像是CPU核,直接根據自身跑的workload來預測本地的TLB,從而提升預測性能,進而提升整系統的預測性能。

ATS機制就是一個分布式的地址翻譯系統,對于異構架構的地址問題也起到了很好的支持效果。例如,NVIDIA和IBM最近搞的NVLINK互聯CPU和GPU,其就是用了ATS來實現SVM,這個后續我想詳細介紹一下。

當然,ATS也會帶來如下兩個比較嚴重的問題:

1、安全問題。也就是有了ATS后,設備會直接發出PA來訪問CPU的內存空間,而CPU這邊將不再查頁表,從而也不再有地址訪問權限的檢查。因此,對于malicious設備,或者是被入侵的設備,又或者是設備自身設計的bug,其會發出PA訪問那些其沒有權限訪問或者是不屬于其的物理地址空間,從而帶來系統的isolation的破壞,系統安全的威脅等安全問題。現有機制下,目前還沒有解決辦法。但,本人有專利可以解決,而且本人也有更好的機制可以解決,目前保密,暫時不能公布。本人的專利的話,后面有時間可以寫一下。

2、無效化問題。也就是,在CPU側被cache的頁表發生變化(例如權限發生了變化,對應的PA需要回收SWAP等)的時候,此時CPU需要發出無效化指令給對應cache過的設備(ATC)來通知這件事,這會影響CPU回收頁表/物理空間的性能。這就意味著CPU側要實時跟蹤頁表被誰cache走了,維護這些信息也帶來了成本的開銷增長。

3、對設備的設計要求比較高,可以看到,ATS在某些時刻勢必增加了延時。而為了減少甚至消除影響,就需要設備設計出具有良好的ATC機制,包括ATC的預測、地址翻譯請求的長度、發送翻譯請求的時機等,這里的設計空間都比較大,對設備的要求都比較高。

前面的問題1和2是系統需要解決的功能問題,后者3是一個趨勢。我想象中的設備將會越來越智能,設備和CPU之間將會是點對點的平等計算地位,在異構體系下,它們是平等的計算關系。它們之間SVM、具有cache coherence等,從而第3看起來不是問題,而是趨勢。

ATS機制

參考資料

PCIE6.0差異點基礎介紹:
《PCIe 6.0概述》

NRZ編碼和PAM4編碼介紹:

《學會“NRZ”、“PAM4”,僅僅需要三分鐘!》


總結

提示:這里pcie bar總結:

以上就是今天要講的內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79236.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79236.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79236.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Jupyter notebook快捷鍵

文章目錄 Jupyter notebook鍵盤模式快捷鍵(常用的已加粗) Jupyter notebook鍵盤模式 命令模式:鍵盤輸入運行程序命令;這時單元格框線為藍色 編輯模式:允許你往單元格中鍵入代碼或文本;這時單元格框線是綠色…

Unity圖片導入設置

🏆 個人愚見,沒事寫寫筆記 🏆《博客內容》:Unity3D開發內容 🏆🎉歡迎 👍點贊?評論?收藏 🔎Unity支持的圖片格式 ??BMP:是Windows操作系統的標準圖像文件格式,特點是…

Spark-小練試刀

任務1:HDFS上有三份文件,分別為student.txt(學生信息表)result_bigdata.txt(大數據基礎成績表), result_math.txt(數學成績表)。 加載student.txt為名稱為student的RDD…

內存安全的攻防戰:工具鏈與語言特性的協同突圍

一、內存安全:C 開發者永恒的達摩克利斯之劍 在操作系統內核、游戲引擎、金融交易系統等對穩定性要求苛刻的領域,內存安全問題始終是 C 開發者的核心挑戰。緩沖區溢出、懸空指針、雙重釋放等經典漏洞,每年在全球范圍內造成數千億美元的損失。…

OceanBase數據庫-學習筆記1-概論

多租戶概念 集群和分布式 隨著互聯網、物聯網和大數據技術的發展,數據量呈指數級增長,單機數據庫難以存儲和處理如此龐大的數據。現代應用通常需要支持大量用戶同時訪問,單機數據庫在高并發場景下容易成為性能瓶頸。單點故障是單機數據庫的…

計算機網絡——鍵入網址到網頁顯示,期間發生了什么?

瀏覽器做的第一步工作是解析 URL,分清協議是http還是https,主機名,路徑名,然后生成http消息,之后委托操作系統將消息發送給 Web 服務器。在發送之前,還需要先去查詢dns,首先是查詢緩存瀏覽器緩存…

Qwen3本地化部署,準備工作:SGLang

文章目錄 SGLang安裝deepseek運行Qwen3-30B-A3B官網:https://github.com/sgl-project/sglang SGLang SGLang 是一個面向大語言模型和視覺語言模型的高效服務框架。它通過協同設計后端運行時和前端編程語言,使模型交互更快速且具備更高可控性。核心特性包括: 1. 快速后端運…

全面接入!Qwen3現已上線千帆

百度智能云千帆正式上線通義千問團隊開源的最新一代Qwen3系列模型,包括旗艦級MoE模型Qwen3-235B-A22B、輕量級MoE模型Qwen3-30B-A3B。千帆大模型平臺開源模型進一步擴充,以多維開放的模型服務、全棧模型開發、應用開發工具鏈、多模態數據治理及安全的能力…

藍橋杯Python(B)省賽回憶

Q:為什么我要寫這篇博客? A:在藍橋杯軟件類競賽(Python B組)的備賽過程中我在網上搜索關于藍橋杯的資料,感謝你們提供的參賽經歷,對我的備賽起到了整體調整的幫助,讓我知道如何以更…

數據轉儲(go)

? 隨著時間推移,數據庫中的數據量不斷累積,可能導致查詢性能下降、存儲壓力增加等問題。數據轉儲作為一種有效的數據管理策略,能夠將歷史數據從生產數據庫中轉移到其他存儲介質,從而減輕數據庫負擔,提高系統性能&…

Git Stash 詳解

Git Stash 詳解 在使用 Git 進行版本控制時,經常會遇到需要臨時保存當前工作狀態的情況。git stash 命令就是為此設計的,它允許你將未提交的更改暫存起來,在處理其他任務或分支后,再恢復這些更改。 目錄 基本概念常用命令示例和…

Windows下Dify安裝及使用

Dify安裝及使用 Dify 是開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力,輕松構建和運營生成式 AI 原生應用。比 LangChain 更易用。 前置條件 windows下安裝了docker環境-Windows11安裝Docker-CSDN博客 下載 Git下載…

Clang-Tidy協助C++編譯期檢查

文章目錄 在Visual Studio中啟用clang-tidyClang-tidy 常用的檢查項readability-inconsistent-declaration-parameter-namemisc-static-assert 例子 C/C語言是一門編譯型語言,比起python,javascript 這些,有很多BUG可以在編譯期被排除掉,當然…

智能工廠規劃學習——深入解讀數字化工廠規劃與建設方案

項目總體思路聚焦于通過智能制造和數字化工廠建設,來優化企業戰略并提升信息化水平。首先,企業需學習先進國家已經驗證的先進經驗,并緊跟其正在變革的方向,以確保自身發展的前瞻性和競爭力。 在企業戰略層面,企業正從以產品為中心的業務模式,逐步轉變為以服務中心…

Go RPC 服務方法簽名的要求

在 Go 中,RPC 方法的簽名有嚴格的要求,主要是為了保證方法的調用能夠通過網絡正確地傳輸和解析。具體要求如下: 1. 方法必須是導出的 RPC 服務的方法必須是導出的(即首字母大寫)。這是因為 Go 的反射機制要求服務方法…

上位機 日志根據類型顯示成不同顏色

前言 在上位機軟件開發中日志是一個很重要的信息。一方面顯示系統的運行情況,另一方面主要用于排查軟件BUG和設備問題的重要參考。為了方面識別日志類型最好的方式是使用不同的顏色進行區分。這樣就一目了然了。 效果 實現代碼 1.根據 ListBox 控件 進行擴展了一個自定義控件…

CMake解析參數用法示例

cmake_parse_arguments 是 CMake 中用于解析函數或宏參數的工具,特別適合處理帶有選項(OPTIONS)、單值參數(SINGLE_ARGS)和多值參數(MULTI_ARGS)的復雜參數列表。以下是用法說明和一個示例&…

自定義JackSon配置

避免前端&#xff08;JavaScript&#xff09;處理大數&#xff08;如 Long、BigInteger&#xff09;時發生精度丟失問題&#xff0c;所以引入了自定義 Jackson 配置。 先看代碼&#xff1a; /** 根據id修改員工信息*/PutMappingpublic R<String> update(HttpServletRequ…

Qt入門——什么是Qt?

Qt背景介紹 什么是Qt? Qt 是?個 跨平臺的 C 圖形用戶界面應用程序框架 。它為應用程序開發者提供了建立藝術級圖形界面所需的所有功能。它是 完全面向對象 的&#xff0c;很容易擴展。Qt 為開發者提供了 ?種基于組件的開發模式 &#xff0c;開發者可以通過簡單的拖拽和組合…

Linux CentOS 安裝Python 3.8.0

在 CentOS 上升級 Python 3.6.8 到 3.8.0&#xff0c;可以按照以下步驟操作&#xff1a; 1. 安裝依賴 sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel wget 如果遇到報錯“File "/bin…