☰
PCI与SCSI:从并行总线到PCIe与NVMe的演进之路
2026/10/20 3:10:03 网站建设 项目流程

如果摊开二十年前的计算机内部布局图,你会看到两个几乎无处不在却又总被搞混的名词:PCI与SCSI。PCI通常是主板上那排白色的短插槽,插着显卡、声卡、网卡;SCSI多半是机箱里那条粗宽的扁平电缆,串着一排高性能硬盘。一个是通用扩展总线标准,一个是存储子系统接口标准。很多人把两者弄混,是因为SCSI适配卡本身也长着PCI接口,最终要插进PCI槽里。这篇内容,我想以这些年来实际接触老设备的角度,聊聊这两个标准当年各自解决什么问题、为什么会有它们、它们之间如何协作,以及如今PCIe和现代存储协议里还留着它们的多少老底。

1. 先分清:PCI是“扩展总线”,SCSI是“存储子系统接口”

两套标准诞生的出发点完全不同。PCI解决的是“CPU怎么和其他部件快速通信”的问题,SCSI解决的是“主机怎么高效管理一大堆存储设备”的问题。属性不同、层级不同,混在一起谈必然糊涂。

1.1 PCI的诞生背景与设计哲学

PCI全称是Peripheral Component Interconnect,外设组件互连标准。上世纪八十年代末到九十年代初,个人电脑里的扩展总线相当混乱。最初的ISA总线只有8/16位,速度慢,跑不满高速外设;后来出现过EISA、VL-Bus等竞争方案,都各有毛病。某x86处理器厂商牵头推广PCI,本质上是想把“处理器本地总线”的思路做进扩展槽里。

PCI最核心的三个设计取向非常鲜明。

第一,并行总线的共享带宽模型。PCI最初支持32位数据宽度,频率33MHz,理论峰值带宽133MB/s。所有插在PCI总线上的设备共享这条133MB/s的通道。这个数字在当年对付声卡、网卡、SCSI适配卡完全够用,但随着设备增多和高带宽需求出现,共享总线成了瓶颈。

第二,配置空间与即插即用。PCI引入了一套标准的配置寄存器,操作系统启动时可以扫描总线、读取每张设备卡的配置信息,分配中断号和内存地址。和ISA时代用户必须手动拨跳线、设置IRQ、处理资源冲突相比,PCI把“让硬件被发现”变成了协议层面的能力。这项设计是革命性的。

第三,总线事务和突发传输。PCI上的数据交换以总线事务为单元,支持突发传输,也就是一次地址建立后连续传一大批数据,而不是一次一个字节地挤牙膏。这对后来的DMA转移、大块数据读写非常关键。

用生活化的比喻:PCI是“城市主干道”,连接城市核心(CPU)和各个功能区(外设),每个功能区都可以从主干道进出货物。

1.2 SCSI的诞生背景与设计哲学

SCSI全称是Small Computer System Interface,小型计算机系统接口。它的历史比PCI更早,最早源于某存储设备商为小型机开发的通用设备接口,后来被标准化。它定位是“存储子系统接口”,一开始就是为了把磁盘、磁带、光驱、扫描仪这些设备接到主机上,并且提供比IDE强得多的扩展能力。

SCSI的设计哲学和一个根本问题是绑在一起的:如何让一套统一规则挂满一长串存储设备?

物理层上,SCSI采用了链式拓扑,一条总线上可以挂多个目标设备。早期SCSI支持7个地址,目标端占用ID 0到6,主机适配卡占用ID 7;后来宽带SCSI把地址扩展到了15个,主机适配卡通常占ID 7或ID 15,优先级设计得相当讲究。设备之间通过线缆串联,链路终端需要接上终结器,用来吸收信号反射,保证电气稳定性。

协议层上,SCSI定义了一整套命令集。设备不是“裸的存数据的盒子”,而是被抽象成逻辑单元,主机通过CDB(命令描述块)下发指令,比如读、写、查询容量、重设状态等等。这种“物理层+命令集”的分层结构让同一套SCSI协议能驱动种类完全不同的设备。

SCSI还有一个非常关键的性能特性:支持并发的IO请求。设备可以接收命令后异步执行,不需要每个I/O都等主机再次发起,这对多任务操作系统和数据库负载极其重要。与之相比,同时期的IDE接口一次只能处理有限的命令,队列深度低,多任务并发能力弱得多。

