讲点废话
按照我的习惯,在开始做一件事情之前,我倾向于介绍我做这个事情的思路和原因。因为往往误解就是从我们思考问题的方式开始的,我觉得交代清楚了我做事情的背景,那么你就可以顺着我的思路来思考,这个过程中也很容易产生你自己的理解和认知,而对于做技术而言,有自己的认知很关键。有自己的认知就有自己的判断,有自己的判断你就知道对与错,问题在哪儿,怎么解决,能不能更好的解决,你就会去进行更多的探索,形成良性思考循环。
布拉布拉一大堆,我要开始了!欢迎大家吐槽。
第一个背景,写这篇文章时我是一个6年芯片验证外加3年芯片全流程的芯片从业者,资历属实比较浅,我尽量能把问题的前世今生讲清楚。讲这个的原因是我可能更多会基于这个行业背景去思考和解释问题,但一个问题从不同侧视角理解起来还是有差异的。大家注意自己的视角也建议多跟不同领域的技术大拿多聊天,看看不同工作岗位是怎么理解的,这没有坏处。
第二个背景,网上其实已经能找到非常多的关于PCIE发展史的介绍。其实讲的都很好,但是忽略了技术的更新都是随着时代的变化而变化的,具体点讲就是说,在历史某个时间节点上,必须得作出技术上的更新才能满足需求了。的再具体点,PCIE有各种各样的产品形态,我们以最常见PC加速卡的形态来举例,PCIE加速卡插在PC主板插槽上,访问加速卡的指令是从主机CPU发出的,这里面涉及到的硬件技术环节包括CPU技术、PCB板卡技术、插槽技术、总线技术(PCIE)、设备技术(显卡就指的是图形和显示技术;硬盘就指的是非易失存储技术;如今的AI算力卡需求;等等)。这些技术是需要相辅相成的,规格太高没有性价比。这里还隐藏一个意思就是说独立的研究PCIE其实是不合理的,PCIe一定是一个系统问题,这里提前给大家注入这样一个思想。
第三个背景,我是按照PCIE协议的脉络来整理文章的,毕竟我还是认为PCIE协议是最好的学习PCIE的资料。我的大多数资料来源都是从PCIE5.0协议来的,这我得告诉各位。PCIE5.0协议比较好获取,我这里也有自己做的中文翻译,各位需要的话我可以提供。
第四个背景,PCIE的技术体系是比较庞大的,我还是想尽量提供有价值的信息出来,不过视角有限,建议还是要大量查阅相关文献,这样才能足够全面的理解这门技术。我是这么理解的:不要去相信一篇文章带你学会PCIe这种鬼话,技术是要沉下来慢慢打磨的。
言归正传,PCIE5.0在开篇之前就讲到PCIE技术的发展史。这里面描述了整个PCIE协议的发展历程与修订历程,信息量也比较大,如果全部放在这的话反而会造成理解上的负担,我贴了一部分内容在这,表示有这个事。每一代的技术修正都能在协议里找到细节,在开始PCIE协议内容分析之后我们再细聊。细聊之后大家再回头看PCIE发展史,再结合每代PCIE里引入的技术,就会豁然开朗。
PCI阶段
2002年是PCIe协议诞生元年,但不是产品诞生元年哈,在此之前的十年都是PCI的天下。在这个10年,PCI总线是比较成功的。PCI总线从最初的32bit/33MHz提高到最后的PCI-X的64bit/533MHz,能提供的最大带宽能力从132MB提到到4264MB,这意味着这10年里PCI的带宽能力提高了32倍之多。注意我们这里讲的都是理论带宽,不算协议开销。但随着处理器主频的不断提高以及设备侧对带宽需求的提高(我们最能体会到的就是显卡对带宽要求的提高),PCI的问题出现了,PCI主要存在以下问题:
-
带宽问题:带宽问题主要取决于性能和总线频率。2002年左右PCI的带宽能力已经不够了,而PCI总线只能采用提高总线位宽和频率的方法增加其传输带宽。但是这种方法从性能价格比的角度上看,并不是最优的。数据总线位宽的提高将直接影响芯片的生产成本,64位的PCI总线接口需要设计者使用更多的芯片引脚,从而导致64位的PCI总线接口芯片的价格远高于32位的PCI总线接口芯片。
-
总线拓扑问题:PCI总线基于共享并行总线架构,所有的PCI主机和所有的设备共享一组通用的地址、数据和控制总线(大家可以参考I2C的拓扑来类比)。共享并行总线架构最大的问题就是对设备的访问是按时间顺序的,对某一设备的请求必须在响应回来之后才能继续。这个问题造成了共享并行总线的冲突和竞争问题、延迟和性能问题。