为什么PCI-e比SATA快这么多?

PCIe协议和SATA协议都是分层协议,分为物理层,数据链路层,传输层,命令层和应用层。

硬件工程师主要关注物理层、数据链路层和传输层。所有CMD/data由应用层和命令层打下来,每向下走一层,多一层封装和变换,最后通过差分总线传输出去。

PCIe协议:

应用层和命令层打下来的CMD/data以TLP的格式封装起来,送给数据链路层,链路层给其加上sequence前缀和CRC后缀,成为一个完整的数据报文结构,送到物理层,经过8b/10b或者128b/130b编码后发送出去。关键点在于数据链路层有一个发送buffer,这个buffer可以存储一定量的TLP。每个传输层打下来的TLP首先送到这个发送buffer中,然后再发送给物理层。接收端也有一个接收buffer,可以一连串的接收多个TLP。如此,发送端无需等待接收端的回应,就可以先打多个TLP出去,接收端可以一股脑收起来,一个一个处理,如果接收正确,回复一个ACK DLLP(DLLP是另一种数据结构,用来进行一些控制信息的沟通,不用来传递CMD/data,DLLP由数据链路层自动生成,发送给对方的数据链路层,传输层不知道DLLP的存在),发送端收到这个DLLP,可以择机清空发送buffer中对应的TLP。如果接收端接收到错误的TLP,则回复NACK DLLP,发送方看到之后择机将发送buffer中对应的TLP重新发一遍。这带来的好处有以下:

(1)       发送端多个TLP可以pipe起来。一个TLP无需等待前一个TLP传完并收到ACK DLLP回应,就可以先发出去。反正有buffer可以先存着,物理层有空就发。

(2)       两个设备可以同时给对方打TLP,即全双工通信。一个设备发送TLP的时候,另一个设备无需被动等待,它可以发自己的TLP。 总线两端的设备地位是对等的,谁都可以给对方打CMD或者传data。

<img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvcGljMi56aGltZy5jb20vZjRkOWJlZGI0Yjk1YmUzMGU1Zjc3NzhmMTc1NzkxYmRfYi5qcGc=.jpg" data-rawwidth="554" data-rawheight="190" class="origin_image zh-lightbox-thumb" width="554" data-original="http://pic2.zhimg.com/f4d9bedb4b95be30e5f7778f175791bd_r.jpg">

上图:PCIe的数据链路层结构

SATA协议:

以上说的两个好处,正好对应SATA总线的两个弱点:

(1)       SATA总线发送端不存在pipe。host一个FIS(类似PCIe协议中的TLP)打下去之后,只有device端回复收到,并且通过CRC校验之后(通过R_OK原语,类似PCIe的ACK DLLP),host才能打下一笔FIS。

(2)       SATA总线两端是不对等的,存在host和device的区别,只能主机给device打CMD,不能device给主机打CMD。而且不论是host还是device,一方发送FIS的时候,另一方只能处于接收状态,不能发FIS出去。这就是半双工通信。假如host正往device里面写data,device不可能在此时给host传data的。所以同一时刻,SATA的Rx和Tx只有一根线上是有效数据(payload)。

下图是SATA的一笔NCQ read CMD的总线传输。HOST通过Register FIS把CMD打下来,device收到之后,回复一个Register FIS。Device准备好data后,发送DMA setup FIS 告知host,然后发送data FIS,将数据送给host。传完数据,device发送一个set device bits FIS告知host。整个过程中,不论是host还是device,TP层只能一次发一个FIS,也不存在双方同时给对方发FIS的可能。

&amp;amp;lt;img src="//pic.ikafan.com/imgp/L3Byb3h5L2h0dHAvcGljMy56aGltZy5jb20vZmM3ZWIxZjVjOGZiOWM4NTFlYzE3YTMzNTE3NjQ2MmVfYi5qcGc=.jpg" data-rawwidth="554" data-rawheight="330" class="origin_image zh-lightbox-thumb" width="554" data-original="http://pic3.zhimg.com/fc7eb1f5c8fb9c851ec17a335176462e_r.jpg"&amp;amp;gt;<span id="mce_marker" data-mce-type="bookmark"></span>

时间: 2024-10-12 22:32:51

为什么PCI-e比SATA快这么多?的相关文章

每个程序员都应该了解的内存知识