这是SCSI价格昂贵但依然占领服务器工作站市场的原因——它不是为家用简化场景设计的,它是为“一堆设备、高负载、稳定可靠”设计的。

1.3 核心差异对照

维度PCISCSI
标准定位通用扩展总线存储设备接口(含命令集)
典型拓扑树形/共享总线,主板上多条总线线性链式拓扑,可挂7或15个设备
传输方式并行总线并行总线(早期),或命令协议 + 底层传输
主要负载显卡、声卡、网卡、各类适配卡硬盘、磁带机、光存储、扫描仪
数据模型内存映射、配置空间、总线事务逻辑块、CDB命令、LUN逻辑单元号
即插即用支持,操作系统扫描配置空间需要ID分配、终结器设置、BIOS扫描
典型设备成本低高

两者其实不在同一层。SCSI适配卡插到PCI槽上,PCI是“路”,SCSI是“路上面跑的一套货运公司规则”。两者都会提到“SCSI卡”,但卡本身承担着两重身份:它是一张PCI设备卡,同时又是SCSI总线的主机端控制器。

2. 两者怎么连:适配卡、中断、DMA与启动顺序

理解PCI和SCSI的交叉点,关键在于看懂一张SCSI适配卡在系统里做了哪些事。很多人以为SCSI硬盘是被某一条专用接口直接连到主板,其实不是。在主流PC体系里,SCSI设备必须通过SCSI适配卡接入PCI总线,适配卡是“翻译官+调度员+搬运工”三位一体的角色。

2.1 SCSI适配卡为何要插在PCI总线上

以一块典型的Ultra160 SCSI卡为例,它的一面是PCI接口,插到主板的PCI插槽;另一面是SCSI接口,接SCSI硬盘。卡上的主控芯片负责两件工作:一是作为PCI总线上的设备,遵循PCI的配置机制,向操作系统报告自己的资源需求;二是作为SCSI总线上的主机适配器(Host Adapter),管理SCSI链路的事务、仲裁、命令传输。

PCI总线为SCSI卡提供了很高的理论带宽。Ultra160 SCSI的传输速率是160MB/s,如果插在PCI 64位/66MHz的接口上(理论带宽528MB/s),卡不会限制总线性能;就算插进老式32位PCI槽,也有133MB/s的理论带宽,虽然略低于160MB/s,但实际应用里也能跑出大部分性能。反过来看,如果SCSI卡只能插在ISA总线上,ISA的带宽大约8MB/s,那SCSI盘性能再高也白搭。接口适配就是这样的逻辑——高性能外设需要一条足够宽的路。

这里还得说一个细节:中断。SCSI适配卡完成一次设备响应,需要向处理器发出中断请求。传统PC上每个设备需要占用一个IRQ。PCI设计支持中断共享,几个PCI卡可以共享同一个中断号,由操作系统统一分发。听起来很省资源,但早期驱动不成熟时,共享中断偶尔引发莫名其妙的性能下降。实际组机时,有人会把SCSI卡单独占一个空闲IRQ,效率会好一些,这和后来PCIe时代直接用消息信号中断代替边沿触发相比,古老太多。

2.2 DMA与CPU解脱

SCSI数据搬运如果全靠CPU逐字节读取,那高性能存储就无从谈起。SCSI卡自带DMA引擎,可以直接把SCSI总线上的数据搬运到系统内存,或者从内存搬到SCSI设备,绕开CPU。整个过程中CPU只需要在传输开始时设置好DMA描述符,传输完成后接收一个中断即可。

这块卡还带一块不小的缓冲区或FIFO,用来缓冲速度不匹配的数据流。SCSI设备侧的数据速率可能因为转速波动而间歇性变化,DMA引擎先存一段数据再发起PCI突发传输,效率比每来一小块数据就抢一次总线好得多。

实际操作中,检查SCSI卡是否启用了总线主控DMA是一种有效判断性能的方式。老驱动如果没有正确注册Busmaster DMA,读写时CPU占用率会飙升。我排查过一台读写SCSI盘时节拍感明显的设备,装上新驱动和总线主控支持后,同样的命令CPU占用率从八成降到一成,这种差距就像换了一台电脑。

2.3 从BIOS到操作系统:启动过程的硬仗

