基于RNIC的iSCSI目标方数据移动功能卸载的制作方法

文档序号:7950365阅读:194来源:国知局
专利名称:基于RNIC的iSCSI目标方数据移动功能卸载的制作方法
技术领域
本发明一般地涉及主计算机和输入/输出(I/O)设备之间的通信协议,更具体地说,本发明涉及通过远程直接存储器存取(RDMA)的iSCSI(互联网小型计算机系统接口)卸载实现。
背景技术
远程直接存储器存取(RDMA)是一种通过高速传输来高效移动数据的技术。RDMA使得计算机能够在所需存储器总线带宽和CPU处理开销最小的情况下直接将信息放置在另一个计算机的存储器中,同时保留存储器保护语义。RNIC是一种为客户提供RDMA服务的网络接口卡。RNIC可以通过TCP(传输控制协议)为RDMA提供支持。
RNIC的众多重要功能之一是它可以用作iSCSI(互联网小型计算机系统接口)目标方或发起方适配器。iSCSI将术语发起方和目标方定义如下“发起方”是指SCSI命令请求方(例如,主机),“目标方”是指SCSI命令响应方(例如,诸如SCSI驱动载体、磁带之类的I/O设备)。RNIC还能提供iSER(“用于RDMA的iSCSI扩展”)服务。iSER是iSCSI数据传输模式的扩展,其使得iSCSI协议能够利用RDMA协议的直接数据放置技术。iSER数据传输协议允许带有RNIC的iSCSI实现具有这样的数据传输,该数据传输通过消除TCP/IP处理开销获得真正的零复制行为,同时保留与iSCSI基础结构的兼容性。iSER使用RDMA线协议,并且对于远程端(目标方或发起方)是不透明的。它还稍微改变或修改了基于RDMA的iSCSI实现;例如,它消除了诸如数据出(DataOut)和数据入(DataIn)之类的iSCSI协议数据单元PDU,并且更改为使用RDMA读取和RDMA写入消息。基本上,iSER将类似iSCSI(iSCSI-like)的性能呈现给上层,但是数据移动协议和线协议是不同的。
iSCSI协议交换iSCSI协议数据单元(PDU)以执行由SCSI层提供的SCSI命令。iSCSI协议可以允许从本地附带的SCSI存储设备到远程附带的SCSI存储设备的无缝转移。iSCSI服务可以提供iSCSI功能的部分卸载,并且卸载的级别可以依赖于实现。简而言之,iSCSI使用常规的TCP连接,而iSER基于RDMA来实现iSCSI。iSER使用RDMA连接,并且利用不同的RDMA功能来获得更好的恢复能力,改进了等待时间和性能。由于RNIC同时支持iSCSI和iSER两种服务,它使得SCSI能够与支持不同级别的iSCSI实现的设备进行通信。在iSCSI登录阶段执行协议选择(iSCSI或iSER)。
RDMA使用称为“verbs(动词)”的操作系统编程接口来将工作请求(WR)放置到工作队列中。在美国专利申请20040049600(Boyd等人,转让给国际商业机器公司)中描述了利用工作请求实现iSER的一个示例在该申请中,可以在来自主机的网络卸载引擎中接收包括iSCSI命令的工作请求,并且响应于接收到该工作请求,与主机关联的存储器区域可以被登记在转换表中。如在RDMA中,可以通过发送队列接收所述工作请求,并且响应于所述存储器区域的登记,可以将完成队列元素放置在完成队列中。

发明内容
如下文中更详细地描述的那样,本发明寻求提供一种通过RNIC的高效iSCSI卸载实现,以及使用为RDMA开发的RNIC机制获得该卸载级别。
根据本发明,iSCSI卸载目标方功能可以通过使用用于RDMA功能的容易获得的RNIC机制来实现。对于RDMA写入操作,这包括但不限于以任意次序和任意SCSI缓冲区偏移量将数据入和数据出有效负载远程直接数据放置到预登记的SCSI缓冲区。对于RDMA读取请求,可以使用相同的机制来处理入站R2T(“准备传输”)PDU和生成数据出PDU。例如,可以使用接收队列和共享接收队列来放置控制iSCSI PDU。
根据本发明的第一方面,公开了一种方法,该方法包括通过使用用于RDMA(远程直接存储器存取)功能的RNIC(支持远程直接存储器存取的网络接口控制器)机制来实现iSCSI(互联网小型计算机系统接口)卸载目标方功能。
根据本发明的第二方面,公开了一种计算机程序产品,该计算机程序产品包括使用用于RDMA功能的RNIC机制来实现iSCSI卸载目标方功能的指令。
根据本发明的第三方面,公开了一种系统,该系统包括RDMA服务单元;RDMA消息传送单元,可操作为处理入站和出站RDMA消息,并且使用由所述RDMA服务单元提供的服务来执行直接放置和递送操作;以及iSCSI消息传送单元,可操作为执行iSCSI卸载目标方功能并处理入站和出站iSCSI PDU,所述iSCSI消息传送单元适合于使用由所述RDMA服务单元提供的服务来执行将所述PDU携带的iSCSI有效负载直接放置和递送到登记的SCSI缓冲区。


