智能网络存储接口系统和装置的制作方法

文档序号:6474259阅读:271来源:国知局
专利名称:智能网络存储接口系统和装置的制作方法
技术领域
本发明涉及网络通信和存储。
背景技术
在过去十年,网络计算的优势和进展促进了计算机网络的极大增长,反过来又激励更多的进展、增长和优势。随着计算机网络的增长,在利用传统网络装置方面出现了混乱和瓶颈现象。例如,连接网络的计算机CPU也许花费成比例增加的处理网络通信的时间,导致减少可用于其它工作的时间。特别是,在网络与计算机的存储单元之间传送文件数据的需求已经加快。上述数据通常被分成在网络上进行传送的分组,每个分组在控制信息的诸多层上封装,接收计算机的CPU每次处理一层的控制信息。尽管CPU的速度不断增加,但是如文件传递的网络消息的协议处理可能消耗最快速度的商用CPU的大部分有效处理能力。
这种情况对于网络文件服务器可能更具有挑战性,这种网络文件服务器的主要功能是通过网上传递文件数据在附属盘或者磁带驱动器上存储和检索文件。由于网络和数据库发展,存储在这种服务器上的信息量已经是爆炸性的,从而使这种服务器附属的存储器显露出局限性。除了上述的主机CPU处理的协议问题之外,诸如传统的小型计算机系统接口(SCSI)的并行数据通道的局限,随存储需要的增加而变得愈加明显。例如,并行SCSI接口限制了可以附加到服务器上的存储单元的数量,以及限制了存储单元与服务器之间的距离。
如Tom Clark所著的名为“Designing Storage Area Networks”(版权1999)一书所述,服务器附属的平行SCSI存储单元局限的一种解决方案包括把其它文件服务器附加到网络服务器前端的一个现有局域网(LAN)上。该附属网络的存储(NAS)允许其它服务器和客户网上访问该NAS文件服务器,但不会增加专用于原网络服务器的存储容量。相反,NAS可能增加最初的网络服务器所需的协议处理,因为该服务器也许需要与各种NAS文件服务器进行通信。此外,每个NAS文件服务器同样受到协议处理的压力和存储接口的限制。
存储区网络(SAN)向网上文件传递和存储的增长需要提供了另一种解决方案,该解决方案是用连接在服务器之后的存储单元的网络替代菊链式SCSI存储单元。SAN配置了一个称之为光纤信道(FC)的新兴网络标准,而不是传统的诸如以太网或者快速以太网的网络标准。然而,由于该FC最近才被采用,因此许多市场上可以得到的FC装置彼此不兼容。此外,FC网络可能专门提供网上两点之间(比如服务器与存储单元之间)通信的带宽,因此,当各点不进行通信时,该带宽将被浪费。
当今已知的NAS和SAN可以根据传递和存储数据的格式来区别。NAS装置传送来自其它文件服务器或者客户的数据文件,和把文件数据传送给所述其它文件服务器或者客户,而设备级的数据块可以在SAN上传送。由于该原因,NAS装置通常包括用于文件与用于存储的数据块之间进行转换的文件系统,而SAN可以包括不具备这样一个文件系统的存储单元。
另一方面,NAS文件服务器可以被附加到专用于一个服务器的基于以太网的网络上,以作为以太网SAN的部分。Marc Farley在“构建存储网络”(版权2000)一书中进一步指出,在以太网上运行存储协议是可行的,这可以避免光纤信道不兼容问题。然而,利用诸如SAN布局增加连接到服务器的存储单元的数量,将增加服务器必须执行的协议处理量。如上所述,这种协议处理已经加重了大部分先进服务器的负担。
网络消息如文件传送的传统处理的一个实例说明了放慢网络数据存储的一些处理步骤。网络接口卡(NIC)通常提供主机与网络或者网络之间的物理连接,并且提供了允许主机访问网络或者多个网络的媒体访问控制(MAC)功能。当发送到主机的一个网络消息分组到达时,处理分组的MAC层报头和分组在NIC中经历循环冗余校验(CRC)。然后,经由输入/输出(I/O)总线,比如外设部件互连(PCI)总线将分组发送到主机,并存储到主机存储器中。CPU随后通过运行来自协议堆栈的指令顺序地处理分组的每个报头层。这需要经由最初用于存储分组的主机存储器总线的行程和经由用于顺序处理每个报头层的主机存储器总线的后续行程。在处理了分组的所有报头层之后,来自分组的有效载荷数据在一个文件高速缓存器中与其它经过相似处理的消息的有效载荷数据成组。CPU根据文件系统将所述数据重新组装为用于在一个盘或者多个盘上存储的文件块。在处理了所有分组以及在文件高速缓存器中将消息重新组装成文件块之后,以数据块(每个由一些有效载荷分组构成)形式将文件通过主机存储器总线和I/O总线回送到主机存储器,以便在一个盘中长期存储,该文件回送通常还要经由被桥接到I/O总线上的SCSI总线。
另一方面,为了在SAN上存储文件,将文件高速缓存器中重新组装的文件经由主机存储器总线和I/O总线按照数据块形式回送到SAN所配置的I/O控制器。对于SAN是FC网络的情况,提供一个专用FC控制器,该控制器可以根据光纤信道协议(FCP)向SAN上的存储单元发送文件块。对于文件将被存储在NAS装置上的情况,文件直接或者改道传送到NAS装置,该NAS装置基本上按上述方式处理分组,但是使用了NAS装置的CPU、协议堆栈和文件系统,并且把文件块存储到NAS装置的存储单元中。
因而,从用于SAN存储或者连接到主机的NAS存储的网络发送到主机的文件通常需要经过用于文件每个消息分组的I/O总线的两个行程。此外,每个分组的报头层的控制信息每次被单层存储和处理时,也许要重复两次来回经过主机存储器,然后被回送给I/O总线。响应来自客户的请求从SAN的存储器恢复这样一个文件通常也需要由CPU和文件系统进行大量处理。

发明内容
本发明公开了一种接口装置,如用于本地主机的智能网络接口卡(INIC),该接口装置设有加速网络与存储单元之间数据传送的硬件和处理机构,而数据传送的控制由主机保留。接口装置包括处理网络分组报头的硬件电路,并且可以使用网络与存储单元之间的数据快速路径,该快速路径由主机建立。主机CPU和协议堆栈免除了经由快速路径的数据传送的协议处理,并且将主机总线带宽从网络和存储子系统众多需求中释放出来。所述存储单元包括独立磁盘的冗余阵列(RAID)或者其他多个驱动的配置。存储单元通过诸如SCSI的并行信道或者通过诸如以太网或者光纤信道的串行信道连接到接口装置。接口装置可以通过诸如PCI总线的I/O总线连接本地主机。附加存储单元可以通过诸如SCSI的并行接口加到本地主机上。
文件高速缓存器被设置在可以绕开主机的用于存储数据的接口装置上,在接口装置文件高速缓存器中具有由主机的文件系统控制的数据安排。借助该安排,远端主机与该存储单元之间的数据传送可以通过接口装置快速路径进行处理,而且数据不需要经由I/O总线在接口装置与本地主机之间进行传送。此外,与传统通信协议处理对比,快速路径数据的控制信息不经由用于暂时存储然后再由CPU每次单层进行处理的主机存储器总线来重复传送。因此,主机可以从受主机控制的存储单元的文件读写的大多数数据业务的繁杂事务中解放出来。
附加接口装置可以经由I/O总线连接到主机上,使每个附加接口装置具有受主机文件系统控制的文件高速缓存器,并且提供了附加网络连接和/或对附加存储单元的连接。借助连接到单个主机的多个接口装置,主机可以控制多个存储网络,使大多数数据流向受主机控制的旁路主机协议处理网络以及使大多数数据从该网络流出、经由I/O总线传送数据、经由主机总线传送数据以及将数据存储到主机存储器中。在一个实例中,存储单元可以通过一个千兆比特以太网连接这样一种接口装置,提供没有缺陷的光纤信道的速度和带宽,并且受益于大规模安装的基础设施以及基于以太网网络的兼容性。