一台装着SCSI盘的机器启动时,比普通带着IDE或SATA盘的机器多了好几道流程。

传统PC开机后,BIOS会扫描PCI总线上的设备。SCSI卡的PCI配置空间里有厂商ID、设备ID、扩展ROM地址等信息。BIOS扫描到这张卡后,会调用卡上的SCSI BIOS扩展程序(opROM)。这个扩展ROM类似一个迷你驱动,负责扫描SCSI总线上的目标设备ID、识别容量和类型,然后把可用系统盘设备的入口挂到启动路径里。

如果SCSI盘没有设置好ID、终结器或供电链路,SCSI BIOS会报错,启动过程就卡在那里。常见问题是两个设备撞了相同的SCSI ID,或者链路的最后一个设备没有终结器。此时SCSI BIOS扫描会超时或者看不到任何目标。

操作系统加载后,系统里的通用SCSI驱动会接管适配卡,重新扫描SCSI总线,为每个目标设备的逻辑单元(LUN)创建设备节点。应用层面看到的就是一块块硬盘,但本质上经过了“PCI设备发现 – SCSI BIOS扫描 – 驱动枚举LUN”三层路径。

这一套启动机制直到今天还留有影子。现代主板上的NVMe盘也需要通过PCI枚举被识别,操作系统用NVMe驱动管理,启动路径里的NVMe opROM或UEFI驱动承担类似SCSI BIOS的角色。老分层思想完全延续了下来。

3. 真实装机场景:PCI扩展槽与SCSI硬盘的经典取舍

理论讲完,聊聊实际场景。PCI和SCSI在真实装机里的结合,是每个经历过那个年代的装机人都记忆深刻的取舍。

3.1 桌面PC里PCI卡的应用

桌面PC中,PCI槽最常见的用途是插声卡、网卡、电视卡、USB扩展卡等。一块好的PCI声卡,从硬件中断处理、音频DMA到驱动程序,和主板集成声卡的体验差距很大。集成声卡占用CPU时间更多,中断延迟更高,而独立PCI声卡依靠DMA从内存按帧拉取音频数据,把音频流送向DAC,延迟更可控。当时不少音频发烧友宁愿多花一张卡的钱,换稳定无爆音的输出,很大程度就是这个原因。

PCI显卡出现过一段时间,但很快被AGP取代。AGP严格来说是从PCI总线基础上增加的一条高速图形专用通道,把显卡从共享带宽的PCI总线上切了出去。这也侧面反映了PCI共享带宽模型的短板:显卡单设备独占大量带宽的需求一出现,普通PCI总线的共享能力就捉襟见肘。

PCI网卡方面,千兆网卡插在32位PCI槽上,理论上限也就是133MB/s,实际上受总线仲裁和驱动开销影响,吞吐量可能打折到950Mbps附近,跑不满线速千兆。这就是共享总线在带宽上的现实困境。

3.2 服务器里SCSI盘阵的布局

服务器场景里,SCSI的价值完全发挥出来。

一组常见的服务器配置是:主板上有若干PCI 64位槽,插着一张SCSI RAID适配卡。卡外通过一条缆线串联传输SCSI盘,典型链路上挂着四到六块硬盘,每块盘通过ID区分。RAID卡数数据请求转换为SCSI命令,发给对应目标ID。

SCSI盘当年的转速以10000rpm和15000rpm为主流,寻道延迟低,IOPS表现远超同时期IDE盘的5400或7200rpm。尤其适合数据库日志、邮件存储这类高并发小IO负载。多任务并发时,SCSI的标签命令队列允许磁盘同时缓存多条请求,由盘自身按最优请求顺序执行,极大提升随机IO效率。

我记得有次测试一套数据库系统。原来的IDE盘跑批量导入,CPU经常空转等待磁盘,排队时间奇高。后来换上带SCSI RAID卡的方案,并行请求数显著上升,同样数据导入快了数倍。这并非玄学,而是SCSI的并发特质切中了“大量小请求排队”这类负载的脉。

3.3 性能与成本的平衡

使用场景IDE/SATA方案SCSI方案
桌面文档办公够用、便宜性能过剩、成本高
音频/视频连续读写单盘性能可满足多盘阵列下带宽更好
数据库随机并发队列深度浅,易卡标签命令队列 + 高转速盘优势明显
设备接入数量双通道最多挂4个设备链式最多15个设备
回放故障率普通盘发热大服务器级盘固件稳定、容错强

