PCIe 链路基础:链路层结构、速度与带宽、电源管理状态
搞PCIe调试,链路层是避不开的坎。我以前总觉得只要电气信号能通就行,直到一次线上事故——服务器硬盘读写掉速,查了三天,最后发现是链路层训练没完成,协商到Gen1去了。你想想看,操作系统、驱动、固件都没报错,就链路层默默退化了。所以,这章我们好好捋一捋链路层的结构、速度和电源管理。
2.1 链路层结构:数据在管线上怎么跑
| 层次 | 核心职责 | 我关注的要点 |
|---|---|---|
| 事务层 (TL) | 产生与解析TLP,处理事务序 | TLP头格式、完成超时重传 |
| 数据链路层 (DLL) | DLLP交换、ACK/NAK、流控、CRC校验 | LCRC错误计数,常跟ASPM部分掉电相关 |
| 物理层 (PHY) | 8b/10b或128b/130b编码、串化/解串、电气特性 | Gen3+的均衡训练,链路退化第一现场 |
说白了,一次PCIe传输的旅程是这样的:软件发起读写请求,事务层包个TLP头,交给数据链路层;DLL加序列号和LCRC,封装成DLLP,再往下给物理层;物理层加上帧头、帧尾,编码后从差分对发出去。接收端反向解包。我在虚拟机里写流量测试程序时,经常用