图1是一个网络存储系统的平面视图,该系统包括一个通过智能网络接口卡(INIC)连接到多个网络的主计算机,和一个附属于INIC的用于存储单元的文件高速缓存器,所述INIC具有一个I/O控制器;图2是本发明的在多个网络间传送数据的INIC和主计算机的功能平面图;图3是一个描述步骤序列的流程图,这些步骤涉及由图1的系统从网络接收一个消息分组;图4是一个描述步骤序列的流程图,这些步骤涉及由图1的系统响应来自一个网络的请求向该网络发送消息分组;图5是一个网络存储系统的平面视图,该网络存储系统包括通过多个由主计算机管理的INIC连接到多个网络和多个存储单元的一个主计算机;图6是一个网络存储系统的平面视图,该网络存储系统包括通过一个智能网络接口卡(INIC)连接到多个LAN和多个SAN的一个主计算机,所述智能网络接口卡没有I/O控制器;图7是图6所示的一个SAN的平面视图,包括连接在网络线路与存储单元之间的以太网SCSI适配器;图8是图6的以太网SCSI适配器的平面视图;
图9是一个网络存储系统的平面视图,该网络存储系统包括一个通过多个由主计算机管理的INIC连接到多个LAN和多个SAN的主计算机;图10是图1所示INIC实施例的硬件逻辑图,包括一个分组控制定序器和一个快速定序器;图11是图10的快速定序器的示意图,该定序器分析由INIC接收的报头字节;图12是图1的专用主机协议堆栈的示意图,用于建立和控制快速路径的通信控制块以及用于处理慢速路径中的分组;图13是为NetBios通信配置的MicrosoftTCP/IP堆栈和Alacritech命令驱动器的示意图;图14是客户与具有网络存储单元的服务器之间的NetBios通信交换的示意图;图15是可以在客户与图14的服务器之间传送音频或者视频数据的用户数据报协议(UDP)交换的示意图;图16是包含在图1中的INIC中的硬件功能的示意图;图17是包含在图16中的INIC中的三阶段流水线式微处理器组的示意图,包括三个阶段,每个阶段有一个处理器;图18A是图17的流水线式微处理器的第一阶段的示意图;图18B是图17的流水线式微处理器的第二阶段的示意图;图18C是图17的流水线式微处理器的第三阶段的示意图;图19是与图17的微处理器相互作用并包括SRAM和DRAM的多个队列存储单元的示意图;图20是用于图19的队列存储单元的一组状态寄存器的示意图;图21是与图19和图20的队列存储单元及状态寄存器相互作用的队列管理器的示意图;图22A-D是用来分配高速缓存器的最后使用的寄存器的各个分阶段的示意图;图23是用来操作图22A-D的最后使用的寄存器的装置的示意图;
图24是图16的INIC的另一个示意图;图25是图24的接收定序器2105的详细示意图;图26是一个用于在文件高速缓存器中获得一个目的地的机构的示意图,所述文件高速缓存器用于从网络中接收的数据。
具体实施例方式
图1示出了本发明的网络数据通信系统的概观。主计算机20连接一个接口装置,如智能网络接口卡(INIC)22,该INIC22可以有一个或者多个端口,以连接如局域网或者广域网25或者互联网28的网络。主机20包含一个通过主机总线35连接诸如中央处理单元(CPU)30的处理器。主机20借助驻留在主机存储器33中的操作系统(未示出)监视各种任务和装置,包括监视文件系统23。主机存储器33中存储的其它内容是用于处理网络通信和INIC驱动器39的指令的协议堆栈38。该INIC驱动器39在INIC22与协议堆栈38之间进行通信。高速缓存器管理器26在文件系统23和任选的存储器管理器27(如WindowsNT或2000的虚拟存储器管理器)的控制下运行,以便在主机文件高速缓存器24上存储和检索文件段和所谓的文件流。
主机20通过I/O总线40(比如PCI总线)连接到INIC22,该I/O总线40通过主机I/O桥42连接主机总线35。INIC包括经由INIC总线48互连的一个接口处理器44和存储器46。INIC总线48通过INIC I/O桥50连接到I/O总线40。连接到INIC总线48的其它部件是一组硬件定序器52,该硬件定序器52提供网络信息的上层处理。对LAN/WAN25以及互联网28的物理连接由传统物理层硬件PHY58提供。PHY58单元的每一个连接到媒体访问控制(MAC)60的一个对应单元,每个MAC单元在INIC与一个网络之间提供一传统的数据链路层连接。
主机存储单元66(比如硬盘驱动器或者硬盘驱动器和对应控制器的集合)可以通过一个传统的I/O控制器64(如一个SCSI适配器)连接到I/O总线40。并行数据通道62将控制器64连接到主机存储单元66。作为选择,主机存储单元66可以是独立磁盘的冗余阵列(RAID),I/O控制器64可以是RAID控制器。根据文件系统23的命令操作的I/O驱动器67(例如,SCSI驱动器模块)在与控制器64的互相作用下,在主机存储单元66上读写数据。主机存储单元66最好包含用于主机20的操作系统码,包括文件系统23,这些操作系统码可以在贮藏在主机存储器33中。
INIC存储单元70(比如硬盘驱动器或者硬盘驱动器与相应的控制器的集合)经由匹配接口控制器、INIC I/O控制器72连接到INIC总线48,INIC I/O控制器72又通过并行数据通道75连接到INIC存储单元。INIC I/O控制器72可以是通过并行数据通道75连接到INIC存储单元70的SCSI控制器。作为选择,INIC存储单元70也可以是RAID系统,以及I/O控制器72可以是RAID控制器,具有多个或者分支数据通道75。同样,I/O控制器72可以是一个SCSI控制器,该控制器连接到一个用于INIC存储单元70的RAID控制器。在另一个实施例中,INIC存储单元70附属于光纤通道(FC)网络75,以及I/O控制器72是一个FC控制器。尽管INIC I/O控制器72被显示为连接到INIC总线48,但是I/O控制器72可以改为连接到I/O总线40。INIC存储单元70可以随意地包含主机20的引导磁盘,据此加载操作系统的内核程序。INIC存储器46包含帧缓冲器77,用于临时存储从诸如LAN/WAN25的一个网络接收的分组或者临时存储发送到该网络的分组。INIC存储器46还包括一个接口文件高速缓存器、INIC文件高速缓存器80,用于临时存储从INIC存储单元70检索的或者在其上存储的数据。尽管INIC存储器46在图1中为清楚起见被明确显示为一个单部件,但是存储器46可以由设置在INIC22不同位置上的分离单元构成,并且可以由动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、只读存储器(ROM)和其它形式存储器组成。
文件系统23是一个高级软件实体,该实体包含存储单元66和70以及文件高速缓存器24和80上的信息的组织的常识,并且提供了实现存储结构的性质和性能的算法。文件系统23把存储单元66和70、各文件高速缓存器24和80上存储的信息在逻辑上组织成文件分级结构,尽管这样一种逻辑文件在物理上位于存储单元66或者70不同磁盘的不同块上。文件系统23还管理存储单元66和70以及文件高速缓存器24和80上的文件数据的存储和检索。I/O驱动器67软件依据文件系统操作主机20,该软件与用于各自存储单元66和70的控制器64及72相互作用,以管理数据块,即从这些存储单元中读出数据块或者把数据块写入这些存储单元。主机文件高速缓存器24和INIC文件高速缓存器80为从存储单元66和70读出或者写入的数据提供存储空间,所述数据由文件系统在存储单元66和70的物理块格式与用来应用的逻辑文件格式之间安排。与一个文件关联并存储在主机文件高速缓存器24和INIC文件高速缓存器80中的字节线性流被称作文件流。主机文件高速缓存器24和INIC文件高速缓存器80的每一个包含一个索引,用于列出保存在各个高速缓存器中的文件流。
文件系统23包括用于确定存储单元66和70上的文件块地址的元数据,具有指向最新访问的缓存在元数据高速缓存器中的文件块的多个指针。当例如由LAN/WAN25上的一个远端主机请求访问一个文件块时,开始引用主机文件高速缓存器24和INIC文件高速缓存器80索引,以查看对应于该文件块的文件流是否存储在它们各自的高速缓存器中。如果未在文件高速缓存器24或80中发现文件数据流,那么向元数据所指的适当存储单元地址发送一个该文件块的请求。用于文件高速缓存器24和80的高速缓存器管理器26使用一个或者多个传统高速缓存算法,以便当高速缓存器充满又需要缓存新数据时选择丢弃哪一个数据。INIC文件高速缓存器80的高速缓存文件流极大地减少了用于存储在INIC存储单元70上的文件块的I/O总线40和数据通道75上的通信量。
当直达主机20的一个网络分组到达INIC22时,该分组的报头由定序器52处理,以确认该分组并建立该分组的概述或者描述符,该概述专用于所述分组并存储在帧缓冲器77中,并且在一个队列中存储该分组的指针。该概述是描述分组报头的协议类型以及校验和的结果的一个状态字(或者多个字)。该字中所包含的是一个所述帧是否为快速路径数据流的候选者的指示。与现有技术方案不同,包含协议信息(包括传送和会话层信息)的上层报头由定序器52的硬件逻辑处理,从而建立概述。定序器的专用逻辑电路允许分组报头在该分组从网络到达时被有效处理。
INIC接下来选择是把该分组发送到由运行协议堆栈38的CPU30进行报头“慢速路径”处理的主机存储器33,还是把分组数据直接发送给“快速路径”的INIC文件高速缓存器80或主机文件高速缓存器24。对于每个消息具有多个分组的大多数数据通信量,可以选择快速路径,该快速路径免除了CPU用于每个分组的协议处理的时间,比如免除重复复制数据和重复往返主机存储器总线35行程的时间。对于直接把分组传送给INIC文件高速缓存器80的快速路径的情况,还可以避免往返主机总线35和I/O总线40的附加行程。慢速路径处理允许任何一个不便于通过INIC22快速路径传送的分组,由主机20按传统方式处理。
为了提供主机20上的快速路径能力,首先与远端主机建立一个连接,也许包括信号交换、验证和其它连接初始化过程。在用于基于连接的消息的连接初始化过程期间,由协议堆栈38建立一个通信控制块(CCB),比如,该通信控制块由TCP/IP或者SPX/IPX协议代表。CCB包括连接信息,比如源和目的地地址和端口。对于TCP连接,CCB包括源和目的地媒体访问控制(MAC)地址、源和目的地IP地址、源和目的地TCP端口和TCP变量,比如用于滑动窗口协议的计时器以及接收和发送窗口。在建立连接之后,INIC驱动器39将CCB从主机传递到INIC存储器46,把CCB写入存储器46中的命令寄存器,其中,可以将该CCB与其它CCB一同存储在CCB高速缓存器74中。INIC还建立与被高速缓存的CCB对应的散列表,用于加速CCB与分组概述的匹配。
当一个消息,比如一个文件写入时(相当于INIC收到CCB时),该消息的初始分组的报头部分被发送到主机20,由CPU30和协议堆栈38进行处理。发送到主机的报头部分包含消息的一个会话层报头(被认为开始于分组的某一分支),并随意地包含来自分组的某些数据。协议堆栈38的会话层对会话层报头的处理把所述数据识别为属于该文件,并指示消息的大小,然后,由文件系统根据该消息的大小信息确定是把消息数据高速缓存到主机文件高速缓存器24中还是INIC文件高速缓存器80中,并且在所选择的高速缓存器中保留数据的目的地。如果在发送到主机的报头部分中包含任何数据,那么则将它们存储在目的地中。所选择的文件高速缓存储器中目的地的缓存器地址的列表被发送给INIC22并被存储,或者与CCB一同被存储。CCB还保持关于该消息的状态信息,比如消息的长度以及已经处理的分组的数目和顺序,提供协议和关于每个协议层的状态信息,包括涉及哪个用户以及总传送信息的存储空间。
一旦CCB指示出目的地,就可以得到对应于CCB的分组的快速路径处理。在定序器52对连续接收的分组的进行上述处理以生成分组概述之后,将分组概述的散列与散列表进行比较,并且,必要时,与CCB高速缓存器74中存储的CCB进行比较,以确定该分组是否属于已经建立快速路径连接的消息。当分组概述与CCB匹配时,则假定不存在异常情况,此时,没有网络或者传送层报头,直接存储器存取(DMA)单元68向CCB所指示的文件高速缓存器80或者文件高速缓存器24的目的地发送分组数据。
在来自消息的所有数据已经被高速缓存为INIC文件高速缓存器80或者主机文件高速缓存器24中的文件流之后的某些点上,数据的文件流在文件系统的控制下,由文件系统23控制的DMA单元68将其从文件高速缓存器发送到INIC存储单元70或者主机存储单元66。通常,高速缓存在主机文件高速缓存器24中的文件流被存储在INIC存储单元66中,而高速缓存在INIC文件高速缓存器80中的文件流被存储在INIC存储单元70中,但是这种安排不是必须的。文件传送的后续请求可以由同一CCB处理,如果该请求涉及相同的源和目的地IP地址和端口,则由主机CPU处理一个写请求的初始分组,以在主机文件高速缓存器24或者INIC文件高速缓存器80中确定用于存储该消息的位置。还能够使文件系统配置成将INIC存储单元70或者主机存储单元66的一个位置标注为用于存储从远端主机接收的一个消息的数据目的地,从而绕开文件高速缓存器。
图2有助于大体理解本发明,它通过显示每个路径信息的基本类型,分离出图1的网络数据存储系统的信息流的主路径。图2用细箭头显示了主要由控制信息组成的信息流路径,用粗白色箭头表示了主要由数据组成的信息流路径,用粗黑色箭头表示了主要由数据和控制信息一起组成的信息流路径。需要注意的是,主机20主要涉及控制信息流,而INIC存储单元70主要涉及数据传递。
在诸如LAN/WAN25的一个网络与INIC22之间的信息流可以包括控制信息和数据,如粗黑色箭头85所示。在诸如LAN/WAN25的一个网络与INIC22之间的信息流81的一个实例包括控制信息,比如连接初始对话和确认,以及文件读或写(它作为包含封装在控制信息中的文件数据的分组发送)。定序器52处理来自文件写的控制信息,并传送来自和到达INIC帧缓存器77的数据及控制信息,所以这些传送用粗黑箭头88表示。关于帧缓存器77中存储的数据的控制信息由处理器44操作,如细箭头90所示;诸如网络连接初始化分组和会话层报头的控制信息被发送到协议堆栈38,如细箭头92所示。当主机建立一个连接时,可以在主机协议堆栈38与INIC存储器46之间传送关于诸如CCB那样的连接的控制信息,如细箭头94所示。从INIC存储单元70读出或者写入该单元的数据的临时存储由INIC文件高速缓存器80和帧缓存器77提供,如粗白色箭头96和98所示。存储在INIC文件高速缓存器80上的所有文件流的控制和知识由文件系统23提供,如细箭头91所示。在主机存储单元66不存储网络可访问数据的一个实施例中,文件系统信息在主机文件高速缓存器24与主机存储单元66之间传递,如箭头81所示。另一个实施例(图中未示出)可以不包含主机存储单元,或者作为选择,可以使用主机存储单元和主要用于网络文件传递的主机文件高速缓存器。
从图2可以看到,网络文件读或写的数据主要经过INIC22并避免经过主机20,而控制信息主要在主机和INIC之间传递。对于网络与存储器之间文件传递,控制信息与数据的分离允许主机管理流经网络与存储器之间的INIC的文件传递,同时INIC为这些文件传递提供了快速路径,从而加速数据通过量。INIC数据快速路径提供的增加的通过量允许主机和INIC除了充当一个文件服务器外,还充当(例如)用于高带宽应用(如视频)的一个数据库服务器。
图3示出了图1的系统为存储从网络接收的消息而执行的某些步骤。PHY单元58首先在INIC22上接收100来自如LAN/WAN25的一个网络的分组,MAC单元60执行链接层处理,比如验证分组对主机20寻址。然后,定序器52处理102该分组的网络、传送和任选的会话层报头,确认该分组并建立这些报头的概述。然后,将概述加到该分组上并存入104帧缓存器77中。接着,通过检验分组概述,处理器44确定106该分组是否为快速路径处理的候选者。可借助概述所指的该分组的协议简单地确定该分组是否为快速路径候选者。对于分组不是快速路径候选者的情况,经由I/O总线40将分组发送到108主机存储器33,由运行来自协议堆栈38的指令的CPU30处理该分组的报头。
对于分组是快速路径候选者的情况,将分组概述与卡所处理的一组快速路径连接进行比较110,通过将概述与CCB散列和CCB高速缓存器匹配,将每个连接表示为一个CCB。如果分组不能与INIC存储器中保存的一个CCB匹配,则把该分组发送给主机存储器,由运行来自协议堆栈的指令的CPU处理该分组的报头。对于分组是连接初始化对话的部分的情况,该分组可以用来建立115用于消息的一个CCB。反之,如果分组概述与INIC存储器中保存的一个CCB匹配,则处理器检查114也许包含例如片段或者无序分组的异常情况,如果发现这样一个异常情况,则将CCB和该分组涌到主机协议堆栈38进行协议处理。对于分组概述匹配一个CCB,但该分组目的地未指示给CCB的情况,将分组的会话层报头发送到主机协议堆栈38,根据文件系统确定122主机文件高速缓存器或者INIC文件高速缓存储器中的一个目的地,该目的地的高速缓存器地址的列表与该CCB一起被存储在INIC中。对于将造成CCB涌入主机116以及把分组发送到主机由协议堆栈处理的异常情况,INIC还检查114分组概述。
对于分组概述匹配一个CCB、并且该分组的一个目的地与CCB一起被存储、以及不存在异常情况的情况下,DMA将来自分组的数据发送125到由CCB指定的主机文件高速缓存器或者INIC文件高速缓存储器中的目的地。该情况下的消息分组绕过由主机协议处理堆栈进行的报头处理,提供快速路径数据传送。快速路径发送到INIC文件高速缓存器和INIC存储器的情况,该分组不仅免于主机的协议处理,而且还不往返于I/O总线或者主机存储器总线,从而与传统网络存储相比,节省了大量的时间、CPU处理和总线通信量。
图4显示了图1的系统执行的某些步骤,这些步骤用于响应来自如LAN/WAN25的一个网络的请求200,从主机存储单元66或者INIC存储单元70中检索一个文件或者一个文件的部分。首先,由协议堆栈处理请求分组,将该请求直接送入文件系统。文件系统查找202该请求指示的文件位置,包括确定对应于该文件的文件流是否被高速缓存在INIC文件高速缓存器或者主机文件高速缓存器中,如果文件流不在其中一个高速缓存器中,则确认对应于该文件的块或多个块是否被存储在主机存储单元或者INIC存储单元中。假定该文件流未位于其中一个高速缓存器中,则把文件块读入主机高速缓存器204或者读入INIC文件高速缓存器206。大多数情况下,主机存储单元上存储的文件块将被读入主机文件高速缓存器中,INIC存储单元上存储的文件块将被读入INIC文件高速缓存器中,但这种对应不是必须的。例如,把主机存储单元上存储的文件块读入INIC文件高速缓存器也许是理想的,以便减少主机存储器总线上的通信量。
对于文件块被高速缓存在主机文件高速缓存器中的情况,主机通过发现对应于请求的一个CCB是否由INIC保存,来确定210是否通过快速路径处理发送该文件。如果主机选择不使用快速路径而是经由慢速路径发送来自主机的文件,则CPU运行协议堆栈以建立主机文件高速缓存器中保存的数据的报头,然后把报头和校验和附加到数据上,如传统方式一样,建立通过INIC经由网络传输的网络帧212。INIC然后使用DMA从主机214中获得诸多帧,然后,INIC发送帧208到网络上。相反,如果是通过快速路径发送文件,则INIC处理器使用CCB建立报头以及校验和,并且建立来自主机文件高速缓存器的DMA帧长的多个数据段,然后将报头和校验和预先规划到诸多数据段上,以建立网络帧218,从而免除主机的协议处理。
同样,如果文件块被高速缓存在INIC文件高速缓存器中,则主机通过发现一个CCB是否由INIC保存,来确定220是否通过快速路径处理发送该文件。如果主机未选择使用快速路径22,则主机CPU准备用于文件块数据的报头和校验和,把报头存储到主机存储器中。然后,主机指令INIC通过把来自主机存储器的报头预先规划到INIC存储器中的数据上,来集合网络帧,并建立随后由INIC在网上发送的消息帧。即使对于该非快速路径情况,数据也不经过I/O总线移动到主机以及返回到INIC,与传统的通过I/O总线或者网络连接到主机的存储单元上的文件块传送相比,减少了I/O通信量。如果选择225了快速路径,则INIC处理器建立对应于CCB的报头及校验和,并且把报头及校验和预先规划到来自INIC文件高速缓存器的数据段上,以建立网络帧,然后通过INIC在网络上发送208网络帧。在该快速路径情况下,主机免除了协议处理和主机存储器总线通信量,以及免除了I/O总线通信量。
图5示出了主机经由I/O总线40连接到若干I/O INIC(包括第一INIC22)的一个网络存储系统。该实施例中的每个INIC至少连接一个网络和至少具有一个附属的存储单元。这样,第二INIC303连接到I/O总线40,并且向主机提供一个到第二网络305的接口。第一INIC22可以如上所述,实际上具有连接到几个网络的几个网络端口,第二INIC303也可以连接一个以上的网络305,但是为了清楚起见,在图中每个INIC只显示了单个网络连接。第二INIC303包含一个如SCSI适配器那样的I/O控制器,它连接到第二INIC存储单元308上。作为选择,第二INIC存储单元308可以是RAID系统,第二INIC303可以包含一个RAID控制器或者与其连接。在另一个实施例中,第二INIC303包含一个FC控制器,该控制器通过一个FC网络环路或FC适配器以及网络线路连接到第二INIC存储单元308。N个INIC可以经由I/O总线连接到主机20,如图表示为第N个INIC310。第N个INIC310包含提供一个网络接口和一个存储接口的电路和指令,这两个接口分别与第N个网络313和第N个存储单元315连接。第N个INIC310可以有几个连接几个网络的网络端口,第二第N个INIC310也可以连接一个以上网络。第N个INIC310的存储接口电路和控制指令可以包含SCSI控制器,该控制器通过SCSI电缆连接第N个INIC存储单元315。作为选择,第N个INIC存储单元315可以是RAID系统,第N个INIC310包含一个通过FC适配器和FC网络线路连接到第N个INIC存储单元315的FC控制器。
文件系统可以被安排成使网络可访问文件被存储在网络存储单元66、305或者315之一上,而不是存储在主机存储单元66上,主机存储单元66主要存放文件系统码和协议堆栈,其拷贝高速缓存在主机中。借助该结构,主机20控制网络文件传递,但是这些文件的大多数数据可以经由INIC22、303或310通过快速路径传递,而不进入主机。对于文件块在连接到同一INIC的网络和存储单元之间传递的情况,文件数据不会往返于I/O总线或者主机存储器总线。对于文件在连接到不同INIC的网络和存储单元之间传递的情况,文件块可以经由I/O总线通过DMA向或者从连接到存储单元的INIC上的一个文件高速缓存器发送,也免用了主机存储器总线。在通常避免的最坏情况下,数据可以从一个INIC传送到另一个INIC,其单向使用I/O总线传送,从而避免了主机存储器总线,而不是双向I/O总线传送从而重复传统的主机存储器总线访问。
图6显示了包括一个INIC400的网络存储系统,该INIC400提供了网络通信连接及网络存储连接,而不需要上述的INIC I/O控制器72。为了简明,主机20和有关元件被显示为与图1相同,尽管这不是必须的情况。该实例中的INIC具有连接到第一LAN414、第二LAN416、第一SAN418和第二SAN420的网络连接或者端口。网络414、416、418和420的任何一个或者全部可以根据以太网、快速以太网或者千兆以太网标准操作。千兆以太网(802.3z和802.3ab标准描述的例子)可以提供1Gb/秒或者10Gb/秒的数据传送速率,或者将来可能的更快速率。SAN418和420可以运行一个存储协议,比如TCP/IP上的SCSI或者SCSI封装协议。如J.Satran等人在名为“iSCSI(互联网SCSI)”的互联网工程任务组(IETF)的互联网设计(2000年6月)中描述了一种这样的存储协议,其较早版本名为“SCSI/TCP(TCP上的SCSI)”的互联网设计(2000年2月)。另外类似的协议,名为以太存储,已经被建议在会话层利用SCSI封装协议(SEP),在传输层利用TCP或者SAN传输协议(STP);如数据是在WAN或互联网上传输,则使用TCP;如数据是在LAN或SAN上传输,则使用STP。
主机20通过I/O总线40,如PCI总线,连接到INIC400,该I/O总线40通过诸如PCI总线接口这样的INIC I/O桥406连接INIC总线404。INIC400包括一个通过I/O总线40连接到INIC存储器410的专用处理器408。INIC存储器410包括帧缓存器430和一个INIC文件高速缓存器433。连接到INIC总线404的还有一组提供网络消息处理的硬件定序器412,所述处理包括网络、传输和会话层处理。传统的物理层硬件PHY 422提供了对LAN414和416以及SAN418和420的物理连接。每个PHY422单元连接到媒体访问控制(MAC)424的一个对应单元,每个MAC单元在INIC400与一个网络之间提供一数据链路层连接。
图7显示SAN418包括一个千兆以太网线路450,以太网线路450被连接在INIC400与第一以太网SCSI适配器452、第二以太网SCSI适配器454、第三以太网SCSI适配器456之间。以太网SCSI适配器452、454和456可以建立或断开TCP连接,发送SCSI命令到INIC400或者从INIC400接收SCSI命令,以及经由线路450发送数据到INIC400或者从INIC400接收数据。第一存储单元462通过第一SCSI电缆458连接到第一以太网SCSI适配器452。同样,第二存储单元464通过第二SCSI电缆459连接到第二以太网SCSI适配器454;第三存储单元466通过第三SCSI电缆460连接到第三以太网SCSI适配器456。存储单元462、464和466由各自的适配器452、454和456根据SCSI标准进行操作。每个存储单元可以包含多个磁盘驱动器,它们被菊链到各自的适配器上。
图8显示了第一以太网SCSI适配器452的细节,在该实施例中,该适配器是一个类似于图1所示的INIC。适配器452具有一个单网络端口,该端口通过传统的PHY472提供到网络线路450的物理层连接,并且通过传统的MAC472提供媒体访问。包括上层处理的网络消息分组报头的处理由定序器475提供,该定序器475经由适配器总线477连接到处理器480和适配器存储器482。适配器存储器482包括帧缓存器484和一个文件高速缓存器486。连接到适配器总线477的还有一个SCSI控制器,它通过SCSI通道458连接到第一存储单元462。
适配器452与INIC20之间的一个差别是其不必需连接到具有处理慢速路径消息的CPU和协议堆栈的主机。在此情况下,连接建立可由适配器452处置,例如,在连接初始化对话期间,由INIC400发送一个初始分组给适配器452,该分组由定序器475处理,然后发送给处理器480以建立一个CCB。需要由运行软件协议堆栈的CPU进行慢速路径处理的某些情况在适配器452与INIC400之间的通信环境中可能很少发生。适配器452与INIC400之间发送的消息根据协议层(比如SCSI/TCP和简单网络管理协议(SNMP))的单集或者有限集来构造,并且发送到或者从单一源发送到单个或者有限数目的目的地。减少造成传统通信网络复杂化的许多变量导致使用快速路径处理的增加,从而减少了适配器452上差错处理的需要。适配器452可以在IP和TCP上具有处理一些类型存储协议的能力,为此适配器452可以连接到使用这些网络存储协议之一的主机而不是连接到INIC400。对于网络450不是专用于存储传递而是还处理通信业务的一个SAN的情况,可以使用一INIC连接到主机(具有一个运行用于慢速路径分组的协议堆栈的CPU),而不使用适配器452。
如图9所示,可以经由I/O总线40把类似于INIC400的附加的INIC连接到主机20,每个附加INIC提供附加的LAN连接和/或被连接到附加SAN上。多个INIC由第N个INIC490表示,第N个INIC490连接到第N个SAN492和第N个LAN494。对于附属主机20的多个INIC,主机可以控制多个存储网络;对于大多数流入并流出绕开主机协议处理的由主机控制的网络的数据,经由I/O总线传输,经由主机总线传输,并且存储在主机存储器中。
图10更详细地显示了图1的INIC22从诸如网络25的一个网络接收的消息分组的处理。所接收的消息分组首先进入媒体访问控制器60,该控制器60控制INIC访问网络和接收分组,并且可以提供网络协议管理的统计信息。来自控制器60的数据每次一字节流入汇编寄存器500,在该实例中汇编寄存器为128比特宽度。数据由快速(fly-by)定序器502分类(下面将结合图11进行详细解释),该定序器502快速检查分组字节,并因此生成将用来概述分组的状态。多路复用器505将如此建立的状态与数据合并,并且将合成的数据存储在SRAM508中。分组控制定序器510监视快速定序器502,检查来自媒体访问控制器60的信息,对数据的字节计数,生成地址,传送状态并且管理数据从汇编寄存器500到SRAM508最终到达DRAM512的传送。分组控制定序器510经由SRAM控制器515管理SRAM508中的缓存器,并且,当数据需要从SRAM508传送到DRAM512的缓存器时还向DRAM控制器518指示。一旦分组的数据传送已经完成以及所有数据已经被传送到DRAM512的缓存器中,分组控制定序器510就将在快速定序器502中生成的状态移出到SRAM508和DRAM512缓存器的开头,以预先规划分组数据。分组控制定序器510请求一个队列管理器520把一个接收缓存器描述符输入到一个接收队列上,向处理器44通知所述分组已经被硬件逻辑处理和其状态已经进行了概述。
图11显示了快速定序器502具有若干层,每个层通常集中在分组报头的一个特定部分上,因而是集中在一个特定协议层上,用于生成属于该层的状态。本实施例中的快速定序器502包括一个媒体访问控制定序器540,一个网络定序器542,一个传输定序器546和会话定序器548。可以另外提供属于较高协议层的定序器。快速定序器502由分组控制定序器510复位,由分组控制定序器给定的指针告诉快速定序器一个给定字节是否可以从汇编寄存器500处得到。媒体访问控制定序器540通过查看字节0-5确定分组到达主机20而不是另一个主机。分组的分支12和13也由媒体访问控制定序器540处理,以确定类型字段,例如,确定分组是以太网或者802.3。如果类型字段是以太网,则这些字节还告诉媒体访问控制定序器540该分组的网络协议类型。对于802.3,这些字节改为指示整个帧的长度,并且媒体访问控制定序器540将检查进一步进入分组的八个字节,以确定网络层类型。
对于大多数分组,网络定序器542检验所接收的报头长度具有恰当长度,并且对网络层报头求校验和。对于快速路径候选者,依据媒体访问控制定序器540所作的分析来得知网络层报头是IP或者IPX。假定类型字段是802.3并且网络协议是IP,则网络定序器542分析从字节22开始的网络层报头的第一字节,以便确定IP类型。IP报头的第一字节将由网络定序器542处理,以确定分组包含什么IP类型。当确定分组包含例如IP版本4时,由网络定序器542指导进一步的处理,该网络定序器542还查看将10个字节定位到IP报头中的协议类型,该报头用于显示分组的传输报头协议。例如,对于以太网IP,IP报头从分支14开始,并且协议类型字节是分支23,网络逻辑将对它们进行处理,以确定传输层协议,例如,是否为TCP。网络定序器542依据网络层报头(通常是20-40字节)确定验证传输层报头的分组传输层报头的起始处。传输定序器546可以生成传输层报头和数据的校验和,在TCP情况下该校验和至少包括来自IP报头的信息。
继续一个TCP分组的例子,传输定序器546还分析报头的传输层部分最初的几个字节,从而部分地确定消息的TCP源和目的地端口,比如分组是NetBios还是其它协议。TCP报头的字节12由传输定序器546处理,以确定和验证TCP报头长度。TCP报头的字节13包含一些标志,除了询问标志和推(push)标志外,其它标志可以指示意外选项,比如复位和散热(fin),这些意外选项可能导致处理器把该分组归为意外情况。TCP分支字节16和17是校验和,由硬件逻辑取出和存储该校验和,同时对照该校验和检验帧的剩余部分。
会话定序器548确定会话层报头的长度,在NetBios情况下,所述长度仅为4字节,其中的2字节告知NetBios有效载荷数据,但是对于其它协议可能大的多。会话定序器548也可以用来例如把消息类型分类为读或者写,由此对快速路径可能是特别有利的。分组控制定序器510和快速定序器502的硬件逻辑基于消息类型进一步执行上层逻辑处理。这样,定序器52通过分类从字节的单向流选用的字节,借助依据快速确定的分类建立的分组状态智能地指导报头硬件处理。一旦分组控制定序器510检测到快速定序器502已经处理了所有分组,分组控制定序器510就添加由快速定序器502生成的状态信息以及由分组控制定序器510生成的任何状态信息,并把状态信息预先规划分组上(加到前面),以方便处理器44处理分组。分组控制定序器510生成的附加状态信息包括媒体访问控制器60的状态信息和所发现的任何错误,或者汇编寄存器或DRAM缓存器中的数据溢出,或者关于分组的其它杂项信息。分组控制定序器510还经由队列管理器520把一些项目存储到接收缓存器队列和接收统计队列中。
分组硬件逻辑处理一个分组的优点是,与传统的序列软件协议处理相比,不需要从处理每个协议层报头的存储器进行存储、移动、复制或者取出的处理,使处理效率明显增加,并且节省了每个分组的处理时间。可以按照从网络接收比特的速率处理分组,例如,对于100baseT连接达到100兆比特/秒的速率。分类按此速率接收并具有60字节长度的一个分组的时间约为5微妙。硬件逻辑处理该分组以及经快速路径发送分组数据到主机的总时间小于利用传统的序列软件协议处理的一个传统CPU所需的数量级,这里甚至不考虑因减少CPU中断和节约主机总线带宽而节约的额外的时间。对于目的地驻留在INIC高速缓存器中的情况,实现了主机总线35和I/O总线40的附加带宽节省。
对于保存在帧缓存器77中的每个所接收的消息分组,处理器44决定该分组是否为快速路径的候选者,如果是,则检查看是否已经建立了该分组适于连接的快速路径。为此,处理器44首先检查报头状态概述,以确定分组报头是定义快速路径候选者的协议的报头。如果不是,处理器44则命令INIC22中的DMA控制器发送该分组给用于慢速路径处理的主机。即使对于一个消息的慢速路径处理,INIC22也这样执行起始过程,比如消息类型的验证和确定,并且至少把验证后的消息传送到主机的数据链路层。
对于快速路径候选者,处理器44查看报头状态是否与INIC中所保存的一个CCB匹配。如果是,则沿着快速路径将分组的数据发送到主机中的目的地168。如果快速路径候选者的分组概述不匹配INIC中所保存的CCB,则可以把分组发送到用于慢速路径处理的主机,以建立消息的CCB。对于破碎的消息或者其它复杂情况,则不使用快速路径。然而对于大多数消息,INIC快速路径可以极大地加快消息处理。因此,INIC22根据快速收集的信息,提供决定是否直接发送数据给其目的地的单一状态机构处理器44,这与传统的如确定一个给定分组的命运在一些协议层之每个协议层中均使用一个状态机构的情况不同。
在INIC的散列表中高速缓存的CCB提供了与概述输入分组的字的快速比较,以确定是否可以经由快速路径处理所述分组,同时还将全部CCB保存在用于处理的INIC中。加快该比较的其它方式包括软件处理,比如B-tree或者诸如内容可寻址存储器(CAM)的硬件帮助。当INIC微码或者比较器电路检测到一个与CCB匹配,则DMA控制器把分组的数据放入主机存储器33或者INIC文件高速缓存器80中的目的地,而不需要CPU的任何中断、协议处理或者复制。根据所接收的消息类型,数据目的地可以是主机20、主机文件高速缓存器24或者INIC文件高速缓存器80中的会话层、表示层或者应用层。
传递大消息(如文件)的最常用的网络协议之一是TCP/IP上的服务器消息块(SMB)。SMB可以结合转向器软件操作,所述转向器软件确定特定操作的所需资源(比如,在其上写入文件的打印机或者磁盘)是否存在于主机(主机产生所述操作)上或者与其相关联或者定位在连接到网络的另一个主机(比如,文件服务器)上。SMB和服务器/转向器通常由传输层服务;在本发明中,SMB和转向器可以改为由INIC服务。在此情况下,在接收大SMB传送时,由DMA控制器发送来自INIC缓存器的数据可以极大地减少主机必须实行的中断。此外,该DMA通常传送数据到主机文件高速缓存器24或者INIC文件高速缓存器80中的目的地,由此按块将所述数据分别涌入主机存储单元66或者INIC存储单元70。
SMB快速路径传送通常与上述的SMB快速路径接收相反,从主机存储单元66或者INIC存储单元70读出的数据块分别送到主机文件高速缓存器24或者INIC文件高速缓存器80,同时由INIC将有关协议报头预先规划到所述数据上,用于经由网络线路传送到远端主机。由多分组、多TCP、IP、NetBios和SMB协议层的INIC经由用户硬件并且不重复主机中断的处理可以极大地增加发送一个SMB消息到一个网络线路的速度。如结合图4所述的那样,对于所发送的文件块被存储在INIC存储单元70上的情况,可以实现主机总线35带宽和I/O总线带宽40的附加节约。
图12显示了用于处理网络消息的由与INIC连接的主机(都未示出)使用的Alacritech协议堆栈38。INIC装置驱动器560将INIC链接到主机的操作系统,并能在INIC和协议堆栈38之间传递通信。本实施例中的协议堆栈38包括数据链路层562、网络层564、传输层566、上层接口568和上层570。上层570可以代表依赖于所使用的特定协议和所传递的消息的一个会话层、表示层和/或应用层。协议堆栈38处理慢速路径中的分组报头,建立和断开连接,把用于快速路径连接的CCB交给INIC,并接收从INIC涌入到主机20的快速路径连接的CCB。上层接口568通常负责集合CCB,它基于数据链接层562、网络层564和传输层566所建立的连接和状态信息,并且经由INIC装置驱动器560把CCB交给INIC,或者经由INIC装置驱动器560接收从INIC涌入的CCB。
图13显示了Alacritech协议堆栈38的另一个实施例,该协议堆栈38包括与Microsoft操作系统一起处理网络通信的多个协议堆栈。传统的微软TCP/IP协议堆栈580包括MAC层582、IP层584和TCP层586。命令驱动器590与主机堆栈580合作处理网络消息。命令驱动器590包括MAC层592、IP层594和Alacritech TCP(ATCP)层596。传统堆栈580和命令驱动器590共享网络驱动接口规范(NDIS)层598,该NDIS层598与INIC装置驱动器570相互作用。INIC装置驱动器570分类由传统主机堆栈580或者ATCP驱动器590处理的接收指示。TDI滤波器驱动器和上层接口572相似地确定从TDI用户575发送到网络的消息是转送到命令驱动器,或许转送到INIC的快速路径,还是由主机堆栈处理。
图14示出了在具有INIC的服务器600与客户机602之间的SMB交换,每个INIC保存定义它的连接和在网络604上数据的快速路径传输状态的CCB,所述网络604可以是千兆以太网顺从网络。客户机602包括INIC606,802.3顺从数据链路层608,IP层610,TCP层611,ATCP层612,NetBios层630,SMB层632。服务器配属存储单元634经并行通道638(比如SCSI通道)连接到服务器600,并行通道638连接I/O总线639,总线639还连接到INIC622。网络存储单元640经由网络线路644连接到INIC622,以及NAS存储单元642连接到同样的可以是顺从千兆以太网的网络644。服务器600具有用于通信处理的慢速路径646和快速路径648,所述通信处理经由I/O总线638在INIC622与文件高速缓存器之间传送(图中未示出)。
INIC622在服务器控制下提供存储快速路径,用于在网络存储单元640或者642与不经过I/O总线的客户机602之间传递的数据。在INIC622与网络存储单元640之间根据块格式比如SCSI/TCP或者ISCSI进行数据通信,而在INIC622与NAS存储单元642之间根据文件格式比如TCP/NetBios/SMB传递数据。对于存储快速路径,INIC622可以保存确定与存储单元640或者642连接的另一个CCB。为了下面的讨论简便,由INIC606保存的确定经由网络604连接服务器600的CCB被称之为客户机CCB。由INIC622保存的确定经由网络604连接客户机602的CCB被称作服务器CCB。由INIC622保存的确定经由网络644连接网络存储单元640的CCB被称之为SAN CCB。由INIC622保存的确定经由网络644连接NAS存储单元642的CCB被称作NAS CCB。附加网络线路650和652可以连接到其它通信和/或存储网络。
假如客户机602希望在服务器600上读取以块形式存储在网络存储单元640中的100KB文件,那么客户机经由网络604首先发送一个SMB读请求,请求服务器上该文件的第一64KB。该请求(例如)可能仅是76字节,服务器上的INIC622确认消息类型(SMB)和较小的消息大小,并直接向ATCP滤波层628发送该76个字节,将所述请求发送到服务器的NetBios 630。NetBios 630把会话报头传送到SMB632,SMB处理读请求并确定所请求的数据是存储在主机中还是存储在INIC文件高速缓存器中。如果所请求的数据不是存储在文件高速缓存器中,SMB向文件系统发出一个读请求从网络存储单元640读出数据到INIC622文件高速缓存器。
为了执行该读取,文件系统指令INIC622从网络存储单元640中提取数据的64KB并送入INIC622文件高速缓存器。INIC622随后经由网络644向网络存储单元640发送一数据请求。根据ISCSI或者相似的协议,请求可以采取给存储单元640一个或多个SCSI命令的形式以读取数据块,该命令附加在TCP/IP报头上。存储单元640上的控制器通过从它的一个或多个磁盘驱动器读取所请求的块来响应该命令,把ISCSI或者类似的协议报头添加到数据块或者数据块的帧大小的部分上,并且经由网络644把合成帧发送到INIC622。所述帧由INIC622接收,由INIC622定序器处理,与存储CCB匹配,并且在INIC622文件高速存储器中重新集合为64KB文件流,形成所请求的100KB文件的一部分。一旦文件流被存储到INIC622文件高速缓存器上,SMB就构成一个读答复并向INIC622发送一个表示该文件流的分散-聚集列表,并且发送该答复给INIC622,以便根据服务器CCB经由网络发送数据。INIC622利用分散-聚集列表从它的文件高速缓存器中读取数据分组,所述分组用IP/TCP/NetBios/SMB报头预先规划,所述报头由INIC根据服务器CCB建立,然后把合成帧送入网络604上。文件的剩余36KB通过相似方式发送。在此方式中,网络存储单元上的文件可以在服务器控制下传递,而且来自文件的任何数据不会经过I/O总线或者服务器协议堆栈。
对于在NAS存储单元642上存储的由客户机602请求的数据的情况,该请求可以从服务器600传送到存储单元642,存储单元642通过发送具有对客户机602寻址的报头的数据进行答复,这样服务器600充当了一个路由器。对于服务器600被实施为一个代理服务器或者万维网高速缓存服务器的实施例,来自NAS存储单元642的数据可以改为发送到服务器600,服务器600在它的文件高速缓存器中存储数据,以提供对该数据将来请求的快速响应。在该实施例中,服务器600上的文件系统指导INIC622请求NAS存储单元642上的文件数据,存储单元642通过发送一组包含文件数据的第一64KB的大约1.5KB的分组来答复。包含文件数据的多个分组由INIC622接收,由INIC接收定序器分类,并且与NAS CCB匹配,并且由主机堆栈处理来自初始分组的会话层报头,从文件系统中获得INIC622文件高速缓存器中的地址分散-聚集列表,以存储来自分组的数据。分散-聚集列表由主机堆栈发送到INIC622并与NAS CCB一起存储,INIC622从累积分组和对应于NAS CCB的后续分组中形成DMA数据,将其送入INIC622文件高速缓存器中,以作为符合分散-聚集列表的文件流。主机文件系统随后指导INIC622根据客户CCB建立报头,并把报头预先规划到从文件流读出的数据分组上,用于发送该数据到客户机602。文件的剩余36KB按照相同方式发送,并且可以被高速缓存到INIC622文件高速缓存器上,以作为另一个文件流。借助INIC622文件高速缓存器中保存的文件流,可以更快地处理来自如客户机606的客户机的文件后续请求。
对于客户机602请求的文件未呈现在一个高速缓存器上,而是在服务器所附属的存储单元634上被存储为文件块的情况,服务器622文件系统指令一个主机SCSI驱动器从服务器配属存储单元634中提取数据的100KB并送入服务器600文件高速缓存器(假定文件系统不希望把数据高速缓存在INIC622文件高速缓存器中)中。主机SCSI驱动器随后经由SCSI通道638向服务器配属的存储单元634发送一个数据的SCSI请求。服务器配属存储单元634的控制器通过从它的一个或多个磁盘驱动器读取所请求的数据块并经由SCSI通道向SCSI驱动器发送该数据块来响应该命令。该SCSI驱动器在文件系统控制下与高速缓存器相互作用,以把数据块存储为服务器600文件高速缓存器中的文件流。系统转向器随后指导SMB向INIC622发送文件流的分散-聚集列表,INIC622使用该列表从服务器600文件流中读取数据分组。INIC622用基于服务器CCB建立的报头预先规划数据分组,并发送合成帧到网络604上。
由于有了在该答复到达时在客户机602上操作的INIC606,因此,INIC606依据所接收的第一帧确认该连接正在接收快速路径620处理(TCP/IP、NetBios,匹配一个CCB),SMB616可以使用该第一帧获得消息的缓存器空间。通过经由直达客户机NetBios的ATCP快速路径620传送包括NetBios/SMB报头的帧的第一192字节,可以提供缓存器的分配。所述客户机NetBios 614给予NetBios/SMB合适的报头。NetBios/SMB将分析这些报头,通过用请求ID进行匹配来识别这些报头,这是对原始读取连接的一个答复,并且给予ATCP命令驱动器一个放入数据的客户机高速缓存器中多个缓存器的64K列表。在此阶段,只有一帧已经到达,尽管在该处理发生的同时可能有更多帧到达。当给予ATCP命令驱动器628所述客户缓存器列表时,就把该传递信息传送到INIC606,然后INIC606开始发送已经由DMA累积到这些缓存器中的任何帧数据。
如果客户机602希望把SMB文件写到服务器600上,则经由网络604发送一个写请求,它可以与INIC622所保存的CCB相匹配。来自文件写的初始分组的会话层报头由服务器SMB632处理,以把一些缓存器分配到服务器600或者INIC622文件高速缓存器中;如果快速路径处理是合适的,这些缓存器的地址的分散-聚集列表被返回到INIC622。包含SMB文件数据的分组由INIC622接收,由INIC接收定序器分类,并且按一个队列放置。INIC622处理器根据分散-聚集列表确认分组对应于服务器CCB和DMA分组数据,该分组数据进入INIC622或者服务器600文件高速缓存器。
文件系统随后协调向服务器存储单元634、网络存储单元640或者NAS存储单元642发送文件流。为了向服务器存储单元634发送文件流,文件系统命令服务器600中的SCSI驱动器向存储单元634按文件块发送文件流。为了向网络存储单元640发送文件流,文件系统指导INIC基于SAN CCB建立ISCSI或者类似报头,根据分散-聚集列表把这些报头预先规划到从文件系统读出的分组上,经由网络644向存储单元640发送合成帧。为了向NAS存储单元642发送文件流(例如,在分布式文件高速缓存器或者代理服务器实施中也许是有用的),文件系统转向器预先规划NetBios/SMB报头,并且指导INIC根据NASCCB建立IP/TCP报头,以及根据分散-聚集列表把这些报头预先规划到从文件流读出的分组上,经由网络644向存储单元642发送合成帧。
图15示出了类似于图14所述的一个系统,但是图15针对的是本发明的用户数据报协议(UDP)实施,特别是音频和视频通信的上下文,可能包含实时传输协议(RTP)和实时传输控制协议(RTCP)。服务器600除了包括图14所示的协议层外,还包括一个UDP层654,一个AUDP层655,一个RTP/RTCP层656和一个应用层657。同样,客户机602除了包括图14所示的协议层外,还包括一个UDP层660,一个AUDP层661,一个RTP/RTCP层662和一个应用层663。尽管图15显示了RTP/RTCP层656和662,可以在UDP上使用其它会话和应用层协议,比如会话起始协议(SIP)或者媒体网关控制协议(MGCP)。
音频/视频接口(AVI)666或者类似的外围装置连接到服务器600的I/O总线639上,连接AVI666的有一个扬声器668、一个麦克风670,一个显示器672和一个相机674(可以是摄像机)。尽管为了清楚起见,AVI666被显示为一个单接口,但是也可以换成包括分离的接口,比如一个声卡和一个显卡,其每个连接I/O总线639。在另一个实施例中,AVI接口连接一个主机,而不是连接一个I/O总线,并且可以同存储器控制器或者主机CPU的I/O控制器集成在一起。AVI666可以包括一个存储器,充当音频或者视频数据的临时存储单元。客户机602还具有一个I/O总线675,它与AVI677相连接。连接AVI677的是一个扬声器678,一个麦克风680,一个显示器682和一个相机684(可以是一个摄像机)。尽管为了清楚起见AVI666被显示为一个单接口,但是也可以换成包括分离的接口,比如一个声卡和一个显卡,其每个连接I/O总线675。
不同于TCP,UDP不提供一个可依赖的连接。而是,尽力而为地发送UDP分组,并且不重发出错的或者损坏的分组,除非UDP上的一个层提供了这样的服务。UDP提供了一种不必建立连接而经由IP发送数据的应用方式。然而,UDP或者其它协议,比如网络文件系统(NFS)、TCP、RTCP、SIP或者MGCP,响应一个请求最初指定一个套接字,该套接字分配一个能够接受由UDP发送的消息的接收装置的端口。
为了经由UDP按传统方式发送通信,主计算机借助一个UDP报头预先规划多达64KB的数据报并传递给IP层,所述数据报可以包括会话或者应用层报头并且通常是多达8KB的NFS默认长度数据报。UDP报头包括源和目的地端口以及一个选项校验和。对于以太网传输,UDP数据报在必要的时候,由IP层分成近似1.5KB的片段,用IP报头预先规划,并且给出用以太网报头和报尾封装的MAC层,然后发送到网络上。IP报头包括一个UDP数据报才有的IP标识字段(IP ID);一个指示该数据报的更多片段是否跟随的标志字段;和指示数据报的1.5KB片段被附加到IP报头上的片段分支字段,用于以正确顺序重新集合这些片段。
对于从客户机602到服务器600的快速路径UDP数据传递,例如,来自客户应用663或者音频/视频接口677的数据的文件流可以在文件系统的控制下,存储到INIC606的存储器上。应用663可以安排所述文件流,使其包含例如约8KB,可以包括INIC606在应用663指导下获得的上层报头,INIC606用已经指定的套接字相符的UDP报头预先规划由INIC606接收的每个文件流,建立UDP数据报。UDP数据报被INIC606划分成6个1.5KB消息片段,每个消息片段用IP和MAC层报头预先规划,以建立在网络上传输的IP分组。
INIC622从网络604接收由INIC606发送的以太网帧,对报头求校验和并进行处理,以确定所含有的协议,并且向ADUP层655发送UDP和上层报头,以获得UDP数据报的分组数据的目的地地址的列表。在来自UDP数据报的6个分组的一个分组中,包含UDP和上层报头,该分组通常在数据报的其它分组之前被接收。在分组无序到达的情况下,INIC在一个重新汇编缓存器中将来自UDP数据报的6个分组进行排队。根据分组的IP ID识别对应于UDP数据报的分组,并且根据片段分支链接这些分组。在处理包含UDP和上层报头的分组以获得目的地地址之后,将已排队的数据写入这些地址。为了解决UDP数据报的所有分组未到达的可能情况,INIC622可以使用一个定时器触发丢弃所接收的数据。
对于实时音频或者视频通信,最初在服务器600与客户机602之间建立电信连接。对于根据国际电信联盟(ITU)H.323标准的通信,借助一个TCP对话执行电信连接的建立,该TCP对话使用RTP指定数据流的源和目的地UDP端口。电信连接建立的另一个TCP对话使用RTCP指定监视数据流的源和目的地UDP端口。在指定了UDP套接字之后,可以开始本发明的从服务器600到客户机602的声频或者视频数据的传输。
例如,音频/视频接口666可以把来自麦克风670和摄像机674的声音和图像转换成对INIC622有效的音频/视频(AV)数据。在服务器600文件系统指导下,INIC622可以获得包含RTP报头的AV数据的8KB文件流并把数据存储在一个INIC文件高速缓存器。根据电信连接,INIC622可以把UDP报头预先规划到每个文件流上,然后分段成1.5KB片段,每个片段用IP和以太网报头预先规划并在网络604上传送。作为选择,INIC622可以从INIC存储器中存储的AV数据中建立1.5KB UDP数据报,避免分段,并允许相应于该电信连接从INIC622保存的一个模板中同时建立UDP、IP和MAC层报头。它还能够用AV数据建立大于8KB的UDP数据报,从而建立了附加片段,然而却可以在每个数据段传递更大的数据块。RTP报头包含一个时标,以指示由音频/视频接口666对AV数据分组的有关时间。
与主机CPU进行的传统AV数据的协议处理相比,INIC622可以卸载UDP报头建立、IP分段和IP报头建立的任务,节省了主机CPU多处理周期、多中断并极大地减少了主机总线通信量。此外,INIC622通过同时预先规划多个报头,可以更有效地执行报头建立任务。此外,AV数据可以有INIC622在I/O总线639上直接访问,而不是首先经由I/O总线向协议处理堆栈发送数据,然后经由I/O总线639回送作为RTP/UDP/IP分组的数据。与传统协议处理相比,这些效率优点还可以极大地减少传送AV数据的延迟。
实时话音和视频通信的一个目的是使经由系统的个人通信基本上感觉不到延迟和抖动。抖动是接收分组时延迟的变化造成的,与记录声音和图像的节奏相比,抖动导致显示声音和图像的节奏发生变化。传送分组的话音和/或视频时减少延迟的上述优点还可以用来减少也在接收装置上经历缓存的抖动,因为减少延迟能够增加接收装置平滑抖动的时间。为了在传递AV数据时进一步减少延迟和抖动,INIC622预先规划到UDP数据报片段上的IP或者MAC层报头在其服务类型字段中包括一个高服务质量(QOS)指示。例如,通过优先分配带宽和对高QOS帧排队,网络604使用该指示加速高QOS帧的传输。
当INIC606接收含有AV数据的帧时,INIC606接收逻辑给QOS指示加标签并且按照INIC606的一个高优先接收队列缓存这些分组。与IP/UDP报头的传统处理相比,INIC606的硬件逻辑对分组报头分类和确认减少了接收AV数据的延迟。每个数据报的UDP报头可以被发送到AUDP层,该AUDP层处理报头并且把所含有的套接字指向所述应用。所述应用指导INIC606向音频/视频接口677的目的地发送对应于该UDP报头的数据。作为选择,在对应于UDP数据报的所有片段连接以接收队列之后,按照一个文件流写入数据报,而不需要把UDP报头送入对应于套接字的音频/视频接口677中的目的地。最初可以把UDP数据报随意地存入INIC存储器的其它段中。然后把AV数据和RTP报头发送到音频/视频接口677,进行解码,然后在扬声器678和显示器682上播放。
需要注意的是,整个AV数据流以及所接收IP/UDP分组的大多数协议处理可以由INIC606处置,从而节省了客户机602的CPU多处理周期并减少了主机总线通信量和中断。此外,INIC606的专用硬件逻辑可以比通用CPU更有效地分类报头。INIC602还可以经由I/O总线675直接向音频/视频接口677提供AV数据,而不是,首先经由I/O总线675向协议处理堆栈发送,然后经由I/O总线返回到音频/视频接口677。
图16提供了INIC22的示意图,该INIC22把网络接口、存储控制器和协议处理器合并到一个单一ASIC芯片700中。本实施例中的INIC22提供了一个全双工、四通道、10/100Mb/秒(Mbps)智能网络接口控制器,是为服务器的高速协议处理和网络存储应用设计的。INIC22还可以在利用TCP/IP、TTCP/IP、SPX/IPX协议的任何地方连接个人计算机、工作站、路由器或者主机。本申请开头部分所列出的相关应用中还提供了这样一个INIC的说明。
INIC22由网络连接器连接到四个网络线路702、704、706和708上,这样可以沿着多个不同线路(比如双绞线、同轴电缆、光缆)传输数据,每一个连接经由商用物理层芯片712、714、716和718(比如模块80220/80221以太网媒体接口适配器,产自SEEQ TechnologyIncorporated,47200 Bayside Parkway,Fremont,CA94538)提供一个媒体独立接口(MII)。线路最好符合802.3标准,在此方面,INIC构成四个完整的以太网节点,该INIC支持10Base-T、10Base-T2、100Base-TX、100Base-FX和100Base-T4以及未来接口标准。物理层标识和初始化通过主机驱动器初始化程序实现。网络线路702、704、706、708与INIC22之间的连接由MAC单元MAC-A 722、MAC-B 724、MAC-C 726和MAC-D 728控制,这些MAC单元包含执行MAC子层基本功能的逻辑电路,主要是在INIC访问网络线路702、704、706和708时进行控制。MAC单元722、724、726、728可以以杂乱、多点传送、单点传送方式运作,允许INIC充当一个网络监视器、接收广播和多点传送分组并实施每个节点的多MAC寻址。MAC单元722、724、726和728还提供用于简单网络管理协议(SNMP)的统计信息。
MAC单元722、724、726和728中的每一个均连接到发送和接收定序器,XMT&RCV-A 732、XMT&RCV-B 734、XMT&RCV-C 736和XMT&RCV-D738。每个发送和接收定序器在消息帧通过该定序器时可以快速执行一些协议处理步骤。与MAC单元结合,发送和接收定序器732、734、736和738可以在硬件中编制数据链路层、网络层、传输层、会话层和(如果适当)表示层以及应用层协议的分组状态,与传统序列软件引擎相比,极大地减少了执行这种协议处理的时间。发送和接收定序器732、734、736和738连接到SRAM和DMA控制器740,包括DMA控制器742和SRAM控制器744,用于控制静态随机存取存储器(SRAM)缓存器748。SRAM和DMA控制器740与外部存储器控制器750相互作用,以经由外部存储器总线向动态随机存取存储器(DRAM)缓存器755发送帧以及从缓存器755接收帧,缓存器755位于IC芯片700附近。DRAM缓存器755可以被配置为4MB、8MB、16MB或者32MB,并且可以随意地设置在芯片上。SRAM和DMA控制器740连接I/O桥,在此情况下,该I/O桥是PCI总线接口单元(BIU)756,它管理INIC22与PCI接口总线757之间的接口。64-比特的被多路复用的BIU756向主从功能的PCI总线757提供一个直接接口。INIC22能够在64-比特或者32比特PCI环境下操作,同时支持任何一种配置的64比特寻址。
微处理器780连接到SRAM和DMA控制器740以及连接到PCI BIU756。微处理器780指令和注册文件驻留在芯片控制存储器781中,存储器781包括SRAM的片内可写控制存储器(WCS)和一个只读存储器(ROM)。微处理器780提供了一个可编程状态机,它能够处理输入帧,处理主机命令,指导网络通信和指导PCI总线通信。三个处理器采用三级流水线式结构的共享硬件实现,所述的三级流水线式结构每时钟周期发射和完成一个单指令。接收处理器782主要用于接收通信,而发射处理器784主要用于发送通信,以便于全双工通信;应用处理器786提供各种功能,包括监视和控制PCI寄存器访问。
由于处理器782、784和786的指令驻留在片内控制存储器781中,因此可以容易地重新定义三个处理器的功能,使微处理器780可以适用于给定的环境。例如,接收功能所需的处理量可以多于发射或者应用功能所需的处理量。在此情况下,某些接收功能可以由发射处理器784和/或应用处理器786执行。另一方面,可以建立流水线式处理的一个附加层,以产生4个或更多虚拟处理器(而不是三个),该附加层专用于接收功能。
该实施例中的INIC22可以支持保存在DRAM755的一个表中的256个CCB。然而,这还是一种节省顺序搜索的SRAM748中的散列顺序的CCB索引。一旦产生一个散列,就在SRAM中高速缓存该CCB,在本实施例中,SRAM中有多达16个高速缓存的CCB。SRAM中高速缓存的16个CCB的分配由下面将要说明的最新使用的寄存器操作。这些高速缓存器位置在发送784处理器与接收786处理器之间共享,所以较重负载的处理器能够使用更多的高速缓存器。这里还有在定序器之间共享的8个报头缓存器和8个命令缓存器。当链接是每帧动态变化时,给定的报头或者命令缓存器不静态链接到特定CCB缓存器上。
图17显示了流水线式处理器780的概要,其中接收、发送和应用处理器的指令在与时钟增加I、II、III相应的三个交替阶段运行,这些阶段位对应于流水线的每一阶段。每个阶段负责不同的功能,并且,三个处理器中的每一个在每个时钟增加期间占据一个不同阶段。每个处理器通常根据来自控制存储器781的一个不同指令流操作,并且承载它自己的程序计数器以及经过每个阶段的状态。
通常,流水线式微处理器组的第一指令阶段800完成一个指令并存储目的地操作数的结果,取回一个指令,并把下一个指令存储到一个指令寄存器中。第一寄存器集790提供包括指令寄存器的多个寄存器,第一寄存器集的一组控制792向第一寄存器集提供用于存储的控制。某些项目通过第一阶段时不会被控制792修改,而是被简单地复制到第一寄存器集790或者RAM文件寄存器833中。第二指令阶段860具有一个指令解码器及操作数多路复用器798,它通常对存储在第一寄存器集790的指令寄存器中的指令进行解码并收集已经生成的任何操作数,然后存储到第二寄存器集796的解码寄存器中。第一寄存器集790、第二寄存器集796和在第三指令阶段900中使用的第三寄存器集801包括许多相同的寄存器,这可以从图18A-C的更详细视图中看到。指令解码器和操作数多路复用器798可以从RAM文件寄存器833的两个地址及数据端口选读,该RAM文件寄存器833在第一阶段800和第二阶段860中操作。处理器780的第三阶段900具有一个算术逻辑单元(ALU)902,它通常对来自第二寄存器集的操作数进行任何一种ALU运算,将运算结果存储到第三寄存器集801所包含的一个结果寄存器中。堆栈交换器808可以重新排序寄存器堆栈,排队管理器803可以安排处理器780的队列,将结果存储到第三寄存器集中。
指令从第三阶段继续到第一阶段,如环行流水线805所示。需要注意的是,各种功能已经被分布在指令运行的三个阶段上,以便使任何一个给定阶段内的组合延迟最小化。由于该实施例中的频率为66MHz,因此每个时钟增量需用15纳秒完成,总共需用45纳秒时间来完成三个处理器之每个的一个指令。图18A-C中更详细地示出了旋转指令阶段,其中每个阶段被显示在不同的图中。
具体说,图18A显示了第一阶段的某些特殊硬件功能,第一阶段通常包括第一寄存器集790和相关控制792。第一寄存器集的控制792包括一个SRAM控制802,它是一个把地址和写数据加载到SRAM地址和数据寄存器820中的逻辑控制。因而,SRAM控制802把第三阶段900的ALU902的输出放置到SRAM地址和数据寄存器820的地址寄存器或者数据寄存器中。加载控制804相似地提供把文件上下文写入文件上下文寄存器822的控制,另一个加载控制806提供把各种杂项数据存储到触发式寄存器825中的控制。ALU条件码,比如是否设置一个承载比特,定时送入ALU条件码寄存器828,而没有在第一阶段800中执行的操作。标志解码器808可以执行各种功能,比如设置锁定,将其存入标志寄存器830中。
RAM文件寄存器833具有一个地址及数据的单写入口和两个地址及数据的读取口,所以可以同时读取一个以上的寄存器。如上所述,RAM文件寄存器833实质上横跨第一和第二阶段,因为它在第一阶段800写入,在第二阶段860读取。控制存储指令810允许在新数据从控制存储781写入时对处理器重新编程(未在图中示出),该指令被存入指令寄存器835中。为此,在确定取出哪一个地址的取出控制寄存器811中生成地址,并存入取出地址寄存器838中。加载控制815提供程序计数器840的指令,进行大量的类似于取出控制存储地址的操作。三个寄存器的后进先出堆栈844连接第一寄存器集,在该阶段不经历其它操作。最后,可以随意包括一个排错地址848的加载控制817,它允许纠正可能发生的错误。
图18B示出了第二微处理器阶段860,包括从RAM文件寄存器833读出地址和数据。来自第一寄存器集的SRAM地址及数据寄存器820的地址和数据写入擦除SRAM865,它包括一个寄存器,用于通过将在第三阶段加一的最初的两个阶段。擦除SRAM865由指令解码器及操作数多路复用器798读取,在此案中,所读出的大多数指令来自第一寄存器集的多个寄存器,包括来自上述的排错地址寄存器848和SRAM地址及数据寄存器的指令,但堆栈844除外。指令解码器和操作数多路复用器798查看寄存器集790的各个寄存器以及SRAM865,解码所述指令并收集下一个阶段进行操作的操作数,特别是确定提供给后面的ALU902的操作数。指令解码器和操作数多路复用器798的输出被存储到第二寄存器集796的多个寄存器上,这些寄存器包括ALU操作数寄存器879和882;ALU条件码寄存器880;和队列通道和命令887寄存器,在本实施例中,它可以控制32个队列。寄存器集796的若干寄存器直接从指令寄存器835适当加载,而不由解码器798实际解码,上述若干寄存器包括程序控制890、文字字段889、测试选择884和标志选择885等寄存器。第一阶段800的其它寄存器,比如文件上下文寄存器822的数据总是存储在第二阶段860的文件上下文寄存器877中,不过也可以把它视为由多路复用器872收集的操作数。在堆栈寄存器894中仅仅复制堆栈寄存器844的内容。程序计数器840在本阶段计数增加868并存入寄存器892。此外,对选项排错地址848递增870,此时可以从流水线805馈入加载控制875,以允许每个阶段中的差错控制,其结果被存入排错地址寄存器898中。
图18C示出了第三微处理器阶段900,包括ALU和排队操作。ALU902包括一个加法器、优先权编码器和其它标准逻辑功能。ALU的结果被存入ALU输出918、ALU条件码920和目的地操作数结果922等寄存器中。文件上下文寄存器916、标志选择寄存器926和文字字段寄存器930仅仅是从前阶段860复制。测试多路复用器904被提供来确定一个条件跳变是否导致一个跳变,并且将结果存入测试结果寄存器924中。测试多路复用器904的功能可以改为在第一阶段中与诸如取出控制811的类似判断功能一起执行。堆栈交换器908通过从堆栈794中取出一个程序计数或者把一个程序计数放入堆栈,来上移或者下移一个堆栈,并且将结果存入程序控制934、程序计数938和堆栈940寄存器中。可以在该阶段900中随意地实施SRAM地址的处理。此时从流水线805施加另一个排错地址942的另一个加载控制910,以便允许该阶段中的差错控制。QRAM和QALU906(在图中被显示在一起)从队列通道和命令寄存器887读取数据,将其存入SRAM和重新排序队列中,从而增加和移出管理数据队列所需的数据和指针,并向测试多路复用器904和队列标志及队列地址寄存器928发送其结果。因此,QRAM和QALU906承担了管理三个处理器队列的职责,这是一个通常由CPU的硬件顺序执行的任务,该队列管理器906改为提供加速和实际上并行的硬件排队。
图19示出了由队列管理器906管理的32个硬件队列的两个队列,每个队列具有一个SRAM报头,一个SRAM报尾以及DRAM本体的队列信息的能力,还允许每个队列扩充和单独配置。因此,FIFO1000具有SRAM存储单元1005、1007、1009和1011,其每个包含用于总数为32个字节的8个字节,当然这些单元的数目和容量可以在其它实施例中变化。同样,FIFO1002具有SRAM存储单元1013、1015、1017和1019。SRAM单元1005和1007是FIFO1000的头部,单元1009和1011是该FIFO的尾部,而单元1013和1015是FIFO1002的头部,单元1017和1019是该FIFO的尾部。可以将FIFO1000的信息写入头部单元1005或者1007(如箭头1022所示),并且从单元1011或者1009中读出(如箭头1025所示)。然而,特定项目可以写入头部单元1005或者1007和从该头部单元中读出,或者可以写入尾部单元1009或者1011和从该尾部单元读出,以使数据运动和等待时间最小化。同样,FIFO1002的信息通常被写入头部单元1013或者1015(如箭头1033所示),并且从尾部单元1017或者1019读出(如箭头1039所示),但是也可以改为从写入所述信息的相同头部单元或者尾部单元读出。
SRAM FIFO1000和1002连接DRAM755,以允许这些FIFO的几乎无限扩展管理SRAM头部和尾部充满的情况。例如,32个队列的第1队列(加Q-zero标签)可以排序DRAM755中的项目(如箭头1027所示),这由队列管理器指导下操作的DMA执行,而不是在FIFO700的头部或者尾部中进行排队。DRAM755中存储的项目返回到SRAM单元1009,如箭头1030所示,从而扩展了该FIFO的长度和中止时间。从SRAM转到DRAM通常在SRAM充满时进行预备,因为DRAM较慢以及DMA运动造成附加等待时间。这样,Q-zero可以包括FIFO1000和DRAM755的队列管理器803存储的项目。同样,用于FIFO1002的信息(可对应于Q-twenty-seven),例如,可以由DMA移动到DRAM755中,如箭头1035所示。在成效尽管较慢的DRAM803中排队的容量可在初始化期间由用户定义,允许根据需要改变队列长度。在DRAM755中排队的信息被返回到SRAM单元1017,如箭头1037所示。
32个硬件队列的每一个的状态按传统方式保存在四个32比特寄存器的寄存器集1040中,并从该寄存器集存取,如图20所示。其中每个寄存器中的特定比特对应于一个特定队列。这些寄存器被标注为Q-out_Ready 1045,Q-In_Ready 1050,Q-Empty 1055,Q-Full 1060。如果一个特定比特被设置在Q-In_Ready 1050中,则对应于该比特的队列包含准备读出的信息,而在Q-In_Ready 1052寄存器中相同比特的设置意味着准备写入队列。类似地,Q-Empty 1055中的一个特定比特的正设置意味着对应于该比特的队列被排空,而Q-Full寄存器1060中的特定比特的正设置意味着对应于该比特的队列被充满。因此,Q-Out_Ready 1045包含比特零1046至三十一1048,其中包括比特二十七1052、二十八1054、二十九1056和三十1058。Q-In_Ready1050包含比特零1062至三十一1064,其中包括比特二十七1066、二十八1068、二十九1070和三十1072。Q-Empty 1055包含比特零1074至三十一1076,其中包括比特二十七1078、二十八1080、二十九1082和三十1084。Q-full 1060包含比特零1086至三十一1088,其中包括比特二十七1090、二十八1092、二十九1094和三十1096。
对应于FIFO1000的Q-zero是一个自由缓存器队列,保存有所有有效缓存器的地址列表。当微处理器或者其它装置需要一个自由缓存器地址时,对该队列寻址,所以通常包括可感知的DRAM755。因此,需要自由缓存器地址的装置同Q-zero核对,以获得该地址。Q_twenty_seven,对应于FIFO1002,是一个接收缓存描述符。在接收定序器处理接收帧之后,该定序器希望在队列二十七中存储帧的描述符。如果这样一个描述符的位置可以立即在SRAM中得到,将设置Q-In_Ready 1050的比特二十七1066。如果不能得到,定序器则必须等待队列管理器启动从SRAM到DRAM的一个DMA运动,从而释放存储接收描述符的空间。
图21中详细显示了队列管理器的操作,该队列管理器管理SRAM与DRAM之间、发射与接收定序器之间以及SRAM与DRAM之间的队列项目的移动。利用队列的请求包括定序器请求1102、发射定序器请求1104、接收定序器请求1106。队列的其它请求是DRAM对SRAM请求1108和SRAM对DRAM请求1110,所述请求以队列管理器名义运行,在队列的DRAM与SRAM头部或者尾部之间移动数据。确定这些不同队列的哪个队列在下一个周期使用队列管理器由在前逻辑判定器1115处理。为了启动高频操作,将队列管理器流水线化,寄存器A 1118和寄存器B 1120提供临时存储,而状态寄存器1122保持状态,直至下一次更新。队列管理器保存DMA的偶数循环、接收和发送定序器请求、处理器请求的奇数循环。双端口的QRAM1125存储关于每个队列的变量,用于每个队列的变量包括一个对应于队列的SRAM条件的头部写指针、头部读指针、尾部写指针和尾部读指针,以及对应于队列DRAM条件和队列长度的本体写指针和本体读指针。
判定器1115选择将要执行的下一个操作之后,根据QALU1128的选用操作取出和修改QRAM825的变量,并且可以生成SRAM读请求1130或者SRAM写请求1140。变量被更新,并把更新的状态存储到状态寄存器1122以及QRAM1125中。该状态还被反馈给判定器1115以发送已经履行在前请求的操作的信号,从而抑制请求的重复。状态寄存器1122更新四个队列寄存器Q-Qut_Ready1045、Q-In_Ready1050、Q-Empty1055和Q-Full1060以反映访问的队列的新状态。SRAM地址1133、本体写请求1135和本体读请求寄存器1138进行类似更新,以便经由DMA存取该队列的SRAM头部和尾部。另一方面,各种处理也许希望写一个队列,如Q写数据1144所示,多路复用器1146选取该Q写数据1144,并沿着流水线送入SRAM写请求1140。SRAM控制器通过写所存取的队列的尾部或者读它的头部并返回一个确认,来服务于读和写请求。以此方式利用各种队列并更新它们的状态。
图22A-D显示了最近最少使用的寄存器1200,该寄存器被用来选定那些上下文或者CCB保存在INIC高速缓存器。该实施例中的INIC可以在一个给定时间将十六个CCB高速缓存到SRAM中,所以当高速缓存一个新CCB时,必须经常丢弃一个旧的CCB,通常根据该寄存器1200选定的被丢弃的CCB将是最近最少使用的CCB。在该实施例中,达到256个CCB的一个散列表也被保存在SRAM中,而256个全CCB被保存在DRAM中。最近最少使用的寄存器1200包含16个被标注为R0-R15的四比特块,每个块对应于SRAM高速缓存单元。初始化时,这些块被标为编号0-15,块中随意存储的编号0代表最近最少使用的(LRU)高速缓存单元,块中存储的编号15代表最近使用(MRU)高速缓存单元。图22A显示了当LRU块R0保存编号9以及MRU块R15保存编号6时的任一时刻的寄存器1200。当与当前保存在SRAM中的CCB不同的一个CCB将被高速缓存时,阅读LRU块R0(在图22A中,该块保存编号9),然后把新的CCB存储到对应于编号9的SRAM高速缓存单元中。由于对应于编号9的新的CCB现在是最新使用的CCB,因此编号9被存储在MRU块中,如图22B所示。其它编号全部向左移动一个寄存器块,使编号1离开LRU块。先前已经存储在对应于编号9的SRAM单元中的CCB已经被移动到较慢但成本低的DRAM中。
图22C显示了所使用的下一个CCB已经被高速缓存在SRAM中的结果。在该实例中,CCB被高速缓存到对应于编号10的SRAM单元中,所以,在利用CCB之后,编号10被存储到MRU块中。只有那些比编号10更最近在先使用的编号(寄存器块R9-R15)被左移,使编号1离开LRU块。这样,INIC在SRAM高速缓存器中保存了最有效的CCB。
在大多数情况下,正在使用的CCB是不值得保存在有限高速缓存器中的CCB。例如,最好不高速缓存认为将停止的上下文的CCB,以便其它高速缓存的CCB可以保存在SRAM中更久。在此情况下,代表保存不可高速缓存的CCB的高速缓存单元的编号被存储在LRU块R0中,而不是MRU块R15中,所以,一旦使用对应于LRU块R0所保存编号的SRAM单元中高速缓存的一个新CCB,就将立即取代不可高速缓存的CCB。图22D显示了编号8(它存在于图22C的块R9中)对应于将被使用然后停止的一个CCB的情况。在这种情况下,编号8已经从块R9中移出,并存入LRU块R0中。然后,将事先存储到块R9以左(R1-R8)的所有编号右移一个块。
图23显示了用来操作最近最少使用的寄存器1200的操作的某些逻辑单元。一个阵列具有馈入最近最少使用寄存器1200的对应的十六个块的输出,该阵列具有十六个多路复用器,但为了简明仅示出了多路复用器MUX0、MUX7、MUX8、MUX9、MUX15,所述多路复用器是三或四输入多路复用器1210。例如,MUX0的输出被存入块R0中,MUX7的输出被存入块R7中,等等。每个寄存器块的值被接入它的对应的多路复用器的输入,并且还送入两个相邻多路复用器的输入,以供移位块编号使用。例如,R8中存储的编号被馈入MUX7、MUX8和MUX9的输入。MUX0、MUX15每一个仅具有一个相邻块,这些多路复用器的额外输入分别用来选择LRU和MRU块。MUX15被显示为一个四输入多路复用器,具有输入1215以提供存储在R0上的编号。
该逻辑单元包括一个具有十六个比较器1220的阵列,每个比较器接收存储在最近最少使用寄存器1200的对应块中的值。每个比较器还经由线路1235接收来自处理器470的信号,使具有匹配处理器470发送信号的编号的寄存器块对于逻辑电路1230输出是真的,而其它十五个比较器输出是虚假的。逻辑电路1230控制多个通向每个多路复用器的成对选择线,用于选择对多路复用器的输出,从而控制寄存器块编号的位移。这样,选择线1239控制MUX0,选择线1244控制MUX7,选择线1249控制MUX8,选择线1254控制MUX9,选择线1259控制MUX15。
当CCB将要被存储时,处理器470查看CCB是否与十六个高速缓存单元之一中当前保存的一个CCB相匹配。如果发现一个匹配,处理器经由线路1235发送一个信号及对应于高速缓存单元的块编号,例如编号12。比较器1220将来自线路1235的信号与块编号相比较,比较器C8提供一个匹配该信号的块R8的真实输出,而其它所有比较器输出是虚假的。处理器470控制下的逻辑电路1230使用选择线从线路1235选择用于MUX15的输入,把编号12存入MRU块R15中。逻辑电路1230经由用于MUX8和较高多路复用器(但MUX15除外)的一对选择线发送信号,以便通过把已经存储在寄存器块(R9-R15)中的值选作对多路复用器MUX8和更高多路复用器的输入,使它们输出的输出左移一个块。在MUX8左面的多路复用器的输出被选择为一个常数。
另一方面,如果处理器470未在十六个高速缓存单元中发现CCB的匹配,则处理器经由线路1266选读LRU块R0,以识别对应于LRU块的高速缓存器,并且把高速缓存器中存储的数据存入DRAM中。存储在R0中的编号(在此情况下是编号3)通过选择线1259选取,以作为对MRU块R15存储的MUX15的输入1215。其它十五个多路复用器向它们的相应寄存器块输出已经存储在位于紧靠右边的每个寄存器中的编号。
对于处理器希望从使用后的高速缓存器中移出CCB的情况,选择LRU块R0而不是MRU块R15,用于置放对应于保存CCB的高速缓存单元的编号。处理器470经由线路1235发送对应于将从SRAM移出放入LRU块R0中的CCB的编号(例如,块R9中保存的编号1)。处理器指令逻辑电路1230向R0输入编号1,这是通过用选择线1239选择对MUX0的输入1235实现的。对MUX9的选择线把寄存器块R8中保存的编号选作输入,所以来自R8的编号被存储在R9中。其它寄存器R0与R9保存的编号采用类似方式左移,而R9右边的寄存器块的编号是left常数。这样就使容量不足的高速缓存器不需要对停用的CCB保持许多周期,而它们的识别号经由寄存器从MRU移动到LRU块。
图24示出了INIC22的附加细节,本说明的重点是单网络连接。INIC22包括PHY芯片712、ASIC芯片700和DRAM755。PHY芯片712使INIC卡22经由网络连接器2101连接网络线2105。INIC22经由卡式插件连接器2107和PCI总线757连接到主机的CPU(例如,图1的主机20的CPU30)上。ASIC芯片700包括一个媒体存取控制(MAC)单元722,一个定序器块732,一个SRAM控制744,一个SRAM748,一个DRAM控制742,一个队列管理器803,一个处理器780和一个PCI总线接口单元756。定序器块732包括一个发送定序器2104,一个接收定序器2105和配置寄存器2106。MAC目的地地址被存入配置寄存器2106中。处理器780运行的程序码的部分被包含在ROM(未示出)中,部分被定位在可写控制存储SRAM中(未示出)。在依据主机20初始化时,程序可以被下载到可写控制存储SRAM中。
图25是图24的接收定序器2105的更详细的附图。接收定序器2105包括一个数据同步缓存器2200,一个分组同步定序器2201,一个数据汇编寄存器2202,一个协议分析器2203,一个分组处理定序器2204,一个队列管理接口2205,和一个直接存储器存取(DMA)控制块2206。分组同步定序器2201和数据同步缓存器2200利用MAC722的网络同步时钟,接收定序器2105的余部则利用一个固定频率时钟。虚线2221指示时钟域边界。
下面说明图24和图25的接收定序器2105的操作,该操作与在INIC22上接收来自网络线702的TCP/IP分组有关。在初始化的时候,处理器780把DRAM755划分成多个缓存器。接收定序器2105使用DRAM755的存储到达的网络分组数据以及分组的状态信息。处理器780为每个缓存器建立32比特缓存器描述符。缓存器描述符指示与其相关联的缓存器的DRAM中的大小和位置。处理器780通过把这些缓存器描述符写入队列管理器803,来把这些描述符放置到一个“自由缓存器队列”2108上。队列管理器803保持多个队列,其中包括“自由缓存器队列”2108。在该实施中,各个队列的头部和尾部被定位在SRAM748中,而这些队列的中间部分被定位在DRAM755中。
线路2229包括一个请求机构,包含一个请求线和一个地址线。类似地,线路2230包括一个请求机构,包含一个请求线和一个地址线。队列管理器803使用线路2229和2230发出将队列从DRAM发送到SRAM或者从SRAM发送到DRAM的请求。
接收定序器的队列管理器接口2205总是试图保存供分组处理定序器2204使用的自由缓存器描述符2207。比特2208是一个就绪比特,它指示自由缓存器描述符2207可以由分组处理定序器2204加以利用。如果队列管理器接口2205没有自由缓存器描述符(未设置比特2208),那么队列管理器接口2205经由请求线2209向队列管理器803请求该描述符。(请求线2209实际上是一条总线,如果操作是写队列,则传递请求、队列ID、读/写信号和数据。)在响应时,队列管理器803从“自由缓存器队列”2108的尾部检索一个自由缓存器描述符,然后经由确认线2210上的确认信号通知队列管理器接口2205。当队列管理器接口2205收到确认信号时,队列管理器接口2205加载自由缓存器描述符2207并设置就绪比特2208。由于自由缓存器描述符位于SRAM748的自由缓存器队列的尾部,因此队列管理器接口2205实际上从SRAM控制块744的读数据总线2228接收自由缓存器描述符2207。分组处理定序器2204经由请求线2211请求自由缓存器描述符2207。当队列管理器接口2205检索自由缓存器描述符2207并且该自由缓存器描述符2207可由分组处理定序器加以利用时,队列管理器接口2205经由确认线2212通知分组处理定序器2204。通过该处理,自由缓存器描述符可以由分组处理定序器2204加以利用,并且接收定序器2105准备处理输入的分组。
然后,经由经由网络连接器2101和物理层接口(PHY)712从网络线2105接收TCP/IP分组。PHY712经由媒体独立接口(MII)并行总线2109将该分组供应给MAC722。MAC722开始处理该分组,并在线路2213上发布一个“分组开始”信号,以表明正在开始接收分组。当分组字节在MAC中接收并且可在MAC输出2215上得到时,MAC722在线路2214上发布一个“数据有效”信号。当收到“数据有效”信号时,分组同步定序器2201经由加载信号线2222指令数据同步缓存器2200加载来自数据线2215的接收字节。数据同步缓存器2200是四字节深度。然后分组同步定序器2201将数据同步缓存器写指针递增1。该数据同步缓存器写指针可经由线路2216用于分组处理定序器2204。以这种方式,将来自数据线2215的连续数据字节钟控送入数据同步缓存器2200。
在线路2219上得到的数据同步缓存器读指针由分组处理定序器2204保存。分组处理定序器2204通过将数据同步缓存器写指针与线路2219上的数据同步缓存器读指针进行比较,确定数据在数据同步缓存器2200中有效。
数据汇编寄存器2202包含一个十六字节长的移位寄存器2217。该寄存器2217每次被串行加载一个单字节并且并行卸载。当数据被加载到寄存器2217时,将一个写指针递增1。该写指针可经由线路2218用于分组处理定序器2204。类似地,当数据从寄存器2217卸载时,分组处理定序器2204所保持的一个读指针被递增1。该读指针经由线路2220用于数据汇编寄存器2202。所以,分组处理定序器2204可以通过将线路2218上的写指针与线路2220上的读指针进行比较,确定寄存器2217中是否有有效空间。
如果分组处理定序器2204确定寄存器2217中有有效空间,那么分组处理定序器2204指令汇编寄存器2202加载来自数据同步缓存器2200的数据字节。数据汇编寄存器2202将线路2218上的数据汇编寄存器写指针递增1,并且分组处理定序器2204将线路2219上的数据同步缓存器读指针递增1。检验校验和的协议分析器2203在寄存器输出检查移位到寄存器2217中的数据,并生成“状态”信息2223。
DMA控制块2206负责经由64字节接收FIFO2110将信息从寄存器2217移动到缓存器2114。DMA控制块2206使用SRAM748的64字节把接收FIFO2110实施为两个32字节的往复式缓存器。DMA控制块2206使用一个写指针和一个读指针实施接收FIFO。当将要传递的数据在寄存器2217中有效以及FIFO2110中有有效空间时,DMA控制块2206经由线路2225向SRAM控制器744发布一个SRAM写请求。SRAM控制器744将数据从寄存器2217移动到FIFO2110,并且经由线路2225把确认信号返回到DMA控制块。DMA控制块2206随后将接收FIFO写指针递增1,并且使数据汇编寄存器读指针递增1。
当数据的32个字节已经被存放到接收FIFO2110上时,DMA控制块2206经由线路2226把DRAM写请求呈现给DRAM控制器742。这一写请求包括自由缓存器描述符22070Red,具有用于DRAM请求地址的“缓存器加载计数”;和用于SRAM读地址的接收FIFO读指针。通过使用接收FIFO读指针,DRAM控制器742向SRAM控制器744发送一个读请求。SRAM控制器744响应该DRAM控制器742,从SRAM748的接收FIFO2110返回指示的数据并发布确认信号。DRAM控制器742将数据存入DRAM写数据寄存器,存入一个DRAM请求地址到DRAM地址寄存器中,并向DMA控制块2206发送一确认。DMA控制块2206随后将接收FIFO读指针递减1。然后,DRAM控制器742将数据从DRAM写数据寄存器移动到缓存器2114,这样,当数据的连续32个字节组块被存储到SRAM748中时,DRAM控制块2206将这些数据32字节组块从SRAM748向DRAM755中的缓存器2214每次移动一个组块。以这种方式向DRAM755传送32字节组块,允许使用DRAM的相关有效脉冲串模式将数据写入DRAM中。
分组数据从网络线2105连续流入缓存器2114,直至接收到所有分组数据。MAC722随后通过在线路2227上发布“帧尾”信号以及将最终分组状态(MAC分组状态)呈现给分组同步定序器2204,来表示已经完成该输入分组。分组处理定序器2204随后将状态2223(也称作“协议分析器状态”)和MAC分组状态移动到寄存器2217,最终传递到缓存器2114。当所有分组数据已经被放入缓存器2214时,状态2223和MAC分组状态传递到缓存器2214,以便在该缓存器中存储,使其预先规划到图23所示的相关联数据上。
当所有数据和状态已经被传递到缓存器2114时,分组处理定序器2204通过链接自由缓存器描述符2207、缓存器加载计数、MAC ID和状态比特(也称作“注意(attention)比特”)建立概述2224(也称作“接收分组描述符”)。如果注意比特是1,那么该分组不是“快速路径候选者”;如果注意比特是0,则该分组是“快速路径”候选者。注意比特的值代表处理器780将另外必需确定分组是否为“快速路径候选者”的巨量处理的结果。例如,为0的注意比特指示分组利用TCP协议和IP协议。通过在硬件中预先执行该巨量处理然后对注意比特的结果编码,可以加速处理器780执行的关于分组是否为一个实际“快速路径分组”的后续判定。
分组处理定序器2204设置一个与概述2224关联的就绪比特(未示出)并且把概述2224送给队列管理器接口2205。队列管理器接口2205随后一个对“概述队列”2112(也称作“接收描述符队列”)的头部的写入。队列管理器803接收该请求,把概述2224写入概述队列2212的头部,并且经由线路2210向队列管理器接口反送一个确认信号。当队列管理器接口2205接收一个确认时,队列管理器接口2205通过释放与概述关联的就绪比特,通知分组处理定序器2204概述2224位于概述队列2212中。通过链接MAC分组状态和MAC ID,分组处理定序器2204还生成用于该分组的附加状态信息(也称作“矢量”)。分组处理定序器2204设置与该矢量关联的就绪比特(未示出),并把该矢量送给队列管理接口2205。队列管理接口2205和队列管理器803随后合作,把该矢量写入“矢量队列”2113的头部,其写入方式类似于上述的把概述2224写入概述队列2112的头部。当分组的矢量已经被写入矢量队列2113时,队列管理器接口2205重新设置与矢量关联的就绪比特。
一旦概述2224(包括指向缓存器2114的一个缓存器描述符)已经被放置到概述队列2112中以及分组数据已经被放置到缓存器2144中,处理器780可以从概述队列2112中检索概述2224并检查“注意比特”。
如果概述2224的注意比特是编号1,则处理器780确定分组不是“快速路径候选者”而且处理器780不需要检查分组报头。只有来自缓存器2114的状态2223(第一16字节)是传递到SRAM的DMA,所以处理器780可以检查它。如果状态2223指示该分组是不传递到主机的一种分组(例如,主机不寄存接收的广播帧),那么丢弃该分组(即,不传送到主机)。如果状态2223指示该分组是传送到主机的一种分组那么整个分组(报头和数据)被传送到主机20,由主机20的协议堆栈进行“慢速路径”传递和网络层处理。
另一方面,如果注意比特是0,那么处理器780确定该分组是一个“快速路径候选者”。如果处理器780确定该分组是一个“快速路径候选者”,则处理器780使用来自概述的缓存器描述符将来自缓存器2114的信息的最初大约96字节从DRAM755按DMA方式传递到SRAM748的一部分中,使处理器780可以检查它。该最初的大约96字节包含状态2223以及IP报头的IP源地址、IP报头的IP目的地地址、TCP报头的TCP源地址、TCP报头的TCP目的地地址。IP报头的IP源地址、IP报头的IP目的地地址、TCP报头的TCP源地址、TCP报头的TCP目的地地址一同唯一地定义一个与该分组相关联的单一连接上下文(TCB)。处理器780检查TCP和IP报头的这些地址,并确定分组的连接上下文。处理器780随后检查INIC22控制下的连接上下文的列表,并且确定分组是否与INIC22控制下的连接上下文(TCB)相关联。
如果连接上下文不在该列表中,则确定“快速路径候选者”不是一个“快速路径分组”。在此情况下,整个分组(报头和数据)被传递到主机20的一个缓存器,有主机20的协议堆栈进行“慢速路径”处理。
另一方面,如果连接上下文是在该列表中,则由包括软件状态机2231和2232的处理器780运行的软件来检查大量的异常条件之一,并且确定该分组是否为一个“快速路径分组”。这些异常条件包括1)检测IP片段;2)检测IP操作数;3)检测无用TCP标志(紧急比特组,复位比特组,SYN比特组或者FIN比特组);4)TCP报头中的ACK字段位于TCP窗口之前,或者TCP报头中的TCP字段位于TCP窗口之后,或者TCP报头中的ACK字段缩进TCP窗口;5)TCP报头中的ACK字段是一个副本ACK以及ACK字段超过副本ACK计数(副本ACK计数是一个用户可设置值);6)TCP报头的序号失序(无序接收分组)。如果处理器780运行的软件检测到这些异常情况之一,处理器780就确定“快速路径候选者”不是“快速路径分组”。在此情况下,分组的连接上下文是“已涌入”(连接上下文被反传到主机),使连接上下文不再呈现在INIC22控制下的连接上下文的列表中。整个分组(报头和数据)被传送到主机20的一个缓存器中,由主机20的协议堆栈进行“慢速路径”传输层和网络层处理。
另一方面,如果处理器780未发现这样的异常条件,则确定“快速路径候选者”分组是实际的“快速路径分组”。接收状态机2232随后经由TCP处理该分组。然后,另一个DMA控制器(图21中未示出)将缓存器2114中的分组的数据部分从缓存器2114传送到主机20的存储器30的主机分配的文件高速缓存器上。在一个实施例中,主机20不进行“快速路径分组”的TCP和IP报头的分析。“快速路径分组”的TCP和IP报头的所有分析在INIC卡20上进行。
图26是显示从INIC22向主机20“发送快速路径”的数据(一个64K字节会话层消息2300的分组)的示意图。虚线230左边的附图部分代表INIC22,虚线2301右边的附图部分代表主机20。64K字节会话层消息2300包括大约45个分组,其中的4个在图24中被标注为(2302、2303、2304和2305)。第一分组2302包括含有传输和网络层报头(例如,TCP和IP报头)的部分2306;含有会话层报头的部分2307;和含有数据的部分2308。在第一步骤中,部分2307来自部分2308的第一少量字节和分组2300的连接上下文标识符2310从INIC22传送到主机20的256字节缓存器2309中。在第二步骤中,主机20检查该信息并且向INIC22返回数据的目的地(例如,存储器35中的文件高速缓存器2311的位置)。主机20还把来自缓存器2309的第一少量字节复制到文件高速缓存器2311的第一部分2312的开头。在第三步骤中,INIC22把来自部分2308的数据的余数传送到主机20,以便把数据的余数存储到文件高速缓存器2311第一部分2312的剩余部分中。网络、传输或者会话层报头不存储在文件高速缓存器2311第一部分2312的剩余部分中。接着,把第二分组2303的数据部分2313传送给主机20,从而在文件高速缓存器2311的第二部分2314中存储第二分组2303的数据部分2313。第二分组2303的传输层和网络层报头部分2315不传送到主机20。在第一分组2302的数据部分与第二分组2303的数据部分之间没有存储在文件高速缓存器2311中的网络、传输或者会话层报头。类似地,会话层消息的下一个分组2304的数据部分2316被传送到文件高速缓存器2311中,使文件高速缓存器2311中在第二分组2303的数据部分与第三分组2304的数据部分之间没有网络、传输或者会话层报头。这样,只有会话层消息的分组的数据部分被放置到文件高速缓存器2311中。来自会话层消息2300的数据在文件高速缓存器2311中被表现为一个块,使该块中不包含网络、传输或者会话层报头。
在较短、单一分组会话层消息的情况下,会话层消息的部分2307和2308与连接上下文标识符2310一同被传送到主机20的256字节缓存器2309,与上述的较长会话层消息的情况相同。然而,在单一分组会话层消息的情况下,此时完成传递。主机20不向INIC22返回一个目的地,以及INIC22不传送后续消息到这样一个目的地。
总之,上述的处理数据通信的装置和系统极大地减少了处理大的基于连接的消息所需的时间以及主机资源。与运行传统协议软件的通用CPU相比,通过含有特殊设计协议处理软件的智能网络接口卡(INIC),极大地加快了协议处理速度和效率,并且相当大地减少了对主机CPU的中断。这些优点可以增强网络存储应用,在这样的情况下,来自文件传送的数据还可以借助主机保存的文件传送的控制,回避主机存储器总线和主机I/O总线。
权利要求书(按照条约第19条的修改)13、一种在网络与存储单元之间传递信息的设备,该设备包括一个主计算机,具有一个通过主机存储器总线连接到主机存储器的处理器,所述主机存储器包含一个可由处理器操作的协议堆栈,用于建立一个定义网络连接的通信控制块;和一个连接到所述主计算机并连接在网络与存储单元之间的接口装置,所述接口装置包括一个适于存储所述通信控制块的接口存储器;和一个配置成将数据与所述通信控制块相关联的机构,以使所述数据在网络与存储单元之间进行通信,而不遇到所述主计算机。
14、根据权利要求13所述的设备,其中所述主计算机包含一个文件系统,所述接口存储器包括适于存储所述数据的文件高速缓存器,其中所述文件系统管理所述文件高速缓存器中的所述数据的存储。
15、根据权利要求13所述的设备,其中所述数据以至少一个包含传输层报头的分组在网上传送,所述接口装置包括处理所述报头的电路。
16、根据权利要求15所述的设备,其中所述传输层报头是TCP报头。
17、根据权利要求15所述的设备,其中所述传输层报头是UDP报头。
18、根据权利要求13所述的设备,其中所述接口装置通过输入/输出总线连接所述主计算机,所述通信控制块经由所述输入/输出总线在所述接口装置与所述主计算机之间传输。
19、根据权利要求13所述的设备,其中所述接口装置还包括一个连接存储单元的SCSI控制器。
20、根据权利要求13所述的设备,其中所述接口装置还包括一个连接存储单元的光纤通道控制器。
21、根据权利要求13所述的设备,其中所述接口装置还包括一个与存储单元相连的RAID控制器。
22、根据权利要求13所述的设备,其中所述接口装置通过至少一个网络端口与存储单元和网络相连。
23、根据权利要求13所述的设备,其中对应于所述通信控制块的在前或者后续数据经过所述主计算机。
24、根据权利要求13所述的设备,其中所述主计算机被配置成指定一个可由所述接口装置访问的UDP套接字,所述接口装置被配置成根据所述UDP套接字对网络与文件高速缓存器之间的所述数据进行通信。
25、一种可连接到网络、计算机和存储单元的设备,所述设备包括一个包括硬件逻辑电路的定序器,所述硬件逻辑电路被配置成处理网络分组的传输层报头;一个存储器,适于存储关于由所述装置管理的网络连接的控制信息;和一个将所述分组与所述控制信息相关联的机构,所述机构还选择是由所述计算机处理所述分组还是将数据从所述分组发送到存储单元,从而避开计算机。
26、根据权利要求25所述的设备,还包括一个适于和存储单元通信的SCSI控制器。
27、根据权利要求25所述的设备,还包括一个适于和存储单元及网络通信的网络端口。
28、根据权利要求25所述的设备,还包括一个适于和存储单元通信的光纤通道控制器。
29、根据权利要求25所述的设备,还包括一个适于和存储单元通信的RAID控制器。
30、根据权利要求25所述的设备,还包括一个存储所述数据的文件高速缓存器,所述文件高速缓存器由计算机中的文件系统控制。
31、一种在网络与存储单元之间传递信息的设备,所述设备包括一个主计算机,具有一个对文件系统进行操作的CPU;和一个主机存储器,通过主机存储器总线连接所述CPU;和一个连接所述主计算机、网络和存储单元的接口装置,所述接口装置包括一个包含有接口文件高速缓存器的接口存储器,所述接口文件高速缓存器适于在所述文件系统控制下存储网络与存储单元之间进行通信的数据;其中,所述主计算机被配置成指定一个可由所述接口装置访问的UDP套接字,所述接口装置被配置成根据所述UDP套接字对网络与文件高速缓存器之间的所述数据进行通信。
32、根据权利要求31所述的设备,其中所述主计算机被配置成建立一个可由所述接口装置访问的应用层报头,所述接口装置被配置成把所述应用层报头预先规划到所述数据上。
33、根据权利要求31所述的设备,其中所述主计算机被配置成建立一个可由所述接口装置访问的实时传输协议报头,所述接口装置被配置成把所述实时传输协议报头预先规划到所述数据上。
34、根据权利要求31所述的设备,其中所述数据与关联的UDP报头一起存储,所述接口装置包括一个被配置成处理所述UDP报头的机构。
35、根据权利要求31所述的设备,其中所述接口装置用UDP报头预先规划所述数据,以建立一个UDP数据报,所述接口装置包括一个被配置成将所述数据报划分成多个片段的机构。
36、根据权利要求31所述的设备,其中按多个片段处理所述数据,所述接口装置包括一个被配置成根据UDP报头链接所述片段的机构。
37、根据权利要求31所述的设备,其中所述数据不进入所述主计算机。
38、根据权利要求31所述的设备,其中所述数据包括音频数据。
39、根据权利要求31所述的设备,其中所述数据包括视频数据。
40、根据权利要求31所述设备,其中所述数据是实时通信的一部分。
41、一种在网络与存储单元之间传递信息的设备,所述设备包括一个计算机,具有一个操作一个文件系统的CPU;和一个存储器,通过存储器总线连接所述CPU;和一个连接所述计算机、网络和存储单元的接口装置,所述接口装置包括一个包含接口文件高速缓存器的接口存储器,所述接口文件高速缓存器存储网络与存储单元之间进行通信的数据;其中,所述接口文件高速缓存器由所述文件系统控制,并且在传递所述接口装置与所述存储单元之间的数据期间,用iSCSI报头预先规划所述数据。
42、根据权利要求31所述的设备,其中所述接口装置通过千兆以太网连接所述存储单元。
权利要求
1.一种在网络与存储单元之间传递信息的设备,该设备包括一个主计算机,具有一个对文件系统进行操作的CPU;和一个主机存储器,通过主机存储器总线连接所述CPU;和一个连接所述主计算机、网络和存储单元的接口装置,所述接口装置包括一个包含有接口文件高速缓存器的接口存储器,所述接口文件高速缓存器适合于存储在网络与存储单元之间进行通信的数据,其中所述接口文件高速缓存器由所述文件系统控制。
2.根据权利要求1所述的设备,其中所述主计算机被配置成可建立一个通信控制块,并把所述通信控制块传送到所述接口装置,和所述接口装置被配置成根据所述通信控制块,在网络与文件高速缓存器之间进行所述数据通信。
3.根据权利要求1所述的设备,其中所述主计算机被配置成建立一个通信控制块,并把所述通信控制块传送到所述接口装置,和所述接口装置被配置成根据所述通信控制块,在存储单元与所述文件高速缓存器之间进行数据通信。
4.根据权利要求1所述的设备,其中所述数据不进入所述主计算机。
5.根据权利要求1所述的设备,其中所述数据以文件格式在网络与所述接口装置之间进行通信,和所述数据以块格式在所述接口装置与存储单元之间进行通信。
6.根据权利要求1所述的设备,其中所述数据被附在包括传输层报头的多个报头上,所述接口装置包括一个为处理所述传输层报头而配置的机构。
7.根据权利要求1所述的设备,其中所述接口装置包括一个为进行选择而配置的机构,所述机构选择是经由包括所述主机的第一路径还是经由不包括所述主机的第二路径来在网络与存储单元之间传递所述数据。
8.根据权利要求1所述的设备,其中所述接口装置包括一个连接存储单元的SCSI控制器。
9.根据权利要求1所述的设备,其中所述接口装置包括一个连接存储单元的光纤通道控制器。
10.根据权利要求1所述的设备,其中所述接口装置包括一个连接存储单元的RAID控制器。
11.根据权利要求1所述的设备,其中所述接口装置包括一个与网络和存储单元中至少一个连接的网络端口。
12.根据权利要求1所述的设备,还包括一个连接所述主计算机、网络和第二存储单元的第二接口装置;所述第二接口装置包括一个包含第二接口文件高速缓存器的第二接口存储器,所述第二接口文件高速缓存器适合存储在网络与第二存储单元之间进行通信的数据;其中所述第二接口文件高速缓存器由所述文件系统控制。
13.一种在网络与存储单元之间传递信息的设备,该设备包括一个主计算机,具有一个通过主机存储器总线连接到主机存储器的处理器,所述主机存储器包含一个可由处理器操作的协议堆栈,用于建立一个定义网络连接的通信控制块;和一个连接到所述主计算机并连接在网络与存储单元之间的接口装置,所述接口装置包括一个适于存储所述通信控制块的接口存储器;和一个配置成将数据与所述通信控制块相关联的机构,以使所述数据在网络与存储单元之间进行通信,而不遇到所述主计算机。
14.根据权利要求13所述的设备,其中所述主计算机包含一个文件系统,所述接口存储器包括适于存储所述数据的文件高速缓存器,其中所述文件系统管理所述文件高速缓存器中的所述数据的存储。
15.根据权利要求13所述的设备,其中所述数据以至少一个包含传输层报头的分组在网上传送,所述接口装置包括处理所述报头的电路。
16.根据权利要求15所述的设备,其中所述传输层报头是传输控制协议报头。
17.根据权利要求15所述的设备,其中所述传输层报头是统一数据报协议报头。
18.根据权利要求13所述的设备,其中所述接口装置通过输入/输出总线连接所述主计算机,所述通信控制块经由所述输入/输出总线在所述接口装置与所述主计算机之间传输。
19.根据权利要求13所述的设备,其中所述接口装置还包括一个连接存储单元的SCSI控制器。
20.根据权利要求13所述的设备,其中所述接口装置还包括一个连接存储单元的光纤通道控制器。
21.根据权利要求13所述的设备,其中所述接口装置还包括一个与存储单元相连的RAID控制器。
22.根据权利要求13所述的设备,其中所述接口装置通过至少一个网络端口与存储单元和网络相连。
23.根据权利要求13所述的设备,其中对应于所述通信控制块的在前或者后续数据经过所述主计算机。
24.根据权利要求13所述的设备,其中所述主计算机被配置成指定一个可由所述接口装置访问的统一数据报协议套接字,所述接口装置被配置成根据所述统一数据报协议套接字对网络与文件高速缓存器之间的所述数据进行通信。
25.一种可连接到网络、计算机和存储单元的设备,所述设备包括一个包括硬件逻辑电路的定序器,所述硬件逻辑电路被配置成处理网络分组的传输层报头;一个存储器,适于存储关于由所述装置管理的网络连接的控制信息;和一个将所述分组与所述控制信息相关联的机构,所述机构还选择是由所述计算机处理所述分组还是将数据从所述分组发送到存储单元,从而避开计算机。
26.根据权利要求25所述的设备,还包括一个适于和存储单元通信的SCSI控制器。
27.根据权利要求25所述的设备,还包括一个适于和存储单元及网络通信的网络端口。
28.根据权利要求25所述的设备,还包括一个适于和存储单元通信的光纤通道控制器。
29.根据权利要求25所述的设备,还包括一个适于和存储单元通信的RAID控制器。
30.根据权利要求25所述的设备,还包括一个存储所述数据的文件高速缓存器,所述文件高速缓存器由计算机中的文件系统控制。
31.一种在网络与存储单元之间传递信息的设备,所述设备包括一个主计算机,具有一个对文件系统进行操作的CPU;和一个主机存储器,通过主机存储器总线连接所述CPU;和一个连接所述主计算机、网络和存储单元的接口装置,所述接口装置包括一个包含有接口文件高速缓存器的接口存储器,所述接口文件高速缓存器适于在所述文件系统控制下存储网络与存储单元之间进行通信的数据;其中,所述主计算机被配置成指定一个可由所述接口装置访问的统一数据报协议套接字,所述接口装置被配置成根据所述统一数据报协议套接字对网络与文件高速缓存器之间的所述数据进行通信。
32.根据权利要求31所述的设备,其中所述主计算机被配置成建立一个可由所述接口装置访问的应用层报头,所述接口装置被配置成把所述应用层报头预先规划到所述数据上。
33.根据权利要求31所述的设备,其中所述主计算机被配置成建立一个可由所述接口装置访问的实时传输协议报头,所述接口装置被配置成把所述实时传输协议报头预先规划到所述数据上。
34.根据权利要求31所述的设备,其中所述数据与关联的统一数据报协议报头一起存储,所述接口装置包括一个被配置成处理所述统一数据报协议报头的机构。
35.根据权利要求31所述的设备,其中所述接口装置用统一数据报协议报头预先规划所述数据,以建立一个统一数据报协议数据报,所述接口装置包括一个被配置成将所述数据报划分成多个片段的机构。
36.根据权利要求31所述的设备,其中按多个片段处理所述数据,所述接口装置包括一个被配置成根据统一数据报协议报头链接所述片段的机构。
37.根据权利要求31所述的设备,其中所述数据不进入所述主计算机。
38.根据权利要求31所述的设备,其中所述数据包括音频数据。
39.根据权利要求31所述的设备,其中所述数据包括视频数据。
40.根据权利要求31所述设备,其中所述数据是实时通信的一部分。
全文摘要
一种接口装置(22)通过I/O总线(40)连接主计算机(20),并提供加速网络(25,28)与存储单元(66,70)之间数据传递的硬件和处理机构,同时由主机(20)控制数据传递。接口装置包括处理网络分组报头的硬件电路(52,58,60),并且可以使用一个专用快速路径用于网络(25,28)与存储单元(66,70)之间的数据传递,该快速路径由主机(20)设置。主机CPU(30)和协议堆栈(38)避免快速路径上的数据传递的协议处理,从而释放了主机总线带宽;并且数据不需要经过I/O总线(40),从而释放了I/O总线带宽。存储单元(66,70)可以包括RAID或者其他多驱动配置,并且可以通过诸如SCSI的并行通道或者通过诸如光纤通道的以太网的串行通道来连接接口装置(22)。接口装置(22)包含一个文件高速缓存器(80)。文件高速缓存器(80)存储网络与存储单元之间传递的数据,接口装置的文件高速缓存器(80)中的数据组织由主机上的文件系统(23)控制。附加接口装置(303,310,420,490)可以经由I/O总线(40)连接到主机(20),每个附加接口装置(303,310,420,490)具有由主机文件系统(23)控制的文件高速缓存器,并且提供了附加网络连接(305,313,414,416,418,420,492,494)和/或连接到附加存储单元(308,315)上。当接口装置通过音频/视频接口(666,677)连接到适当的通信装置,比如麦克风(670,680)、扬声器(668,678)、摄像机(674,684)和/或显示器(672,684)时,还可提供实时音频和视频通信。
文档编号G06F13/10GK1473300SQ01818509
公开日2004年2月4日 申请日期2001年9月24日 优先权日2000年9月29日
发明者达里尔·D·斯塔尔, 克莱夫·M·菲尔布里克, 劳伦斯·B·鲍彻, B 鲍彻, M 菲尔布里克, 达里尔 D 斯塔尔 申请人:艾拉克瑞技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1