SCSI设备贵,盘也贵,连接器、线缆、终结器、专用电源都要额外投入。若不是对稳定性、并发性和多设备扩展性有硬需求,普通用户完全没必要上SCSI。这也是为什么SCSI始终走不进家用市场的根本原因:产品力强,但成本曲线不适合低负载场景。

4. 演进:PCI变成了PCIe,SCSI的“魂”留在了SAS和NVMe里

没有哪个接口标准能永远站在顶端。PCI和SCSI都经历了被取代的过程,但它们的思想并没有消失,而是在新一代协议里以不同形态存活。

4.1 PCIe取代PCI:并行总线危机

PCI并行设计遇到的最大物理障碍是信号同步。数据频率提高、主板走线加长后,并行总线多根线之间的信号到达时间差(skew)越来越难控制。频率超过133MHz时,并行信号完整性很难处理,继续提高频率让主板设计变得异常昂贵。

PCIe的转向异常果断:改为串行差分传输。不再用多条数据线同时传一堆比特,而是用一对低电压差分信号高速串行传输。频率高、信号完整性好,并在此基础上建立点对点连接。不再让多个设备抢一条共享总线,而是在交换机制上让每个设备都有自己的数据传输通道。

PCIe还带来了一个非常重要的协议层改变:用数据包进行事务通信,取代PCI时代的边带信号和并行总线仲裁。这相当于把“每件事都要用专门线路通知总线”的复杂机制,收敛成“统一打包,首部写目的地址,交换器按地址转发”的消息模型,灵活度和扩展性大大提升。

实际带宽也从最初的PCIe 1.0 x1通道单方向250MB/s,一路涨到PCIe 5.0 x16的单方向约64GB/s。主板上的插槽从PCI时代“所有槽共享一条总线”变成了“每对差分线都是独立通道,按需用x1、x4、x8、x16配置”。这种可扩展性是并行PCI做不到的。

4.2 SCSI的命令集遗产

SCSI物理总线形态在消失,但SCSI命令集却以特殊方式留存。本世纪初,存储工业界进发了两条非常重要的技术路线。

一条是SAS(串行SCSI),物理层换成类似于PCIe的高速串行差分信号,但命令层保留了SCSI命令集,兼容并扩展了SCSI协议。SAS可以同时连接SAS盘和SATA盘,因为SATA本身在很多层面借鉴了SCSI的命令模型。服务器存储由此从笨重的并行SCSI线缆和平行终结器走向了轻量、稳定的串行方案。

另一条是现代NVMe的崛起。NVMe虽然不走SCSI命令,而是全新的NVMe提交队列/完成队列模型,但它继承了SCSI时代对并发和命令标签的追求——每个队列可承载最多64K条命令,多队列并行,这让多核CPU下的高并发存储性能压榨到了极致。当年SCSI的标签命令队列最多管理几十条并发命令,NVMe把并发提升到了数量级更高的层次,但设计思想仍是“设备端要有充足的并发就绪状态,把IO调度的灵活性放给盘内部”。

CAUTION来自实际经验:不同技术之间的继承性,远没有名称替换那么表面。判断一种新协议,主要看它是否解决了旧协议的物理瓶颈和协议冗余,而不只是看它“能不能一遍”。SAS记住SCSI命令而不是SCSI并行线,NVMe采用灵活的队列模型而不是照搬SCSI的物理寻址,这才是真正意义上的演进。

4.3 从SCSI ID到NVMe多队列:思想不变

SCSI时代最耗费心力的是ID规划:一条链路上每块盘设唯一的ID,还要考虑优先级、终结器安装位置、链路长度。这本质是对“物理共享一条链路”的顶层设计。替换成SAS和NVMe后,设备编号由协议自动分配,链路级问题几乎绝迹,设计和维护成本大幅降低。

但“给每个设备一个清晰地址,让系统知道到哪里去找它”这件事永远不变。PCI时代的配置空间为每个设备分配唯一的BDF地址(总线号、设备号、功能号),SCSI时代为每个目标分配ID和LUN,PCIe时代同样需要枚举BDF地址,NVMe则直接使用PCIe的BDF地址定位所属控制器。操作系统底层的枚举逻辑,数十年始终如一。