通过以下结合附图而进行的详细描述可以更全面地理解并认识本发明,在附图中图1是SCSI写入和SCSI读取事务的简化流程图;图2是iSCSI协议的简化流程图,示出了排序规则和SCSI命令;图3是根据本发明的一个实施例的分布式计算机系统的简化框示;图4是根据本发明的一个实施例的用于实现iSCSI卸载功能的RDMA机制的简化框示;
图5是RDMA的远程存储器存取操作(读取和写入)的简化流程图;图6是根据本发明的一个实施例的可以实现本地和远程地存取系统存储器的RDMA中的存储器登记的简化流程图;图7和图8分别是根据本发明的一个实施例的由支持RDMA的RNIC进行的iSCSI数据移动操作的卸载的简化的框图和流程图的图示;图9是根据本发明的一个实施例的使用基于RDMA的iSCSI卸载实现的软件结构的简化框示;图10是根据本发明的一个实施例的在不需要硬件/软件交互的情况下将iSCSI数据移动PDU直接数据放置到SCSI缓冲区的简化框图;图11A和图11B形成了根据本发明的一个实施例的由RNIC处理数据入和所请求的数据出,以及执行将那些PDU携带的iSCSI有效负载直接数据放置到登记的SCSI缓冲区的简化流程图;以及图12是根据本发明的一个实施例的处理硬件中的入站R2T以及生成数据出PDU的简化流程图。
具体实施例方式
为了更好地理解本发明,现在提供了对iSCSI数据移动和卸载功能的一般性说明(参考图1和图2)。此后,将说明使用RDMA verbs和机制(从图4往后)在分布式计算机系统(参加图3描述)中实现iSCSI数据移动和卸载功能。
iSCSI协议交换iSCSI协议数据单元(PDU)以执行由SCSI层提供的SCSI命令。iSCSI协议实现了从本地附带的SCSI存储设备到远程附带的SCSI存储设备的无缝转移。
存在两个主要的iSCSI PDU组iSCSI控制和iSCSI数据移动PDU。iSCSI控制定义了多种类型的控制PDU,例如SCSI命令、SCSI响应、任务管理请求等。数据移动PDU是较小的组,其包括但不限于R2T(准备传输)、SCSI数据出(请求的和未经请求的)以及SCSI数据入PDU。
如上所述,“发起方”指SCSI命令请求方(例如,主机),而“目标方”是指SCSI命令响应方(例如,诸如SCSI驱动载体、磁带之类的I/O设备)。所有的iSCSI控制和数据移动命令可以根据那些由发起方生成并由目标方处理的命令以及那些由目标方生成并由发起方处理的命令进行划分。
现在参考图1,其分别示出了SCSI写入和SCSI读取事务的流程。
在SCSI写入流程中,发起方发送SCSI写入命令(由参考标号101指示)给目标方。该命令除了其它字段外还携带有发起方任务标记(ITT),其标识了应被放置到磁盘(或目标方的其它部分)的SCSI缓冲区。SCSI写入命令还可以携带即时数据,其最大大小可以在iSCSI逻辑阶段进行协商。此外,SCSI写入命令后可以跟随一个所谓的未经请求的数据出PDU。未经请求的数据出PDU由目标方传输标记(TTT)标识,该例子中,TTT应等于0xFFFFFFFF。未经请求的数据的大小也可以在iSCSI登录阶段进行协商。这两种数据传输模式可能能够减少短SCSI写入操作上的等待时间,但这同样也可以被用来在大型事务中传输初始数量的数据。可以在未经请求或即时模式中传输的最大数据大小取决于目标方的缓冲能力。
在目标方接收到SCSI写入命令后,目标方用一个或多个R2T(由参考标号102指示)进行响应。每个R2T都指示目标方已准备好从SCSI缓冲区(无需按次序)中的指定偏移处接收指定数量的数据。R2T携带两个标记来自SCSI命令的ITT和指示数据将被放置到其中的目标缓冲区的TTT。
对于每个接收到的R2T,发起方可以发送一个或多个数据出PDU(由参考标号103指示)。数据出PDU携带来自SCSI缓冲区(由ITT指示)的数据。每个接收到的“数据出”都携带有指示在何处放置数据的TTT。最后一个接收到的数据出还携带有F-位(由参考标号104指示)。该位表明已接收到最后一个数据出,并通知目标方R2T交换已完成。
当已通知目标方所有的R2T都已完成时,目标方发送SCSI响应PDU(由参考标号105指示)。该SCSI响应携带有ITT并且表明SCSI写入操作是否成功完成。
在SCSI读取流程中,发起方发送SCSI读取命令(由参考标号106指示)给目标方。该命令除了其它字段外还携带有ITT,其标识了从该处读取数据的SCSI缓冲区。
目标方用一个或多个数据入PDU(由参考标号107指示)进行响应。每个“数据入”均携带有将被放置在SCSI缓冲区中的数据。数据入可以以任意顺序到达,并且可以具有任意大小。每个数据入都携带有ITT,其标识了SCSI缓冲区和将数据放置到该处的缓冲区偏移量。
数据入PDU流后面跟着SCSI响应(由参考标号108指示)。SCSI响应携带有表明SCSI读取操作是否成功完成的ITT。
注意,与现有技术不同,根据本发明的一个实施例,RNIC处理数据出和数据入以及R2T的流程。
现在参考图2,其说明了iSCSI协议的一个例子。iSCSI协议具有明确定义的排序规则。iSCSI任务(参考标号201)包括一个或多个SCSI命令202。在任意给定时刻,iSCSI任务201可以具有单个未完成的命令202。每个任务201由ITT 203标识。单个iSCSI连接可以具有多个未完成的iSCSI任务。iSCSI任务201的PDU 204可以交织在连接流中。每个iSCSI PDU 204可以携带多个序列号。这些与数据移动PDU有关的序列号包括,但不限于,R2TSN(R2T序列号),DataSN和ExpDataSN,以及StatSN和ExpStatSN。
携带数据(数据出和数据入)的每个iSCSI PDU 204都携带有DataSN。对于数据入,DataSN对于每个SCSI读取命令可以从0开始,并且可以随着每个发送的数据入由目标方来递增。跟随在数据入后面的SCSI响应PDU携带有ExpDataSN,其表明了为每个相应的SCSI命令发送的数据入的数量。对于双向SCSI命令,DataSN由数据入和R2T共享,其中R2T携带了R2TSN而不是DataSN,但是这些是用于同一字段的不同名称,它们在iSCSI报头(BHS-缓冲区段处理堆栈)中具有相同的位置。
对于数据出,DataSN对于每个R2T可以从0开始,并且可以随着每个发送的数据出由发起方来递增。R2TSN可以由R2T携带。对于每个SCSI写入命令,R2TSN可以从0开始,并且可以随着每个发送的R2T由目标方来递增。
DataSN和R2TSN都可以被用来跟随接收的数据移动PDU的次序。注意,iSCSI允许对接收数据的无序放置,以及对R2T的无序执行。然而,iSCSI从发起方和目标方来请求实现以防止放置已经放置的数据或执行已经执行的R2T。
StatSN和ExpStatSN可以被用于目标方响应缓冲区的管理。目标方可以随着每个产生的响应增加StatSN。该响应以及可能的用于该命令中的数据可以被保存在内部目标方中,直到发起方使用ExpStatSN来确认该响应的接收。在从发起方到目标方的方向上流动的所有iSCSI PDU都可以携带ExpStatSN。发起方可以保持ExpStatSN单调地递增以允许目标方的高效实现。
如上所述,根据本发明的一个非限制性实施例,iSCSI卸载功能可以使用用于RDMA功能的RNIC机制来实现。首先,现在将对用于分布式计算机系统的RDMA中的工作队列的概念做一般性的解释。
现在参考图3,说明了根据本发明的一个实施例的分布式计算机系统300。该分布式计算机系统300可以包括,例如但不限于,网际协议网络(IP网络)和许多其它的属于多种其它类型和配置的计算机网络。比如,实施本发明的计算机系统的范围可以从具有一个处理器和少量输入/输出(I/O)适配器的小型服务器到具有多种处理器和I/O适配器的大型并行超级计算机系统。此外,本发明可以在由互联网或内联网连接的远程计算机系统的基础结构中实现。
分布式计算机系统300可以连接任意数量和任意类型的主处理器节点301,诸如但不限于独立处理器节点、存储节点以及专用处理节点。这些节点中的任何一个节点都可以用作末端节点,其在此被定义为分布式计算机系统300中发起或最终消费消息或帧的设备。每个主处理器节点301可以包括客户(consumers)302,其是在该主处理器节点301上执行的进程。主处理器节点301还可以包括一个或多个IP套件卸载引擎(IPSOE)303,其可以以硬件或硬件和卸载微处理器组合的方式来实现。该卸载引擎303可以支持多种用于将消息传输给IPSOE端口305的队列对304。每个队列对304可以包括一个发送工作队列(SWQ)和一个接收工作队列(RWQ)。发送工作队列可以用于发送通道和存储器语义消息。接收工作队列可以接收通道语义消息。客户可以利用定义需要被实现的语义的“verbs”将工作请求(WR)放置在工作队列上。该verbs还可以提供一种用于从完成队列检索已完成工作的机制。
例如,客户可以生成工作请求,其作为工作队列元素(WQE)放置在工作队列中。相应地,发送工作队列可以包括WQE,其描述了将在分布式计算机系统300的架构上发送的数据。接收工作队列可以包括WQE,其描述了将来自分布式计算机系统300的架构的入站通道语义数据放置在何处。工作队列元素可以由卸载引擎303中的硬件或软件来处理。
完成队列可以包括完成队列元素(CQE),其包含与先前已完成的工作队列元素有关的信息。完成队列可以被用来为多个队列对创建一个或多个完成通知点。完成队列元素是包含用于确定已完成的队列对和特定工作队列元素的足够信息的关于完成队列的数据结构。完成队列上下文是包含指针、长度,以及管理各个完成队列所需的其它信息的信息块。
RDMA读取工作请求提供了存储器语义操作以读取远程节点上的虚拟相邻存储器空间。存储器空间可以是存储器区域的一部分,也可以是存储器窗口的一部分。存储器区域指先前登记的由虚拟地址和长度定义的虚拟相邻存储器地址集。存储器窗口指已被绑定到先前登记的区域的虚拟相邻存储器地址集。类似地,RDMA写入工作队列元素提供了存储器语义操作以对远程节点上的虚拟相邻存储器空间进行写入。
绑定(未绑定)远程存取关键字(操纵标记-STag)工作队列元素为卸载引擎硬件提供命令以便通过将存储器窗口与存储器区域关联(或解除关联)来修改(或破坏)该存储器窗口。STag是每个RDMA存取的一部分,并且被用来验证远程进程已允许对缓冲区进行存取。
注意,下文中示出并描述的方法和系统可以由计算机程序产品306来执行,该计算机程序产品例如但不限于,网络接口卡、硬盘、光盘、存储器设备等,其可以包括用于执行此处所描述的方法和系统的指令。
现在参考图4解释用于实现iSCSI卸载功能的一些相关和有关的RDMA机制。
在RDMA中,主机A可以在没有任何主机B介入的情况下对主机B的存储器进行存取。主机A决定在何处何时对主机B的存储器进行存取,并且主机B并不知道该存取的发生,除非主机A提供了明确的通知。
在主机A能够对主机B的存储器进行存取之前,主机B必须登记将被存取的存储器区域。每个已登记的存储器区域获得一个STag。STag与保护表中被称作保护块(PB)的表项关联。PB完整地描述了已登记的存储器区域,包括其边界、存取权限等。RDMA允许登记物理上不连续的存储器区域。这样的区域用页-列表(或块-列表)来表示。PB也指向存储器区域页-列表(或块-列表)。
RDMA只允许对已登记的存储器区域的远程存取。远程端在对存储器进行存取时使用存储器区域STag来引用该存储器。对于存储应用,RDMA借助零基(zero-based)存取来对该存储器区域进行存取。在零基存取中,由标记的直接数据放置协议(DDP)段携带的目标方偏移(TO)定义了该登记的存储器区域中的偏移。
现在参考图5,说明RDMA的远程存储器存取操作,也即,读取和写入。远程写入操作可以使用RDMA写入消息-标记的DDP消息来实现,所述标记的DDP消息携带了应被放置在远程存储器中的数据(由参考标号501指示)。
可以使用两个RDMA消息-RDMA读取请求消息和RDMA读取响应消息实现远程读取操作(由参考标号502指示)。RDMA读取是未标记的DDP消息,它同时指定了需要从其取回数据的位置和放置该数据的位置。RDMA读取响应是标记的DDP消息,其携带有RDMA读取请求所请求的数据。
处理入站标记的DDP段(其既用于RDMA写入也用于RDMA读取响应)的过程可以包括但不限于读取由STag所引用的PB(503),存取验证(504),读取区域页-列表(转换表)(505),以及对存储器的直接写入操作(506)。入站RDMA读取请求可以由RNIC来进行排队(507)。该队列被称为读取响应工作队列(WQ)。
RNIC可以在所有前面的RDMA请求已经完成后按次序处理RDMA读取请求(508),并且可以生成RDMA读取响应消息(509),该消息被发送回请求方。
处理RDMA读取请求的过程可以包括但不限于可选地将RDMA读取请求排队和出列到读取响应WQ(510),读取由数据源STag(引用要从中进行读取的存储器区域的STag)引用的PB(511),存取验证(512),读取区域页-列表(转换表)(513),以及从存储器的直接读取操作并生成RDMA读取响应段(514)。
RDMA定义了既能够本地地也能够远程地存取系统存储器的地址转换和保护(ATP)机制。该机制基于需要被存取的存储器的登记,如下参考图6而说明的那样。
存储器登记是远程存储器存取所需的强制性操作。在RDMA中可以使用两种方法存储器窗口和快速存储器登记。
存储器窗口的方法(参考标号600)可以在要远程存取的存储器是静态的并且事先知道要对哪个存储器进行存取的时候(601)使用。在这种情况下,使用所谓的经典存储器登记方案来登记存储器区域,其中由驱动器在具有或没有硬件辅助的情况下执行PB和转换表(TT)的分配和更新(602)。这是一种同步操作,只有当PB和TT都使用相应的信息进行更新时才可以完成此操作。使用存储器窗口来允许(或禁止)对整个(或部分)已登记存储器区域的远程存储器存取(603)。该过程被称为窗口绑定,并由RNIC基于客户的请求执行。这要比存储器登记快得多。但是,存储器窗口并不是允许远程存取的唯一方式。区域本身的STag也可以用于此目的。因此,可以使用三种机制来对已登记的存储器进行存取使用静态登记的区域,使用绑定到这些区域的窗口,和/或使用快速登记的区域。
如果用于远程存取的存储器事先并不知道(604),那么使用预登记的区域并不是高效的。取而代之,RDMA定义了一种快速存储器登记和无效方法(605)。
该方法将存储器登记过程分为两个部分-分配将由区域消耗的RNIC资源(606)(例如,用来保存页-列表的PB和部分TT),以及更新PB和TT以保存区域特定(region-specific)的信息(607)。第一操作606可以由软件执行,并且可以为每个Stag执行一次。第二操作607可以由软件来发布并由硬件执行,并且可以多次执行(为每个将要登记的新区域/缓冲区)。除快速存储器登记外,RDMA还定义了无效操作,其使得能够使STag无效,并在以后重新使用该STag(608)。
快速存储器登记和无效操作都被定义为异步操作。它们作为工作请求被发布到RNIC发送队列,并通过关联的完成队列来报告它们的完成。
RDMA定义了两种接收队列-共享和非共享接收队列RQ。共享RQ可以在多个连接之间共享,发布到这种队列的接收WR可以被在不同连接上接收到的发送消息所消耗。非共享RQ总是与一个连接关联,并且发布到这种RQ的WR将被通过此连接接收的发送消息所消耗。
现在参考图7和图8,说明根据本发明的一个实施例的借助支持RDMA的RNIC的iSCSI数据移动操作的卸载。
首先特别参考图7。根据本发明的一个非限制性实施例,常规的RDMA卸载功能可以分为两部分RDMA服务单元700和RDMA消息传送单元701。RDMA消息传送单元701可以处理入站和出站RDMA消息,并且可以使用RDMA服务单元700提供的服务来执行直接放置和递送操作。为了实现iSCSI卸载,可以用iSCSI消息传送单元702来代替和执行iSCSI卸载功能。iSCSI消息传送单元702可以负责处理入站和出站iSCSI PDU,并且可以使用RDMA服务单元700提供的服务来执行直接放置和递送。
RDMA服务单元700提供的服务和接口对于iSCSI和RDMA卸载功能二者来说是相同的。
现在参考图8。除了数据出在硬件中生成(参考标号802)之外,所有的iSCSI PDU都在软件中生成(参考标号801)。生成的iSCSIPDU可以作为发送工作请求发布到发送队列(803)。RNIC通过关联的完成队列报告那些WR的完成(成功发送操作)(804)。
软件负责向接收队列分布缓冲器(805)(例如,使用接收工作请求)。注意,通常在传送缓冲区之前发布接收缓冲区以避免任何不愉快的竞争情况。发布发送和接收缓冲区的特定次序并非本发明的要点并且可以留给实现者。所述缓冲区可以被用于入站控制和未经请求的数据出PDU(806)。可以扩展RNIC以支持两个RQ-一个用于入站iSCSI控制PDU,而另一个用于入站的未经请求的数据出(807)。软件可以使用共享RQ来改进存储器管理和对用于iSCSI控制PDU的缓冲区的利用率(808)。
可以使用完成队列来报告控制接收或未经请求的数据出PDU(809)。可以通过针对消耗RQ中的WQE的iSCSI PDU的完成队列或通过针对数据移动iSCSI PDU的异步事件队列来报告在iSCSI PDU数据中检测到的数据损坏或其他错误(810)。然后,RNIC可以处理下一个PDU(811)。
根据本发明的一个非限制实施例,可以利用用于基于iSCSI和iSER的解决方案的统一软件体系结构来执行使用基于RDMA的机制的iSCSI语义的实现。
现在参考图9,其说明了使用基于RDMA的iSCSI卸载来实现的软件结构。SCSI层900通过iSCSI应用协议与iSCSI驱动器901通信。数据移动器接口902与iSCSI驱动器901、iSER数据移动器903以及iSCSI数据移动器904进行接口连接。其中数据移动器接口902与这些元素进行接口连接的方式可以与由RDMA协会定义的标准数据移动器接口相一致。此类软件结构的一个非限制性优点是iSCSI与iSER软件堆栈之间的软件部件和接口的高级共享。该数据移动器接口允许拆分iSCSI驱动器的数据移动和iSCSI管理功能。简言之,该数据移动器接口保证当SCSI层900请求传送命令(例如,为了完成用于发起方的SCSI命令)或发送/接收iSCSI数据序列(例如,为了完成用于目标方的SCSI命令的一部分)时所有必需的数据传输都将发生。
可以利用由RNIC 906实现的基于RDMA的服务905来卸载iSCSI数据移动器903和iSER数据移动器904的功能。根据本发明的一个实施例,使用RDMA机制来卸载iSCSI功能包括卸载iSCSI目标方和iSCSI发起方功能两者。卸载功能(目标方和/或发起方)中的每一个功能都可以被单独地并独立于其它功能或端点来实现。换言之,发起方可以在无需任何更改或修改的情况下使数据移动操作卸载,并仍然与目标方的任何其它iSCSI实现进行通信。对于卸载的iSCSI目标方功能也同样如此。用于卸载iSCSI数据移动功能的所有RDMA机制都是本地的并且对远程端都是透明的。
现在参考图10,其说明了根据本发明的一个实施例在没有硬件/软件交互的情况下将iSCSI数据移动PDU直接数据放置到SCSI缓冲区。首先,为RNIC提供了SCSI缓冲区的描述(例如,通过软件)(参考标号1001)。每个SCSI缓冲区都可以分别由ITT或TTT来唯一地标识(1002)。所述SCSI缓冲区可以包括一个或多个页或块,并且可以由页-列表或块-列表来表示。
为了执行直接数据放置,RNIC可以执行一个两步解决过程。第一步骤(1003)包括标识给定ITT(或TTT)的SCSI缓冲区,而第二步骤(1004)包括定位列表中的页/块以读/写此页/块。所述第一和第二步骤都可以采用由RDMA定义的地址转换和保护机制,并使用STag和RDMA存储器登记语义来实现iSCSI ITT和TTT语义。例如,该RDMA保护机制可以被用来定位SCSI缓冲区并保护其免受未经请求的存取(1005),并且该地址转换机制可以允许对页-列表或块-列表中的页/块的高效存取(1006)。为了对iSCSI数据移动PDU执行类似于RDMA的远程存储器存取,发起方或目标方软件可以登记SCSI缓冲区(1007)(例如,使用登记存储器区域语义)。存储器登记使得保护块与SCSI缓冲区相关联。以此方式,保护块指向保存有描述SCSI缓冲区的页-列表或块-列表的转换表表项。所述登记的存储器区域可以是零基类型的存储器区域,其允许在iSCSI数据移动PDU中使用缓冲区偏移来对SCSI缓冲区进行存取。
用在iSCSI控制PDU中的ITT和TTT可以获得引用登记的SCSI缓冲区的STag的值(1008)。例如,由发起方生成的SCSI读取命令可以携带等于登记的SCSI缓冲区的STag的ITT。相应的数据入和SCSI响应PDU也可以携带此STag。因此,STag可以被发起方用来执行远程直接数据放置。对于SCSI写入命令,目标方可以登记其为入站的经请求的数据出PDU分配的SCSI缓冲区,并且可以使用等于R2T PDU中的SCSI缓冲区的STag的TTT(1009)。
本发明的此非限制性方法能够利用现有硬件和软件机制来执行iSCSI数据移动操作的高效卸载,保持如iSCSI规范中定义的那些操作的灵活性。
现在参考图11A和图11B,它们说明了根据本发明的一个实施例的使用参考图10描述的RDMA保护和地址转换方法由RNIC来处理数据入和请求的数据出,以及执行将那些PDU所携带的iSCSI有效负载直接数据放置到登记的SCSI缓冲区。此外,RNIC可以跟踪数据入和数据出的数据顺序并强制实施由iSCSI规范定义的iSCSI排序规则,以及在数据事务结束时执行PB的无效。
入站数据入和请求的数据出可以由RNIC非常类似地进行处理(分别由发起方和目标方)。现在将说明对于这些PDU类型都通用的处理。
RNIC首先检测iSCSI数据入和请求的数据出PDU(1101)。这可以通过但不限于使用BHS:Opcode和BHS:TTT字段(如上所述,TTT=h‘FFFFFFFF’表明数据出PDU是未经请求的,并且此类PDU作为控制iSCSI PDU被处理)来完成。RNIC可以将用于数据入PDU的BHS:ITT字段和用于数据出PDU的BHS:TTT字段用作STag(当其分别生成SCSI命令或R2T时,其先前被驱动器所使用)。
RNIC可以查找PB(1102),例如,通过使用描述相应登记的SCSI缓冲区并验证存取权限的STag的索引字段来查找。RNIC可以例如通过使用BHS:BufferOffset来知道所述登记的SCSI缓冲区内存取数据的位置(1103)。然后,RNIC可以使用地址转换机制来解析页/块并执行到登记的SCSI缓冲区的直接数据放置(或直接数据读取)(1104)。
客户软件(驱动器)并不知道由RNIC执行的直接放置操作。除非在请求的数据出PDU具有置位的‘F-位’的情况下,否则没有完成通知。
除了直接放置操作(例如,在其之前),RNIC可以执行入站PDU的顺序验证(1105)。数据入PDU和数据出PDU都携带有DataSN。在数据入的情况下,可以为每个SCSI命令将DataSN置零,在数据出的情况下,可以为每个R2T将DataSN置零(1106)。RNIC可以将ExpDataSN保存在保护块中(1107)。此字段可以在PB初始化时(快速存储器登记)被初始化为零(1108)。借助每个入站数据入或请求的数据出PDU,可以将此字段与BHS:DataSN进行比较(1109)a.如果DataSN=ExpDataSN,则由RNIC接受并处理PDU,并增大ExpDataSN(1110)。
b.如果DataSN>ExpDataSN,则向软件报告错误(1111),诸如通过使用异步事件通知机制(有关的异步错误-排序错误)来报告。然后,PB中的错误位被置位,并且引用此PB(使用STag)的每个入站PDU都将从该点开始被丢弃。这实际上意味着iSCSI驱动器将需要在iSCSI命令级别(或相应地,R2T级别)上进行恢复。
c.最后一种情况是重影PDU的接收(DataSN<ExpDataSN)。在此情况下,接收的PDU被丢弃,并且不向软件报告任何错误(1112)。这允许如iSCSI规范定义的那样来处理重复的iSCSI PDU。
在SCSI读取命令的情况下,发起方接收一个或多个数据入PDU,其后面跟着SCSI响应(1113)。该SCSI响应可以携带BHS:ExpDataSN。此字段表明SCSI响应之前的数据入的数量。为了完成iSCSI排序规则的强制实施,RNIC可以将BHS:ExpDataSN与由该SCSI响应携带的STag(ITT)引用的PB:ExpDataSN相比较。在不匹配的情况下,报告完成错误,表明已经检测到排序错误(1114)。
‘F-位,被置位的所请求的数据出PDU表明此PDU完成了由相应的R2T请求的事务(1115)。在此情况下,将完成通知传递给客户软件(1116)。例如,RNIC可以跳过一个来自接收队列的WQE,并将CQE添加到相应的完成队列,表明数据出事务的完成。目标方软件可以要求此通知以便知道R2T操作是否已经完成,以及其是否可以生成确认整个SCSI写入操作已经完成的SCSI响应。注意,此通知可以是处理入站数据入和请求的数据出PDU时来自RNCI的对软件的仅有的通知。上述排序验证确保了所有数据出都已被成功地接收并被放置到登记的缓冲区。丢失最后一个数据出PDU(携带有置位的‘F-位’)的情况可以由软件(超时机制)所涵盖。
可以由RNIC执行以结束处理数据入PDU和请求的数据出PDU的最后操作是保护块的无效(1117)。可以对数据入PDU和‘F-位’被置位的所请求的数据出PDU执行该操作。所述无效可以在由从PDU报头收集的Stag所引用的PB上执行。可以使用用于请求的数据出的CQE将无效的STag递送给SCSI驱动器,或者在结束SCSI写入命令的SCSI响应的报头(ITT字段)中将无效的STag递送给SCSI驱动器。这允许iSCSI驱动器重新使用释放的STag以便用于下一个SCSI命令。
还可以类似地执行由目标方(1118)登记的区域的无效。注意,一种替代性的无效方法可以是使由接收的SCSI响应中的STag(ITT)引用的PB无效。
现在参考图12,其说明了根据本发明的一个实施例在硬件中处理入站R2T,以及生成数据出PDU。
SCSI写入命令可以导致发起方从目标方接收多个R2T(1201)。每个R2T都可以要求发起方从登记的SCSI缓冲区中的指定位置取回指定数量的数据,并使用数据出PDU将此数据发送给目标方(1202)。R2T携带有由发起方在SCSI命令中提供的ITT(1203)。如上所述,当驱动器生成SCSI命令时,可以由驱动器而不是ITT来使用登记的SCSI缓冲区的STag(1204)。
可以使用BHS:Opcode字段来标识R2T PDU。使用BHS:R2TSN字段,RNIC可以执行对R2T排序的验证(1205)。RNIC将ExpDataSN字段保存在PB中。由于对于单向命令,发起方可以看到R2T或数据入的进入,所以同一字段可以被用于排序验证。对入站R2T的顺序验证可以与以上讨论的用于数据入和数据出的顺序验证的过程相同(1206)。
使用与处理入站RDMA读取请求的机制相同的机制,RNIC可以处理通过了顺序验证的R2T(1207)。RNIC可以使用单独的读取响应工作队列来发布描述了需要通过RNIC传送逻辑发送的数据出的WQE(1208)(在RDMA读取请求的情况下,RNIC可以对描述了RDMA读取响应的WQE进行排队)。传送逻辑可以在发送WQ与读取响应WQ之间做出仲裁,并且可以根据内部仲裁规则处理来自每个WQ的WQE(1209)。
每个接收到的R2T都可以产生单个数据出PDU(1210)。生成的数据出PDU可以携带来自由BHS:ITT(驱动器在SCSI命令生成时将STag放置在该处)引用的登记的SCSI缓冲区的数据。BHS:BufferOffset和BHS:DesireDataTransferLength可以标识SCSI缓冲区中的偏移和数据事务的大小。
当RNIC传输用于F-位被置位的R2T pDU的数据出时,RNIC可以在远程端确认成功接收该数据出PDU之后使由STag(ITT)引用的保护块无效。当将递送相应的SCSI响应PDU时,用于此SCSI写入命令的STag可以被软件重新使用。
一种替代性的用于存储器区域无效的方法可以是使由接收到的SCSI响应中的STag(ITT)引用的PB无效。
出于示例和说明的目的给出了对本发明的描述,并且该描述并非旨在穷举或是将本发明限于所公开的形式。对于本领域的普通技术人员来说,许多修改和变化是显而易见的。实施例的选择和描述是为了最佳地解释本发明的原理、实际应用,并且使得本领域的其它普通技术人员能够针对具有各种修改的适合于所构想的特定用途的各种实施例来理解本发明。
权利要求
1.一种方法,包括使用用于远程直接存储器存取RDMA功能的支持远程直接存储器存取的网络接口控制器RNIC机制来实现互联网小型计算机系统接口iSCSI卸载目标方功能。
2.根据权利要求1所述的方法,还包括单独地并独立于iSCSI发起方功能来卸载iSCSI目标方功能。
3.根据权利要求1所述的方法,其中实现所述iSCSI卸载目标方功能包括使用RDMA写入操作逻辑以任意次序和任意SCSI缓冲区偏移量将数据出有效负载远程直接数据放置到预登记的SCSI缓冲区中。
4.根据权利要求3所述的方法,包括借助于用作操纵标记Stag的目标方任务标记TTT来标识所述预登记的SCSI缓冲区。
5.根据权利要求1所述的方法,其中实现所述iSCSI卸载目标方功能包括使用具有接收工作请求的RDMA接收队列来放置控制iSCSI PDU。
6.根据权利要求5所述的方法,还包括通过关联的完成队列来报告所述接收工作请求的完成。
7.根据权利要求1所述的方法,其中实现所述iSCSI卸载目标方功能包括提供通过iSCSI应用协议与iSCSI驱动器通信的SCSI层;以及提供与所述iSCSI驱动器、用于RDMA的iSCSI扩展(iSER)数据移动器以及iSCSI数据移动器进行接口连接的数据移动器接口。
8.根据权利要求7所述的方法,还包括使用所述数据移动器接口来拆分所述iSCSI驱动器的数据移动和iSCSI管理功能。
9.根据权利要求1所述的方法,其中实现所述iSCSI卸载目标方功能包括将生成的iSCSI PDU作为发送工作请求发布到发送队列,以及通过关联的完成队列来报告所述发送工作请求的完成。
10.根据权利要求1所述的方法,其中实现所述iSCSI卸载目标方功能包括实现RDMA地址转换和保护(ATP)机制以实现对预登记的SCSI缓冲区的直接存取;借助于用作Stag的TTT来标识所述预登记的SCSI缓冲区;以及定位页和块中的至少一个并且对所述页和块中的至少一个执行读取和写入操作中的至少一个操作。
11.一种计算机程序产品,包括使用用于RDMA功能的RNIC机制实现iSCSI卸载目标方功能的指令。
12.根据权利要求11所述的计算机程序产品,其中所述实现iSCSI卸载目标方功能的指令包括单独地并独立于iSCSI发起方功能来卸载iSCSI目标方功能的指令。
13.根据权利要求11所述的计算机程序产品,其中所述实现iSCSI卸载目标方功能的指令包括使用RDMA写入操作逻辑以任意次序和任意SCSI缓冲区偏移量将数据出有效负载远程直接数据放置到预登记的SCSI缓冲区中的指令。
14.根据权利要求13所述的计算机程序产品,包括借助于用作操纵标记Stag的目标方任务标记TTT来标识所述预登记的SCSI缓冲区的指令。
15.根据权利要求11所述的计算机程序产品,其中实现所述iSCSI卸载目标方功能的指令包括使用具有接收工作请求的RDMA接收队列来放置控制iSCSI PDU的指令,并且包括通过关联的完成队列来报告所述接收工作请求的完成的指令。
16.根据权利要求11所述的计算机程序产品,其中实现所述iSCSI卸载目标方功能的指令包括提供通过iSCSI应用协议与iSCSI驱动器通信的SCSI层的指令;以及提供与所述iSCSI驱动器、用于RDMA的iSCSI扩展(iSER)数据移动器以及iSCSI数据移动器进行接口连接的数据移动器接口的指令。
17.根据权利要求16所述的计算机程序产品,还包括使用所述数据移动器接口来拆分所述iSCSI驱动器的数据移动和iSCSI管理功能的指令。
18.根据权利要求11所述的计算机程序产品,其中实现所述iSCSI卸载目标方功能的指令包括将生成的iSCSI PDU作为发送工作请求发布到发送队列的指令,以及通过关联的完成队列来报告所述发送工作请求的完成的指令。
19.根据权利要求11所述的计算机程序产品,其中实现所述iSCSI卸载目标方功能的指令包括实现RDMA地址转换和保护(ATP)机制以实现对预登记的SCSI缓冲区的直接存取的指令、借助于用作Stag的TTT来标识所述预登记的SCSI缓冲区的指令,并包括定位页和块中的至少一个并且对所述页和块中的至少一个执行读取和写入操作中的至少一个操作的指令。
20.一种系统,包括RDMA服务单元;RDMA消息传送单元,可操作为处理入站和出站RDMA消息,并且使用由所述RDMA服务单元提供的服务来执行直接放置和递送操作;以及iSCSI消息传送单元,可操作为执行iSCSI卸载目标方功能并处理入站和出站iSCSI PDU,所述iSCSI消息传送单元适合于使用由所述RDMA服务单元提供的服务来执行将所述PDU携带的iSCSI有效负载直接放置和递送到登记的SCSI缓冲区。
21.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括单独地并独立于iSCSI发起方功能来卸载iSCSI目标方功能。
22.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括使用RDMA写入操作逻辑以任意次序和任意SCSI缓冲区偏移量将数据出有效负载远程直接数据放置到预登记的SCSI缓冲区中。
23.根据权利要求22所述的系统,其中所述iSCSI卸载目标方功能还包括借助于用作操纵标记Stag的目标方任务标记TTT来标识所述预登记的SCSI缓冲区。
24.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括使用具有接收工作请求的RDMA接收队列来放置控制iSCSI PDU,以及通过关联的完成队列来报告所述接收工作请求的完成。
25.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括SCSI层,其通过iSCSI应用协议与iSCSI驱动器通信;以及数据移动器接口,其与所述iSCSI驱动器、用于RDMA的iSCSI扩展(iSER)数据移动器以及iSCSI数据移动器进行接口连接。
26.根据权利要求25所述的系统,其中所述数据移动器接口适合于拆分所述iSCSI驱动器的数据移动和iSCSI管理功能。
27.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括将生成的iSCSI PDU作为发送工作请求发布到发送队列,以及通过关联的完成队列来报告所述发送工作请求的完成。
28.根据权利要求20所述的系统,其中所述iSCSI卸载目标方功能包括实现RDMA地址转换和保护(ATP)机制以实现对预登记的SCSI缓冲区的直接存取;借助于用作Stag的TTT来标识所述预登记的SCSI缓冲区;以及定位页和块中的至少一个并且对所述页和块中的至少一个执行读取和写入操作中的至少一个操作。
全文摘要
一种包括使用用于RDMA(远程直接存储器存取)功能的RNIC(支持远程直接存储器存取的网络接口控制器)机制实现iSCSI(互联网小型计算机系统接口)卸载目标方功能的方法和系统。
文档编号H04L29/08GK101095125SQ200580045757
公开日2007年12月26日 申请日期2005年12月12日 优先权日2005年1月21日
发明者V·马克赫瓦克斯, G·比兰, K·Z·梅思, R·雷西奥, Z·马丘尔斯基 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1