每个程序员都应该了解的内存知识 英文原文:lwn.net,翻译:开源中国 [编辑的话: Ulrich Drepper最近问我们,是不是有兴趣发表一篇他写的内存方面的长文.我们不用看太多就已经知道,LWN的读者们会喜欢这篇文章的.内存的使用常常是软件性能的决定性因子,而如何避免内存瓶颈的好文章却不好找.这篇文章应该会有所帮助. 他的原文很长,超过100页.我们把它分成了7篇,每隔一到两周发表一篇.7篇发完后,Ulrich会把全文发出来. 对原文重新格式化是个很有挑战性的工作,但愿结果会不错吧.为了

硬盘接口技术大观园

来自存储老吴的博客--存储之道 目录 古老的磁盘接口... 1 IDE接口... 1 SCSI接口... 3 FC接口... 4 串行ATA接口... 5 SATA接口... 6 mSATA接口... 8 SATA Express. 10 串行SCSI接口... 10 SAS接口... 10 SAS内部连接线缆... 13 SAS外部互连线缆... 17 NVMe SSD接口... 21 SFF-8639. 21 M.2接口... 22 硬盘技术发展至今,历经了多次接口技术的发展和变革,存储老吴

[转帖]超能课堂:Intel平台芯片组变迁史

https://www.expreview.com/69419.html 现在我们在购买电脑时一个最重要的硬件就是主板了.作为承载CPU等主要硬件的平台,其最重要的功能就是连接外围设备,扩展计算机.但主板上也需要一个统一管理这些外围设备的芯片,而这就是芯片组(Chipset).芯片组通过总线与CPU连接,通过芯片组这个“中介”,外围设备就可以实现与CPU的沟通了. 图片来自Unsplash 而实际上芯片组的发展也基本是走过了PC发展的时间,从最早的4004开始,实际上就已经存在芯片组了,但那时更

扒一扒ZYNQ里面缩写 及 Xilinx ZYNQ-7000概述

文章转载自 http://www.eefocus.com/Kevin/blog/11-08/228643_42a39.html kevin是xilinx的大牛,必须膜拜啊. 还引自http://blog.sina.com.cn/s/blog_6cb263210101g8lv.html 摘要:本文介绍与XILINX的EPP平台成员, ZYNQ芯片相关的缩写术语和含义.  与简单翻译术语不同,本文对每个缩写在本行业其他公司的展开含义也略作介绍, 避免混淆. 对术语的技术功能也作简单介绍. 8月份学校

PC硬件知识必修系列——主板

一.版型 二.芯片组 三.扩展插槽1.PCI/PCIe2.SATA接口 四.I/O接口 五.CPU/内存相关1.CPU插槽2.内存插槽 六.供电用料 七.其它功能1.BIOS2.HIFI/WIFI3.板载芯片4.其它 图来自华硕B85 PLUS的正面裸体图,后面的讲解过程中将多次用到它 我们先将它分成 图下几部分,然后逐一讲解 一.版型什么是板型?简单说就是主板整体的形状标准,它与机箱的搭配有关系,并且在扩展.接口方面有差别. 目前市场最常见的PC主板板型主要是以下三种:ATX——我们常说的“大

cache和内存

CPU与内存 北桥:主桥,主要用来处理高速信号,负责与处理器的联系:CPU通过FSB前端总线来访问内存控制器. 南桥:IO桥,负责IO总线之间的通信,比如PCI总线.SATA.USB等,可以连接光驱.硬盘.键盘等设备交换数据. 架构一:内存控制器集成在北桥中,缺陷:瓶颈有二,北桥和内存,当处理器和外设争相访问内存时,增大了对北桥带宽的竞争: 架构二:将内存控制器单独隔离出来,以协调北桥与某个相应内存之间的交互,北桥可以与多个内存相连:--优点,增加了内存的访问带宽,但没有解决单一北桥芯片的瓶颈:

win10下安装Ubuntu出现win10无法进入的情况

昨天晚上在win10上安装Ubuntu Kylin16.04系统,结果发现重启的时候进不去windows系统了,而且报的错误是 /EndEntire file path: /ACPI(a0341d,0)/PCI(2,1f)/Sata(0,0,0)........./File(\EFI\Microsoft\Boot) /File(bootmgfw.efi)/EndEntire 错误:cannot load image 请按任意键继续-- 这是因为linux启动项不能启动windows的缘故,是可以

Xilinx RocketIO模块的介绍

摘要: 在高速电路系统设计中,差分串行通信方式正在取代并行总线方式,以满足系统对高带宽数据通信的需求.RocketIO是Virtex2 Pro以上系列FPGA中集成的专用高速串行数据收发模块,可用于实现吉比特的数据传输,适用于多种高速数据传输协议.依据实际工程应用需求,提出了基于RocketIO的高速串行数据传输系统解决方案,实现了每通道2.5 Gb/s的传输速度.最后介绍了RocketIO在Aurora和PCI Express协议实现中的应用,并总结了高速通信系统的共性特征. 引言 随着电子系

UEFI下windows启动过程

引导文件 在UEFI安装完操作系统后,Windows至少使用两个分区,一个叫做ESP分区(EFI SYSTEM PARTITION),用于存放启动文件,另一个则是BIOS下正常的系统分区,不同的是,BIOS下引导文件是winload.exe,UEFI下引导文件式winload.efi,两者都是pecoff格式的,但UEFI用的是各种固件接口,而BIOS使用的是中断.有时还会有一个MSR分区,不过这个分区并不重要,实验可以删除. 安装完成后,Windows还会将自己的启动管理器的信息写入固件的优先