我们可以这样理解:物理层会随电气工程进步不断替换,协议层会随软件需求变化而扩展,但“设备可发现、地址可解析、请求可并行、错误可报告”这个骨架,是所有总线与存储协议共同遵守的底层公理。

5. 实操经验:老协议留给现代选型的判断框架

整理这篇文章时,我翻阅了不少自己当年记的故障笔记。有几个坑几乎是每一位接触过PCI和SCSI的工程师都会遇到,也特别能反映这两套协议的特质。

5.1 我踩过的坑

第一个坑是SCSI ID重复。刚上手时,我给两台SCSI盘都设了ID 0,结果SCSI BIOS扫描时一台盘时好时坏,有时直接报目标不存在。排查过程非常折腾:电源、线缆、终结器一一换过,最后逐一测试配置才发现是ID打架。教训很直接:SCSI是一个共享总线的网络,每个设备必须有独立ID,和网络中IP地址冲突完全一个道理。

第二个坑是终结器。SCSI链路的首端是主机适配卡,尾端是最后一个设备,尾端必须接终止器。早期理解不透,建了三条设备的长链路,终端没有终止器,结果信号反射导致偶发传输错误和不规律超时。这种问题靠看报错日志根本看不出来,后来是用替换法排除掉的。现代的SAS和SATA都不再需要终结器,但“传输链路必须做端接处理”的物理教训并没有消失,高频串行链路的终端电阻匹配依然在设计责任之内。

第三个坑是PCI中断共享导致的性能抖动。早期操作系统对PCI中断共享的管理并不完美,当SCSI卡和网卡共享同一中断时,高网络流量会导致SCSI请求处理明显延迟。手动把SCSI卡调整到独立IRQ后,抖动消失。这个现象说明:总线协议给设备提供了标准接口,但设备的中断延迟和共享冲突仍然真切影响体验。

5.2 评估协议时的三个核心指标

踩过以上几个坑后,我形成了一套评估总线或存储协议的三维框架,直到今天选NVMe盘、选SAS卡,也习惯先跑这三步。

首先是看链路类型:并行还是串行。并行协议在频率提升上有限制,串行协议更容易做高速和长距离传输。今天所有主流方案都向串行走,是因为物理层面更干净。

其次是看并发能力:一个设备端最多同时支持多少在途请求。IDE时代近似1,SCSI时代打开了标签队列,SAS和NVMe把并发数进一步放大。现在选存储,队列深度和每条队列的命令数直接决定高负载下的IOPS表现。

最后是看管理开销:协议是让主CPU做大量仲裁和状态管理,还是把这些纪律内化到设备中。PCI时代的仲裁机制很省芯片但费CPU,PCIe的交换机制更大程度上把数据路由交给交换器;SCSI命令设计从一开始就允许设备自主排队优化,这大大减轻了主机负担。

5.3 给初学者的理解方法

如果你刚接触这些协议,不要从一开始就背参数表。更好的路径是抓主线,把PCI和SCSI理解成两个层次的问题:PCI层解决“外设如何接入处理器系统”,SCSI层解决“存储设备如何被高效管理”。

想象一套现代电脑:CPU像工厂,内存像仓库,SSD像远程货场。处理器要读取SSD上的数据,操作系统把请求整理成命令,通过PCIe总线发送给SSD控制器。SSD控制器收到命令后按优化顺序执行,再把结果通过PCIe总线送回来。PCI对应“主干运输线路”,NVMe对应“运输和分拨规则”,两者的边界正好是你观察数字时代最好的坐标轴。

这套老协议给我的真正启发,不在于它们当年的速率有多快、端口有多热,而在于一个优秀标准的生命周期可以跨越物理介质本身。PCI被PCIe取代,但设备枚举和配置空间的思想在每一台现代电脑里启动时依然静静运行;SCSI并行线退场,但命令集、并发队列和设备管理模型成为SAS与NVMe的骨血。就像旧楼拆了,承载楼体功能的管井和地基依然决定新楼的方向。

我个人做选型时,也总爱把新技术的问题翻译成老问题:这条链路是共享的还是交换的?一个设备能同时记多少账?故障是静默的还是会主动报告?带着这套框架去读新协议的数据手册,你会发现自己已经能举一反三了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询