CN114090274A - 网络接口卡、存储装置、报文接收方法和发送方法 - Google Patents
网络接口卡、存储装置、报文接收方法和发送方法 Download PDFInfo
- Publication number
- CN114090274A CN114090274A CN202010759858.1A CN202010759858A CN114090274A CN 114090274 A CN114090274 A CN 114090274A CN 202010759858 A CN202010759858 A CN 202010759858A CN 114090274 A CN114090274 A CN 114090274A
- Authority
- CN
- China
- Prior art keywords
- message
- rdma
- packet
- connector
- shared connector
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 77
- 238000004891 communication Methods 0.000 claims abstract description 13
- 230000004044 response Effects 0.000 claims description 67
- 241001522296 Erithacus rubecula Species 0.000 claims description 4
- 239000011159 matrix material Substances 0.000 abstract 1
- 239000002096 quantum dot Substances 0.000 abstract 1
- 230000008569 process Effects 0.000 description 33
- 238000010586 diagram Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 15
- 238000012790 confirmation Methods 0.000 description 13
- 230000005540 biological transmission Effects 0.000 description 9
- 230000003993 interaction Effects 0.000 description 7
- 238000012546 transfer Methods 0.000 description 5
- 238000013500 data storage Methods 0.000 description 4
- 238000013459 approach Methods 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
- G06F15/17306—Intercommunication techniques
- G06F15/17331—Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/08—Arrangements for detecting or preventing errors in the information received by repeating transmission, e.g. Verdan system
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/1607—Details of the supervisory signal
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/12—Arrangements for detecting or preventing errors in the information received by using return channel
- H04L1/16—Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
- H04L1/1607—Details of the supervisory signal
- H04L1/1635—Cumulative acknowledgement, i.e. the acknowledgement message applying to all previous messages
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/141—Setup of application sessions
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/544—Remote
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开了一种网络接口卡、存储装置、报文接收方法和报文发送方法,涉及存储领域,用于提高采用RDMA网络的存储装置的可靠性,并且提高单个QP连接的存储访问性能。网络接口卡,包括解析器和至少一个共享连接器,解析器,用于将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;第一共享连接器,用于与对端网络设备建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与第一控制器进行通信,其中,第一共享连接器与包含第一控制器在内的多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第一共享连接器对应。
Description
技术领域
本申请涉及存储领域,尤其涉及一种网络接口卡、存储装置、报文接收方法和发送方法。
背景技术
目前许多数据不是存储在本地,而是存储在远端的存储装置中。如图1所示,本申请实施例提供了一种存储系统,包括存储装置11和主机(host)客户端12。存储装置11通过前端网络(front-end fabric)连接主机客户端12,可以为多个主机客户端12提供数据存储服务。随着基于非易失性存储器规范(non volatile memory express,NVMe)的固态驱动器(solid state disk,SSD)的兴起,越来越多的前端网络采用基于交换网的NVMe(NVMe overfabric,NoF)网络。远程直接内存访问(remote direct memory access,RDMA)是NoF网络中的一种标准,可以降低存储装置存取数据的时延。
如图1所示,存储装置11中包括多个控制器111和至少一个网络接口卡(networkinterface card,NIC)112。前端网络采用RDMA网络时,主机客户端可以与一个控制器111建立一对一的队列对(queue pair,QP)连接,这种方式可靠性低,如果对应的控制器故障则导致该主机客户端无法访问存储装置;而且这种方式性能很低,每个主机客户端的访问请求只能由一个控制器处理,浪费了其他控制器的处理能力。主机客户端也可以与多个控制器分别建立一对一的QP连接,但是这种方式可靠性也低,因为每个控制器访问特定的存储空间,如果对应的一个或多个控制器故障则导致该主机客户端仅能访问部分存储空间,主机客户端要感知故障并进行故障恢复处理。
发明内容
本申请实施例提供一种网络接口卡、存储装置、报文接收方法和发送方法,用于提高采用RDMA网络的存储装置的可靠性,并且提高单个QP连接的存储访问性能。
为达到上述目的,本申请的实施例采用如下技术方案:
第一方面,提供了一种网络接口卡,包括解析器和至少一个共享连接器,解析器,用于将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;第一共享连接器,用于与对端网络设备建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与第一控制器进行通信,其中,第一共享连接器与包含第一控制器在内的多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第一共享连接器对应。
本申请实施例提供的网络接口卡,包括解析器和至少一个共享连接器,解析器用于将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;第一共享连接器用于与对端网络设备建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与第一控制器进行通信,其中,第一共享连接器与包含第一控制器在内的多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第一共享连接器对应。存储装置侧的网络接口卡对于主机客户端来说仅有共享连接器可见,但是第一共享连接器可以将接收的来自主机客户端的RDMA报文分发给不同的QP所在的控制器进行处理,因此可以屏蔽不能正常工作的控制器,只要有一个控制器能正常工作即可保证存储装置能够提供存储服务,因此可以提高采用RDMA网络的存储装置的可靠性。并且通过将IO命令请求分发给不同QP所在的控制器进行并行处理,相比于现有方案中同一QP连接的RDMA消息只能由固定的一个控制器进行处理,其性能可提升N倍,N为控制器的数量,因此可以提升单个QP连接的存储访问性能。
在一种可能的实施方式中,第一共享连接器,还用于:如果第一RDMA报文不为确认报文,则将第一RDMA报文存储至第一QP对应的存储空间。该实施方式实现了对RDMA报文进行存储。
在一种可能的实施方式中,第一共享连接器,还用于:如果第一RDMA报文为尾包或单包或确认报文,则向第一QP关联的完成队列CQ提交完成队列条目CQE,CQE用于指示第一RDMA报文对应的RDMA操作完成。该实施方式表明完成了RDMA操作。
在一种可能的实施方式中,第一共享连接器,具体用于:如果第一RDMA报文为SEND消息的首包或单包,则根据第一RDMA报文中非易失性存储器规范NVME提交队列条目SQE中的信息确定第一QP;其中,NVME SQE中的信息对应于第一控制器。该实施方式说明了如何将接收的RDMA报文对应至QP。
在一种可能的实施方式中,第一共享连接器,具体用于:如果第一RDMA报文为RDMAWRITE消息的确认报文、SEND消息的确认报文或者RDMA READ响应消息的首包或单包,则根据第一RDMA报文的报文序列号以及第二RDMA报文的报文序列号与第一QP的对应关系确定第一QP;其中,第二RDMA报文为第一QP发送的RDMA报文;第一RDMA报文的报文序列号与第二RDMA报文的报文序列号对应;第一RDMA报文为RDMA WRITE消息的确认报文时,第二RDMA报文属于RDMA WRITE消息;第一RDMA报文为SEND消息的确认报文时,第二RDMA报文属于SEND消息;第一RDMA报文为RDMA READ响应消息的首包或单包时,第二RDMA报文属于RDMA READ请求消息。该实施方式说明了如何将接收的RDMA报文对应至QP。
在一种可能的实施方式中,第一共享连接器,还用于:如果第一RDMA报文为首包,则保存第一RDMA报文所属的消息的首包与第一QP的对应关系。存储了首包与第一QP的对应关系后,后续接收到与该首包属于同一RDMA消息的中间包或尾包,可以同样对应到第一QP,使得同一RDMA消息的首包、中间包和尾包被同一QP处理。
在一种可能的实施方式中,第一共享连接器,还用于:如果第一RDMA报文为尾包或中间包,则根据分段后的RDMA报文的报文序列号的保序递增性以及第一RDMA报文的报文序列号确定第一RDMA报文对应的首包;根据第一RDMA报文对应的首包以及对应关系确定第一QP。该实施方式实现了同一RDMA消息的首包、中间包和尾包被同一QP处理。
第二方面,提供了一种网络接口卡,包括调度器和至少一个共享连接器,调度器,用于从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,第二共享连接器为至少一个共享连接器的一个;第二共享连接器,用于与对端网络设备建立QP连接,并将第二QP对应的存储空间中的消息以第二远程直接内存访问RDMA报文形式发送给主机客户端;其中,第二共享连接器与多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第二共享连接器对应。
本申请实施例提供的网络接口卡和存储装置,网络接口卡包括调度器和至少一个共享连接器,调度器用于从在位的多个控制器的多个QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,第二共享连接器为所述至少一个共享连接器的一个;共享连接器用于与对端网络设备建立QP连接,并将第二QP对应的存储空间中的消息以第二RDMA报文形式发送给主机客户端;其中,第二共享连接器与多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第二共享连接器对应。调度器可以从多个QP中选择一个QP,由对应的第二共享连接器处理其待发送的RDMA消息,使得只要有一个控制器能够正常工作即可以提供存储服务,因此可以提高采用RDMA网络的存储装置的可靠性。并且不同QP所在的控制器可以对不同IO命令请求进行并行处理,相比于现有方案中同一QP连接的RDMA消息只能由固定的一个控制器进行处理,其性能可提升N倍,N为控制器的数量,因此可以提升单个QP连接的存储访问性能。
在一种可能的实施方式中,第二共享连接器,还用于:如果第二RDMA报文属于RDMAWRITE消息、SEND消息或者RDMA READ请求消息,则保存第二RDMA报文中的报文序列号与第二QP的对应关系。存储了这些命令消息与第二QP的对应关系后,后续接收到与该命令消息对应的数据消息,可以同样对应到第二QP,使得命令消息与对应的数据消息被同一QP处理。
在一种可能的实施方式中,调度器,具体用于:通过轮询调度从与第二共享连接器对应的多个QP中选择第二QP。该实施方式实现了如何选择第二QP。
第三方面,提供了一种报文接收方法,应用于如第一方面及其任一实施方式所述的网络接口卡,该方法包括:解析器将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;第一共享连接器与对端网络设备建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与第一控制器进行通信,其中,第一共享连接器与包含第一控制器在内的多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第一共享连接器对应。
在一种可能的实施方式中,还包括:如果第一RDMA报文不为确认报文,则第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间。
在一种可能的实施方式中,还包括:如果第一RDMA报文为尾包或单包或确认报文,则第一共享连接器向第一QP关联的完成队列CQ提交完成队列条目CQE,CQE用于指示第一RDMA报文对应的RDMA操作完成。
在一种可能的实施方式中,根据第一RDMA报文确定与第一控制器对应的第一队列对QP,包括:如果第一RDMA报文为SEND消息的首包或单包,则第一共享连接器根据第一RDMA报文中非易失性存储器规范NVME提交队列条目SQE中的信息确定第一QP;其中,NVME SQE中的信息对应于第一控制器。
在一种可能的实施方式中,根据第一RDMA报文确定与第一控制器对应的第一队列对QP,包括:如果第一RDMA报文为RDMA WRITE消息的确认报文、SEND消息的确认报文或者RDMA READ响应消息的首包或单包,则第一共享连接器根据第一RDMA报文的报文序列号以及第二RDMA报文的报文序列号与第一QP的对应关系确定第一QP;其中,第二RDMA报文为第一QP发送的RDMA报文;第一RDMA报文的报文序列号与第二RDMA报文的报文序列号对应;第一RDMA报文为RDMA WRITE消息的确认报文时,第二RDMA报文属于RDMA WRITE消息;第一RDMA报文为SEND消息的确认报文时,第二RDMA报文属于SEND消息;第一RDMA报文为RDMAREAD响应消息的首包或单包时,第二RDMA报文属于RDMA READ请求消息。
在一种可能的实施方式中,还包括:如果第一RDMA报文为首包,则第一共享连接器保存第一RDMA报文所属的消息的首包与第一QP的对应关系。
在一种可能的实施方式中,还包括:如果第一RDMA报文为尾包或中间包,则第一共享连接器根据分段后的RDMA报文的报文序列号的保序递增性以及第一RDMA报文的报文序列号确定第一RDMA报文对应的首包;根据第一RDMA报文对应的首包以及对应关系确定第一QP。
第四方面,提供了一种报文发送方法,应用于如第二方面及其任一实施方式所述的网络接口卡,该方法包括:调度器从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,第二共享连接器为至少一个共享连接器的一个;第二共享连接器与对端网络设备建立QP连接,并将第二QP对应的存储空间中的消息以第二远程直接内存访问RDMA报文形式发送给主机客户端;其中,第二共享连接器与多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第二共享连接器对应。
在一种可能的实施方式中,还包括:如果第二RDMA报文属于RDMA WRITE消息、SEND消息或者RDMA READ请求消息,则第二共享连接器保存第二RDMA报文中的报文序列号与第二QP的对应关系。
在一种可能的实施方式中,调度器从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,包括:调度器通过轮询调度从与第二共享连接器对应的多个QP中选择第二QP。
第五方面,提供了一种存储装置,包括如第一方面及其任一实施方式或者如第二方面及其任一实施方式所述的网络接口卡以及多个控制器,网络接口卡与多个控制器中每个控制器分别连接。
关于第三方面至第五方面的技术效果,参照第一方面及第二方面的技术效果。
附图说明
图1为本申请实施例提供的一种存储系统的架构示意图;
图2为本申请实施例提供的一种QP的示意图;
图3为本申请实施例提供的一种可靠连接的QP连接的示意图;
图4为本申请实施例提供的一种RDMA报文的PSN保序递增的示意图;
图5A为本申请实施例提供的一种基于IB协议的SEND消息和SEND消息的确认报文的结构示意图;
图5B为本申请实施例提供的一种基于RoCEv2协议的SEND消息和SEND消息的确认报文的结构示意图;
图6为本申请实施例提供的一种可靠连接的请求端与响应端之间的交互过程示意图;
图7A为本申请实施例提供的一种基于IB协议的RDMAWRITE消息和RDMAWRITE消息的确认报文的结构示意图;
图7B为本申请实施例提供的一种基于RoCEv2协议的RDMAWRITE消息和RDMA WRITE消息的确认报文的结构示意图;
图8为本申请实施例提供的另一种可靠连接的请求端与响应端之间的交互过程示意图;
图9A为本申请实施例提供的一种基于IB协议的RDMAREAD请求消息和RDMAREAD响应消息的结构示意图;
图9B为本申请实施例提供的一种基于RoCEv2协议的RDMAREAD请求消息和RDMAREAD响应消息的结构示意图;
图10为本申请实施例提供的又一种可靠连接的请求端与响应端之间的交互过程示意图;
图11为本申请实施例提供的一种主机客户端与存储装置利用RDMA操作完成IO读写的过程的示意图;
图12为本申请实施例提供的另一种存储系统的架构示意图;
图13为本申请实施例提供的又一种存储系统的架构示意图;
图14为本申请实施例提供的一种报文接收方法的流程示意图;
图15为本申请实施例提供的另一种报文接收方法的流程示意图;
图16为本申请实施例提供的一种报文发送方法的流程示意图;
图17为本申请实施例提供的一种根据RR算法进行调度的示意图;
图18为本申请实施例提供的另一种主机客户端与存储装置利用RDMA操作完成IO读写的过程的示意图。
具体实施方式
如本申请所使用的,术语“组件”、“模块”、“系统”等等旨在指代计算机相关实体,该计算机相关实体可以是硬件、固件、硬件和软件的结合、软件或者运行中的软件。例如,组件可以是,但不限于是:在处理器上运行的处理、处理器、对象、可执行文件、执行中的线程、程序和/或计算机。作为示例,在计算设备上运行的应用和该计算设备都可以是组件。一个或多个组件可以存在于执行中的过程和/或线程中,并且组件可以位于一个计算机中以及/或者分布在两个或更多个计算机之间。此外,这些组件能够从在其上具有各种数据结构的各种计算机可读介质中执行。这些组件可以通过诸如根据具有一个或多个数据分组(例如,来自一个组件的数据,该组件与本地系统、分布式系统中的另一个组件进行交互和/或以信号的方式通过诸如互联网之类的网络与其它系统进行交互)的信号,以本地和/或远程过程的方式进行通信。
首先对本申请涉及的概念进行描述:
本申请涉及的存储装置可以称为存储服务器、存储阵列、刀片服务器等,对名称不作限定。存储装置可以包括至少一个控制器和至少一个网络接口卡(network interfacecard,NIC)。控制器可以包括但不限于处理器和存储器,处理器运行操作系统和应用程序。
本申请实施例涉及的处理器可以是一个芯片。例如,可以是现场可编程门阵列(field programmable gate array,FPGA),可以是专用集成芯片(application specificintegrated circuit,ASIC),还可以是系统芯片(system on chip,SoC),还可以是中央处理器(central processor unit,CPU),还可以是网络处理器(network processor,NP),还可以是数字信号处理电路(digital signal processor,DSP),还可以是微控制器(microcontroller unit,MCU),还可以是可编程控制器(programmable logic device,PLD)或其他集成芯片。
本申请实施例涉及的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(dynamic RAM,DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rateSDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(directrambus RAM,DR RAM)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
本申请实施例涉及的NIC也可以称为网络接口控制器(network interfacecontroller)、网络适配器(network adapter)、网卡等,或局域网适配器(LAN adapter),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件。
存储装置为了提高系统的可靠性,会采用多控制器架构方案,支持多个控制器为一个或多个主机客户端提供数据存储服务。中高端存储装置会采用多主机(multi-host)NIC实现前端网络接口,多个控制器分别通过不同的高速串行计算机扩展总线标准(peripheral component interconnect,PCIe)通道共用一个NIC,每个控制器作为一个独立的网络节点。
存储装置通过前端网络连接主机客户端,可以为多个主机客户端提供数据存储服务。随着NVMe SSD的兴起,主机客户端访问存储装置的协议从小型计算机系统接口(smallcomputer system interface,SCSI)向NVMe过渡,相应地,前端网络也从光纤通道(fibrechannel,FC)网络、传输控制协议/网际协议(transmission control protocol/internetprotocol,TCP/IP)网络向NoF网络迁移。
NoF协议支持内存(memory)类型和消息(message)类型的操作,其中,PCIe支持内存类型的操作,FC支持消息类型的操作,RDMA支持内存类型和消息类型的操作。
RDMA可以通过前端网络将存储装置的存储空间中的数据作为消息,以RDMA报文形式传输至主机客户端的存储空间,或者,通过前端网络将主机客户端的存储空间中的数据作为消息,以RDMA报文形式传输至存储装置的存储空间。这些传输和拷贝工作主要由存储装置和主机客户端的网络接口卡(例如,RDMA网络接口卡(RDMA network interface card,RNIC))执行,不需要处理器执行,因此不影响主机客户端的性能。
目前,RDMA的硬件实现方式包括无限带宽(Infiniband,IB)、基于融合以太网的RDMA(RDMA over converged ethernet,RoCE)(包括RoCEv1和RoCEv2)、互联网广域RDMA协议(internet wide area RDMA protocol,iWARP)等。其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输。RoCE和iWARP都是基于以太网的RDMA技术,支持相应的动词(Verbs)接口,RoCE也支持硬件级别保证可靠传输。
如图2所示,RDMA是传输层网络协议,在通道适配器(channel adapter,CA)中使用队列对(queue pair,QP)实现对消费者(consumer)的数据(作为消息)进行发送和接收。每个QP包含一个发送队列(send queue,SQ)和一个接收队列(receive queue,RQ),其中,SQ负责消息的发送,RQ负责消息的接收。每个QP的SQ和RQ可以分别关联一个完成队列(completion queue,CQ)。每个QP都拥有自己的连接上下文(connection context)用于维护其连接状态,SQ、RQ以及CQ也分别拥有自己的队列上下文(queue context)用于维护其队列使用状态。
本申请实施例中涉及的消费者指使用QP进行消息收发的主体,一般指软件进程,例如NoF协议软件。
发送消息时,消费者向本节点(作为请求端(requester))的QP中的SQ提交(post)工作队列元素(work queue element,WQE),该WQE包括RDMA操作类型、指向待传输的消息的存储空间的地址、待传输的消息的大小。待传输的数据作为一个消息,消息的长度支持0字节~4G字节,网络接口卡根据路径最大传输单元(path maximum transmission unit,PMTU)将WQE指向的数据分段(segmented)成报文(packet)后发送到网络。当网络接口卡将一个WQE指向的消息的所有内容传输完成后,向与SQ关联的CQ提交一个完成队列元素(completion queue element,CQE),以通知消费者完成了其提交的某个WQE指示的RDMA操作。
对于接收SEND消息,接收消息前,消费者预先向本节点(作为响应端(responder))的QP中的RQ提交WQE,该WQE包括能够存储数据的存储空间的指针、能够存储数据的存储空间的大小。网络接口卡从前端网络接收数据后写入到RQ的WQE指向的存储空间。当网络接口卡完成数据的接收后,向与RQ关联的CQ提交一个CQE,以通知消费者其完成了一个RDMA消息的接收。对于接收RDMA READ响应消息,网络接口卡将接收的数据写入对应的RDMA READ操作的WQE指向的存储空间,并且对于接收RDMA READ响应消息的尾包或单包,当网络接口卡完成数据的接收后,向与SQ关联的CQ提交一个CQE,以通知消费者完成了其提交的某个WQE指示的RDMA READ操作。对于接收RDMA WRITE消息或RDMA SEND消息的确认报文,网络接口卡向与SQ关联的CQ提交一个CQE,以通知消费者完成了其提交的某个WQE指示的RDMA WRITE操作或RDMA SEND操作。关于SEND消息、RDMA READ响应消息和RDMA WRITE消息的确认报文见后面的描述。
RDMA支持可靠连接的QP连接和不可靠连接的QP连接,其中可靠连接的QP连接只支持一对一通信模型,即一个节点上的一个QP只能与其它节点的一个QP建立QP连接,任何QP都不能同时与其它节点的多个QP建立QP连接。示例性的,如图3所示,节点1的消费者A的QPx与节点2的消费者B的QP a建立QP连接,节点1的消费者A的QP x不能再同时与其他QP(例如QP b、QP c)建立QP连接。NoF使用支持可靠连接的QP连接的RDMA进行通信。
RDMA中接收的可靠连接的QP连接的报文应遵循严格保序的要求,响应端根据依次接收的报文中的报文序列号(packet sequence numbers,PSN)是否严格保序递增来决定是否接收报文。如图4中A所示,只有当报文的PSN严格递增(例如,报文的PSN依次等于n、n+1、n+2、n+3)时响应端才接收报文。如图4中B所示,当报文的PSN发生跳变(例如,报文的PSN缺少n+2)时,响应端会丢弃该QP后续所有PSN未严格递增的报文。如图4中C所示,当报文的PSN与已接收报文的PSN重复(例如,重复接收到PSN为n+1的报文)时则响应端会丢弃重复报文。
RDMA支持的消息类型的操作包括发送操作(SEND operation),该操作涉及处理器,适用于传输控制类报文(或称命令消息)。
RDMA支持的内存类型的操作包括RDMA读操作(RDMA READ operation)、RDMA写操作(RDMA WRITE operation)。这些操作不涉及处理器,数据的读或写都通过网络接口卡操作存储空间来完成,适用于传输数据类报文(或称数据消息)。
下面分别对发送操作、RDMA读操作和RDMA写操作进行说明:
发送操作
发送操作也可以称为推送操作(push operation)或具有通道方式(havingchannel semantics)。请求端(requester)将数据推送给响应端(responder),而不必知道数据在响应端中存储的位置。响应端的通道适配器(channel adapter)将数据放入其QP的下一个可用存储空间,存储空间由QP的RQ中位于头部的WQE指示。
请求端可以通过发送SEND消息来发起发送操作,该消息中包括待推送给响应端的数据。数据的长度可以在0字节到231(4G)字节之间,如果数据的长度大于路径最大传输单元(path maximum transmission unit,PMTU),将按照PMTU大小分段为多个报文,响应端再将这些报文重新组合得到数据。对于可靠连接,如果数据是短消息(即不必分段为多个报文),响应端针对每个报文向请求端发送确认(ACK)报文;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)报文,或者,针对同一消息的连续多个报文向请求端发送一个确认报文,或者,针对消息的尾包向请求端发送确认报文;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)报文,例如,一个PSN为X的SEND消息的确认报文可以用于确认该SEND消息之前的PSN小于X的消息已被响应端成功接收。
每个SEND消息中可以包括四字节的立即数(immediate data,ImmDt),如果要包括立即数,则在SEND消息的最后一个报文的附加头字段中(立即扩展传输头或ImmDt字段)中包括该立即数。
示例性的,假设SEND消息被分段为三个报文,则基于IB协议的SEND消息和SEND消息的确认报文的结构如图5A所示,基于RoCEv2协议的SEND消息和SEND消息的确认报文的结构如图5B所示,可靠连接的请求端与响应端之间的交互过程如图6所示。
其中,本地路由头(local route header,LRH)字段用于通过子网中的交换机进行路由。
全局路由头(global route header,GRH)字段用于路由至发送方的本地子网之外的目标。
不变CRC(invariant CRC,ICRC)字段覆盖了报文不应该改变的所有字段,并对这些字段进行CRC校验。
可变CRC(variant CRC,VCRC)字段覆盖了报文的所有字段,并对这些字段进行CRC校验。
确认扩展传输头(ACK extended transport header,AETH)包括确认报文的附加传输字段,其包含在SEND消息的每个确认报文中。
媒体访问控制(media access control,MAC)字段用于通过以太网子网中的交换机进行二层转发。
互联网协议(internet protocol,IP)字段用于通过交换机进行三层转发。
用户数据报协议(user datagram protocol,UDP)字段用于指示报文的载荷是RDMA消息。
基本传输头(base transport header,BTH)字段用于指示目的QP(destinationQP)、操作码(operation code)、报文序列号(packet sequence numbers,PSN)和分区(partition)。BTH字段中的操作码字段(OpCode field)决定了SEND消息的起始和结束:
对于SEND消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“SENDOnly”或“SEND Only with Immediate”,表示该消息不可拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“SEND Only”或“SEND Only withImmediate”,并且消息中不存在数据负载字段。对于BTH操作码为“SEND Only”的SEND消息,其他字段如图5A或图5B中的报文1所示;对于BTH操作码为“SEND Only with Immediate”的SEND消息,其他字段如图5A或图5B中的报文3所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“SEND First”,表示该报文为首包;中间的报文的BTH操作码为“SEND Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“SEND Last”或“SEND Last with Immediate”,表示该报文为尾包。
对于SEND消息的确认报文来说,BTH操作码为“Acknowledge”。
对于给定的请求端的QP,一旦启动多包的发送操作,在操作码为“SEND Last”或“SEND Last with Immediate”的报文之前,不能发送其他SEND消息、RDMA WRITE消息或RDMA READ请求消息。
响应端直到最后一个带有“SEND Last”或“SEND Last with Immediate”操作码的报文到达,才知道数据的最终长度。
需要说明的是,响应端在完成对SEND消息的单包或尾包完成接收后,向本节点的RQ关联的CQ上报CQE,请求端在完成发送操作的发送流程(接收SEND消息的单包或尾包对应的确认报文)后,向本节点的SQ关联的CQ提交CQE。
RDMA写操作
RDMA写操作用于请求端将数据写入响应端的存储空间。
在允许请求端进行RDMA写操作之前,响应端首先分配一个存储空间供响应端的QP(或QP组)访问。响应端的通道适配器将一个32位M_Key密钥与此存储空间的虚拟地址相关联。响应端将该存储空间的虚拟地址、长度和M_Key密钥发送给可以访问该内存区域的请求端。示例性的,可以通过前文所述的发送操作来将上述信息发送给请求端。
请求端可以通过发送RDMA WRITE消息来发起RDMA写操作,该消息中包括待写至响应端的数据、响应端的存储空间的虚拟地址、数据的长度和M_Key密钥。数据的长度可以在0字节到231字节之间,与发送操作类似的,如果数据的长度大于PMTU,将按照PMTU大小分段为多个报文,响应端再将这些报文重新组合得到数据。对于可靠连接,如果数据是短消息(即不必分段为多个报文),响应端针对每个报文向请求端发送确认(ACK)报文;如果数据是长消息(即分段为多个报文),响应端可以针对每个报文向请求端发送确认(ACK)报文,或者,针对同一数据的连续多个报文向请求端发送一个确认报文,或者,针对报文的尾包向请求端发送确认报文;另外,无论数据是短消息还是长消息,响应端可以针对之前接收的多个报文发送一个确认(ACK)报文,例如,一个PSN为X的RDMA WRITE消息的确认报文可以用于确认该RDMA WRITE消息之前的PSN小于X的消息已被响应端成功接收。
示例性的,假设RDMA WRITE消息被分段为三个报文,则基于IB协议的RDMA WRITE消息和RDMA WRITE消息的确认报文的结构如图7A所示,基于RoCEv2协议的RDMA WRITE消息和RDMA WRITE消息的确认报文的结构如图7B所示。可靠连接的请求端与响应端之间的交互过程如图8所示。
其中,RDMA扩展传输头(RDMA extended transport header,RETH)包括RDMA操作的附加传输字段。例如,包括目标存储空间的虚拟地址、RDMA操作的数据的长度和M_Key密钥。响应端根据M_Key密钥确定请求端具有访问对应的虚拟地址的权限,将该长度指示的数据存储至虚拟地址指向的存储空间中。
与SEND操作类似的,BTH字段中的操作码字段(OpCode field)决定了RDMA WRITE消息的起始和结束:
对于RDMA WRITE消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“RDMA WRITE Only”或“RDMA WRITE Only with Immediate”,表示该消息不拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“RDMA WRITE Only”或“RDMA WRITE Onlywith Immediate”,并且报文中不存在数据负载字段。对于BTH操作码为“RDMA WRITE Only”的RDMA WRITE消息,其他字段如图7A或图7B中的报文1所示;对于BTH操作码为“RDMA WRITEOnly with Immediate”的RDMAWRITE消息,在如图7A或图7B中的报文1的RETH字段之后增加ImmDt字段,其他字段如报文1所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“RDMA WRITE first”,表示该报文为首包;中间的报文的BTH操作码为“RDMAWRITE Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“RDMA WRITE Last”或“RDMAWRITE Last with Immediate”,表示该报文为尾包。
对于RDMAWRITE消息的确认报文来说,BTH操作码为“Acknowledge”。
RDMA读操作
RDMA读操作是RDMA写操作的反向操作,用于请求端读取响应端的存储空间中的数据。
在允许请求端进行RDMA读操作之前,响应端首先允许请求端访问其虚拟地址,即将RDMA读操作要读取的数据的虚拟地址、长度和M_Key密钥发送给请求端。示例性的,可以通过前文所述的发送操作来将上述信息发送给请求端。
请求端可以通过发送RDMA READ请求(RDMA READ Request)消息来发起RDMA读操作,该消息中包括响应端的存储空间的虚拟地址、RDMA操作的数据的长度和M_Key密钥。响应端向请求端发送RDMA READ响应(RDMA READ Response)消息,该消息中包括读取的数据。待读取的数据的长度可以在0字节到231字节之间,如果长度大于PMTU,将按照PMTU大小分段为多个报文,以便通过多个RDMAREAD响应消息的报文进行传输,请求端再将这些报文重新组合得到数据。对于可靠连接,RDMAREAD响应消息没有相应的确认报文,请求端如果发现RDMA READ响应消息丢包,会重新发起RDMA读操作。
示例性的,假设RDMA READ响应消息被分段为三个报文,则基于IB协议的RDMAREAD请求消息和RDMA READ响应消息的结构如图9A所示,基于RoCEv2协议的RDMA READ请求消息和RDMA READ响应消息的结构如图9B所示。可靠连接的请求端与响应端之间的交互过程如图10所示。
BTH字段中的操作码字段(OpCode field)决定了消息(RDMA READ请求消息或RDMAREAD响应消息)的起始和结束:
对于RDMA READ请求消息来说,BTH操作码为“RDMA READ Request”。
对于RDMA READ响应消息来说,如果数据的长度小于或等于PMTU,则使用BTH操作码“RDMA READ Response Only”,表示该消息不可拆分(即为单包)。
如果数据的长度为零,则使用BTH操作码“RDMA READ Response Only”,并且RDMA读响应消息中不存在数据负载字段,但所有其他字段如图9A或图9B中的报文1所示。
如果数据的长度大于PMTU,则第一个报文的BTH操作码为“RDMA READ Responsefirst”,表示该报文为首包;中间的报文的BTH操作码为“RDMA READ Response Middle”,表示该报文为中间包;最后一个报文的BTH操作码为“RDMA READ Response Last”,表示该报文为尾包。
主机客户端与存储装置利用上述RDMA操作完成IO读写的过程如图11所示:
主机客户端首先在网络中发现存储装置并与存储装置建立连接。
在主机客户端向存储装置进行IO写过程中,主机客户端向存储装置发送SEND消息,该报文的数据负载即为IO写命令,对于可靠连接,存储装置可以向主机客户端发送SEND消息的确认报文,表示接收到IO写命令。然后存储装置(作为请求端)向主机客户端(作为响应端)发送RDMA READ请求消息,主机客户端向存储装置发送RDMA READ响应消息,该报文的数据负载即为IO数据。存储装置对IO数据进行持久化存储后,即将IO数据存储至硬盘驱动器(hard disk drive,HDD)或固态硬盘(solid state drives,SSD)等存储介质后,向主机客户端发送SEND消息,该报文中包括IO响应,表示完成IO写过程,主机客户端向存储装置发送SEND消息的确认报文,表示接收到IO响应。
在主机客户端向存储装置进行IO读过程中,主机客户端向存储装置发送SEND消息,该报文的数据负载即为IO读命令,对于可靠连接,存储装置可以向主机客户端发送SEND消息的确认报文,表示接收到IO读命令。存储装置获取IO数据后,即从HDD或SSD等存储介质获取IO数据后,存储装置(作为请求端)向主机客户端(作为响应端)发送RDMA WRITE消息,该报文的数据负载即为IO数据,主机客户端向存储装置发送RDMA WRITE消息的确认报文。存储装置向主机客户端发送SEND消息,该报文中包括IO响应,表示完成IO读过程,主机客户端向存储装置发送SEND消息的确认报文,表示接收到IO响应。
从中可以看出,完整的IO写过程是通过SEND操作来传递命令消息(例如命令请求和命令应答),通过RDMAREAD操作来传递数据消息;完整的IO读过程是通过SEND操作来传递命令消息,通过RDMA WRITE操作来传递数据消息。
基于图1所示的存储系统,如图12所示,存储装置11与主机客户端12之间采用RDMA来实现前端网络时的架构如图12所示。
存储装置11的每个控制器111中实现NoF协议软件(也可以称为NoF协议栈)和驱动(driver),主机客户端12中也实现NoF协议软件和驱动,NoF协议软件和驱动运行在处理器中,NoF协议软件作为应用程序,驱动为NoF协议软件提供了控制网络接口卡的接口。
存储装置11的每个控制器111作为一个节点对应至少一个QP,多个控制器111共用第一网络接口卡(例如RNIC)112。主机客户端12包括第二网络接口卡(例如RNIC)121,根据需要可以通过第二网络接口卡121使用1个QP与存储装置11的中1个控制器111的QP建立可靠连接,也可以使用多个QP与存储装置11的多个控制器111的QP分别建立可靠连接。
如前文所述的,这种方式可靠性低,如果对应的控制器故障则导致该主机客户端无法访问存储装置;而且这种方式性能很低,每个主机客户端的访问请求只能由一个控制器处理,浪费了其他控制器的处理能力。主机客户端也可以与多个控制器建立一对多的QP连接,但是这种方式可靠性也低,因为每个控制器访问特定的存储空间,如果对应的一个或多个控制器故障则导致该主机客户端仅能访问部分存储空间;而且这种方式的组网规模小,因为QP连接的数量是有限的,每个主机客户端占用的QP连接数量越多,则存储装置可支持的同时访问的主机客户端的数量就越少。
为此,如图13所示,本申请实施例提供了另一种网络接口卡、存储装置和存储系统。
存储装置11包括多个控制器111和至少一个网络接口卡(例如RNIC)112。
网络接口卡112中包括解析器(parser)1121、调度器1122、至少一个共享连接器1123以及QP缓存1124。解析器1121、调度器1122和至少一个共享连接器1123可以是专用集成电路(application specific integrated circuit,ASIC)芯片模块,可以是烧录到可编程逻辑器件(programble logic device,PLD)的固件(firmware),也可以是处理器、微处理器或嵌入式处理器运行的软件模块,本申请不作限定。
在每个控制器111上分别建立至少一个QP(也可以称为SQ/RQ对,名称不作限定)以及与至少一个QP关联的CQ。共享连接器1123与多个控制器111分别进行连接,并且多个控制器中每个控制器111与共享连接器1123对应一个QP。网络接口卡112通过将多个控制器111中的QP的WQE(SQ的WQE和RQ的WQE)缓存(cache)至网络接口卡112的QP缓存1124中来实现对QP的操作。
可以由主机客户端12发起请求来与存储装置11的至少一个共享连接器1123建立至少一条QP连接,该QP连接可以为可靠连接或不可靠连接。也就是说,存储装置11通过至少一个共享连接器1123分别与主机客户端12(的至少一个QP)建立至少一条QP连接,每条QP连接对应一个共享连接器1123以及每个控制器111的一个QP。上述一个共享连接器1123以及每个控制器111的一个QP可以合称为一个QP组,即一条QP连接对应一个QP组,并且对应QP组内一个共享连接器1123和每个控制器111的一个QP。一条QP连接对应的控制器数可以随着控制器的上下电而动态增加或减少。
该共享连接器1123对主机客户端12可见而控制器111中各个QP对主机客户端12不可见,即存储装置11的第一网络接口卡112通过共享连接器1123与主机客户端12的第二网络接口卡121通信,并且与主机客户端12的一个QP之间建立一条QP连接。
可以将标准协议中RDMA QP中的队列上下文(queue context)承载在QP上,连接上下文(connection context)承载在共享连接器1123上。一个QP组内所有QP都使用同一个连接上下文,使用一套保序递增的PSN。
对于存储装置11接收来自主机客户端12的第一RDMA报文:
解析器1121,用于将接收的第一RDMA报文分发给至少一个共享连接器1123中的一个共享连接器1123。
共享连接器1123,用于与对端网络设备(例如主机客户端)建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一QP,以实现与第一控制器进行通信,从而将第一RDMA报文通知给对应的消费者。其中,多个控制器111包含第一控制器。
具体的,无论是命令消息还是数据消息,同一消息都可以被分段为多个报文,而可用于分发的信息一般只存在于消息的第一个报文内。共享连接器1123根据负载均衡原理将IO命令请求的第一个报文分发给正常工作的控制器111进行存储并保存第一个报文与控制器111对应关系,使得来自一个主机客户端12的不同IO命令请求及对应的数据消息可以被分发到不同的控制器111并行处理,提升处理性能。如果后续接收到该消息的后续报文,共享连接器1123可以利用RDMA传输的保序特性而将后续报文对应到第一个报文,根据对应的第一个报文以及第一个报文与控制器111的对应关系来分发到对应的控制器111,保持同一消息的报文在分发上的一致性。
对于不同消息,如果接收到命令消息,则共享连接器1123根据负载均衡原理分发给正常工作的控制器111进行存储并保存命令消息与控制器111对应关系,使得来自一个主机客户端12的多个命令消息可以被分发到不同的控制器111并行处理,提升处理性能。控制器完成对IO读写请求消息的处理后,发起IO数据传输操作,即由本控制器向对应的QP提交对应的RDMA写操作或RDMA读操作的WQE。第一共享连接器在接收到RDMA写操作的确认报文或RDMA读操作的响应消息后,根据第一RDMA报文的PSN分发给发起该操作的第一控制器的第一QP,保持命令消息和数据消息在分发上的一致性。
对于存储装置11向主机客户端12发送第二RDMA报文:
调度器1122,用于从在位的多个控制器111的多个QP中选择一个有消息待发送的第二QP。
共享连接器1123,用于向主机客户端12发送第二QP对应的存储空间中的第二RDMA报文。
具体的,调度器1122确定有控制器111要发送消息后,按照调度算法选择对应的共享连接器来发送消息,由共享连接器1123通过对应的QP连接发送给对应的主机客户端12,从而实现公平发送。并且对于同一QP连接的来自不同控制器111的消息,在发送给主机客户端12之前,保证PSN保序递增,使主机客户端12以为在与存储装置11的一个QP进行通信。
综上所述,多个控制器111可以并行工作为同一条QP连接提供存储服务,当有控制器111发生故障时只要有一个控制器111正常工作,可以将后续的消息重定向分发给正常工作的控制器111处理,从而保证主机客户端12访问存储装置11中的存储空间,提高可靠性,实现存储装置11的控制器的主用-主用(active-active,AA)功能。并且通过同一QP连接接收的不同IO命令请求可以分发给不同QP所在的控制器进行并行处理,因此可以提升单个QP连接的存储访问性能。
对于接收消息,存储装置的网络接口卡可以执行如图14所示的报文接收方法,该方法包括:
S1401、解析器接收来自主机客户端的第一RDMA报文,并将第一RDMA报文分发给至少一个共享连接器中的第一共享连接器。
对端网络设备(例如主机客户端)在前端网络中发现存储装置,并通过至少一个QP与存储装置的第一共享连接器建立至少一条QP连接。这样,主机客户端即可以通过QP连接与存储装置互相传输数据。
第一RDMA报文可以为命令消息的报文或数据消息的报文,其中,命令消息的报文包括SEND消息、SEND消息的确认报文,数据消息的报文包括RDMA WRITE消息的确认报文、RDMA READ响应消息。
解析器可以根据第一RDMA报文中的队列对编号(queue pair number,QPN)确定对应的QP连接以及对应的第一共享连接器,并将第一RDMA分发给该第一共享连接器。QPN是QP连接是唯一的标识,因此可以用于确定对应的QP连接。
如前文所述的,一条QP连接对应一个QP组,并且对应QP组内一个共享连接器和每个控制器对应的一个QP,因此,根据QPN不仅可以确定对应的QP连接,还可以确定与该QP连接对应的QP组以及QP组内的共享连接器和QP。
S1402、第一共享连接器根据第一RDMA报文确定与第一控制器对应的第一QP以实现与第一控制器进行通信。
如图15所示,步骤S1402包括S14021-S14025:
S14021、第一共享连接器对第一RDMA报文进行合法性校验。
合法性校验包括但不限于ICRC校验、确定是否丢包以及确定是否重复接收报文。其中,对于确认报文,合法性校验包括ICRC校验;对于其他消息,合法性校验包括ICRC校验、确定是否丢包以及确定是否重复接收报文。
对于可靠连接的QP连接来说,同一QP连接的RDMA报文的PSN保序递增,如果该第一共享连接器接收的RDMA报文的PSN未保序递增,则可以确定发生了丢包;如果该第一共享连接器接收的RDMA报文的PSN有重复,则可以确定重复接收了报文。
如果ICRC校验不通过或者发生了丢包,则丢弃第一RDMA报文并向主机客户端发送否定应答(NACK),以通知主机客户端进行重传。如果重复接收了报文,则丢弃第一RDMA报文。只有合法性校验通过的RDMA报文才会进行下一步处理。
S14022、如果第一RDMA报文为SEND消息的首包或单包,则第一共享连接器根据第一RDMA报文中的非易失性存储器规范(non-volatile memory express,NVME)提交队列条目(submission queue entry,SQE)中的信息确定第一RDMA报文对应的第一QP。
如果第一网络接口卡连接一个客户端,并且第一RDMA报文为SEND消息的首包或单包,则第一共享连接器可以根据第一RDMA报文中的NVME SQE中的信息确定第一RDMA报文对应的第一QP。如果第一网络接口卡连接多个客户端,并且第一RDMA报文为SEND消息的首包或单包,则第一共享连接器可以根据第一RDMA报文中的NVME SQE中的信息以及客户端地址或QP连接确定第一RDMA报文对应的第一QP。第一网络接口卡可以根据其中的客户端地址或QP连接对接收的来自不同客户端的IO命令请求进行负载均衡。
本申请实施例中,对RDMA消息进行分段得到多个RDMA报文,首包指该多个RDMA报文中的第一个RDMA报文,尾包指该多个RDMA报文中的最后一个RDMA报文,中间包指该多个RDMA报文中的其他RDMA报文。单包指不对RDMA消息进行分段的RDMA报文,即该RDMA报文即为完整的RDMA消息。
例如,首包指RDMA报文的BTH操作码为“SEND First”、“RDMA WRITE first”或“RDMA READ Response first”等。
单包指RDMA报文的BTH操作码为“SEND Only”、“SEND Only with Immediate”、“RDMA WRITE Only”、“RDMA WRITE Only with Immediate”或“RDMA READ Response Only”等。
NVME SQE中的信息包括命名空间标识(namespace ID,NSID)、逻辑块地址(logical block address,LBA)。
示例性的,如果第一RDMA报文是命令消息(例如SEND消息),则第一共享连接器根据第一RDMA报文中的NVME SQE信息(例如NSID和/或LBA)确定第一RDMA报文对应第一QP。原因在于,NVME SQE中的信息与控制器是多对一的,即多个NVME SQE信息对应一个控制器,从而根据NVME SQE中的信息可以确定对应的第一控制器。而一个QP组中属于某一个控制器的QP是唯一的,因此可以确定第一控制器中的第一从QP,即NVME SQE中的信息与控制器中的QP也是多对一的。
S14023、如果第一RDMA报文为RDMA WRITE消息的确认报文、SEND消息的确认报文或者RDMA READ响应消息的首包或单包,则第一共享连接器根据第一RDMA报文的PSN以及第二RDMA报文的PSN与第一QP的对应关系确定第一RDMA报文对应的第一QP。
中间包指RDMA报文的BTH操作码为“SEND Middle”、“RDMA WRITE Middle”或“RDMAREAD Response Middle”等。
尾包指RDMA报文的BTH操作码为“SEND Last”、“SEND Last with Immediate”、“RDMA WRITE Last”或“RDMA READ Response Last”等。
第二RDMA报文为第一QP发送的RDMA报文;第一RDMA报文的PSN与第二RDMA报文的PSN对应:
第一RDMA报文为RDMA WRITE消息的确认报文时,第二RDMA报文属于RDMA WRITE消息,第一RDMA报文的PSN与第二RDMA报文的PSN相同。
第一RDMA报文为SEND消息的确认报文时,第二RDMA报文属于SEND消息,第一RDMA报文的PSN与第二RDMA报文的PSN相同。
第一RDMA报文为RDMA READ响应消息的首包或单包时,第二RDMA报文属于RDMAREAD请求消息,第一RDMA报文的PSN相对于第二RDMA报文的PSN保序递增。例如,假设第二RDMA报文的PSN为1,第一RDMA报文的PSN即从1开始保序递增。
也就是说,某一QP请求发送属于一个IO命令请求的数据操作或命令响应(例如RDMA WRITE消息、SEND消息或RDMA READ请求消息)的第二RDMA报文,第一共享连接器可以保存该第二RDMA报文的PSN与该QP(后文中称为第二QP)的对应关系。之后,第一共享连接器接收到属于同一IO操作的消息(RDMA WRITE消息的确认报文、SEND消息的确认报文或RDMAREAD响应消息)的第一RDMA报文,第一RDMA报文的PSN与第二RDMA报文的PSN是对应的,第一共享连接器通过第一RDMA报文的PSN确定对应的第二RDMA报文的PSN,再根据上述第二RDMA报文的PSN与第二QP的对应关系可以确定请求发送第二RDMA报文的第二QP,此时第二QP与第一QP为同一QP。
另外,对于步骤S14022-S14023,如果第一RDMA报文为首包,则第一共享连接器可以保存第一RDMA报文所属的消息的首包与第一QP的对应关系,即保存第一RDMA报文所属的消息的首包与第一QP所属的第一控制器的对应关系,例如保存第一RDMA报文的PSN与第一QP所属的第一控制器的标识的对应关系。以便第一共享连接器能够将与第一RDMA报文属于同一消息的后续RDMA报文(中间包或尾包)匹配到对应的第一控制器和第一QP。
S14024、如果第一RDMA报文为尾包或中间包,则第一共享连接器根据分段后的RDMA报文的PSN的保序递增性以及第一RDMA报文的PSN确定第一RDMA报文对应的首包;并根据第一RDMA报文对应的首包以及上述首包与第一QP的对应关系确定第一QP。
如图4中所描述的,某一消息分段后的RDMA报文的PSN保序递增,因此,对于尾包或中间包的RDMA报文,通过其PSN即可确定同一消息的首包。结合首包与第一QP的对应关系即可确定第一QP。
S14025、第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间,和/或,向第一QP关联的CQ提交CQE。
在确定第一RDMA报文对应的第一QP后,第一共享连接器与第一控制器进行通信的过程可以包括:第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间,和/或,向第一QP关联的CQ提交CQE。
其中,CQE用于指示第一RDMA报文对应的RDMA操作(例如SEND操作、RDMA WRITE操作、RDMA READ操作)完成。第一QP为至少一个控制器中的一个控制器的与第一共享连接器对应的QP连接相对应的QP。一个QP组中属于某一个控制器的QP是唯一的,而一个QP组是与一条QP连接对应的,所以第一QP可以与第一共享连接器对应的QP连接相对应。
第一QP对应的存储空间也可以指第一QP所在的控制器对应的存储空间。例如,对于承载IO命令的RDMA SEND消息,可以存储到第一QP的RQ的WQE指向的存储空间,对于承载IO写数据的RDMA READ响应消息,可以存储至第一QP所在的控制器在发送RDMA READ消息时申请的存储空间,而不是存储到QP的RQ的WQE指向的存储空间。
具体的,如果第一RDMA报文不为确认报文,则第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间。如果第一RDMA报文为尾包或单包或确认报文,则第一共享连接器向第一QP关联的CQ提交CQE。如果第一RDMA报文为尾包或单包,则第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间,并且向第一QP关联的CQ提交CQE。
也就是说,对于第一RDMA报文为RDMA报文的确认(ACK)报文,则第一共享连接器不存储至第一QP对应的存储空间,只向第一QP关联的CQ提交CQE,表示对应的RDMA操作完成。对于第一RDMA报文为SEND消息或RDMA READ响应消息的首包或中间包,由于尚未完成RDMA操作,则第一共享连接器只将第一RDMA报文存储至第一QP对应的存储空间,不向第一QP关联的CQ提交CQE。对于第一RDMA报文为SEND消息或RDMA READ响应消息的单包或尾包,由于完成了对应的RDMA操作,因此,既将第一RDMA报文存储至第一QP对应的存储空间,还向第一QP关联的CQ提交CQE。
示例性的,对于第一RDMA报文为SEND消息的尾包或单包,第一共享连接器将SEND消息的尾包或单包存储到上述存储空间,并向第一QP关联的CQ提交CQE,该CQE用于指示完成SEND消息的接收。
示例性的,对于第一RDMA报文为SEND消息的首包或中间包,第一共享连接器将SEND消息的首包或中间包存储到上述存储空间,而不提交CQE。
示例性的,对于第一RDMA报文为RDMAREAD响应消息的尾包或单包,第一共享连接器将RDMA READ响应消息的尾包或单包存储到上述存储空间,并向第一QP关联的CQ提交CQE,该CQE用于指示完成RDMA读操作。
示例性的,对于第一RDMA报文为RDMAREAD响应消息的首包或中间包,第一共享连接器将RDMA READ响应消息的首包或中间包存储到上述存储空间,而不提交CQE。
示例性的,对于第一RDMA报文为SEND消息的确认报文,或者,RDMAWRITE消息的确认报文,存储装置向第一QP关联的CQ提交CQE,该CQE用于指示完成SEND操作或RDMA WRITE操作。
本申请实施例提供的网络接口卡和存储装置,网络接口卡包括解析器和至少一个共享连接器,解析器用于将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;第一共享连接器用于与对端网络设备建立QP连接,并根据第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与第一控制器进行通信,其中,第一共享连接器与包含第一控制器在内的多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第一共享连接器对应。存储装置对于主机客户端来说仅有共享连接器可见,但是第一共享连接器可以将接收的来自主机客户端的RDMA报文分发给不同的QP所在的控制器进行处理,因此可以屏蔽不能正常工作的控制器,只要有一个控制器能正常工作即可保证存储装置能够提供存储服务,因此可以提高采用RDMA网络的存储装置的可靠性。并且通过将不同IO命令请求分发给不同QP所在的控制器进行并行处理,相比于现有方案中同一QP连接的RDMA消息只能由固定的一个控制器进行处理,其性能可提升N倍,N为控制器的数量,因此可以提升单个QP连接的存储访问性能。
对于发送消息,存储装置的网络接口卡可以执行如图16所示的报文发送方法,该方法包括:
S1601、调度器从在位的多个控制器的多个QP中选择一个与第二共享连接器对应的有消息待发送的第二QP。
第二共享连接器为至少一个共享连接器的一个。
调度器首先从多个控制器获取至少一个QP的门铃(doorbell)信号。
如前文所述的,每个控制器对应一个QP,每个QP包括一个SQ,该SQ包括WQE,该门铃信号用于指示对应的控制器的QP的SQ中的WQE指向的存储空间中有消息(数据消息或命令消息)待发送。
当某一控制器有消息待传输时,控制器的QP的SQ中增加一个或多个WQE,该WQE指向待传输的消息的存储空间,QP产生上述门铃信号,调度器获取门铃信号。
调度器汇聚来自各个QP的门铃信号,并不会直接触发发送RDMA消息,而是根据预设规则从中选择一个门铃信号进行响应,对应的QP即为第二QP,第二QP所在的控制器要正常工作。
本申请不限定具体的预设规则,在一种可能的实施方式中,调度器可以通过轮询调度(round robin,RR)从与第二共享连接器对应的多个QP(位于不同控制器)中选择第二QP。
示例性的,如图17所示,假设控制器1的QPa、控制器2的QPb、控制器3的QPc以及共享连接器a属于同一QP组,控制器1的QPa的SQ有三个WQE(即有三个存储空间中的消息待传输),则调度器针对QPa的门铃信号DB1的深度为3;控制器2的QPb的SQ有一个WQE(即有一个存储空间中的消息待传输),则调度器针对QPb的门铃信号DB2的深度为1;控制器3的QPc的SQ有两个WQE(即有两个存储空间中的消息待传输),则调度器针对QPc的门铃信号DB3的深度为2。
根据RR原理,第一轮依次调度QPa、QPb、QPc的WQE,即依次将QPa、QPb、QPc作为第二QP,并发送对应WQE指向的存储空间中的消息,则DB1的深度变为2,DB2的深度变为0,DB3的深度变为1。由于DB2的深度为0表明已经无消息需要发送,因此,在第二轮调度中,依次将QPa、QPc作为第二QP,并发送对应的WQE指向的存储空间中的消息,则DB1的深度变为1,DB3的深度变为0表明已经无消息需要发送。在第三轮调度中,将QPa作为第二QP,并发送对应WQE指向的存储空间中的消息,则DB1的深度变为0表明已经无消息需要发送。
预设规则还可以包括其他方式,例如加权轮询调度(weighted round robin,WRR)、动态加权(dynamic weighted round robin,DWRR)等。无论何种预设规则,在调度时可以跳过未在位的控制器的QP以及空闲的QP。
S1602、第二共享连接器将第二QP对应的存储空间中的消息以第二RDMA报文形式发送给主机客户端。
与步骤S1401类似的,在第二共享连接器发送RDMA报文之前,对端网络设备(例如主机客户端)在前端网络中发现存储装置,并通过至少一个QP与存储装置的第二共享连接器建立至少一条QP连接。这样,主机客户端即可以通过QP连接与存储装置互相传输数据。
具体的,第二QP对应的存储空间是指第二QP的SQ中的WQE指向的存储空间。第二QP可以与第一QP相同或不同。
如前文所述的,第二共享连接器在发送消息之前将消息分段为RDMA报文,而同一QP组内不同控制器的QP间的调度的粒度是基于WQE的,即一个QP被调度后需要连续发送完WQE指向的存储空间中存储的消息,不能被同一个QP组内其它QP打断。不同QP组之间的调度是独立的,互不影响。
第二共享连接器在发送本QP组内的多个QP的RDMA消息时,使用同一套PSN,即本QP组内不同QP的RDMA报文携带的PSN是由同一个计数器递增得到的,使得主机客户端的网络接口卡认为这些RDMA报文来自存储装置的一个QP。
另外,如果第二RDMA报文属于RDMA WRITE消息、SEND消息或者RDMA READ请求消息,则第二共享连接器保存第二RDMA报文的PSN与第二QP的对应关系。如步骤S14023中所描述的,以便网络接口卡在接收第一RDMA报文时,根据第一RDMA报文的PSN确定第一QP。
本申请实施例提供的网络接口卡和存储装置,网络接口卡包括调度器和至少一个共享连接器,调度器用于从在位的多个控制器的多个QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,第二共享连接器为所述至少一个共享连接器的一个;共享连接器用于与对端网络设备建立QP连接,并将第二QP对应的存储空间中的消息以第二RDMA报文形式发送给主机客户端;其中,第二共享连接器与多个控制器分别进行连接,并且多个控制器中每个控制器对应的一个QP与第二共享连接器对应。调度器可以从多个QP中选择一个QP,由对应的第二共享连接器处理其待发送的RDMA消息,使得只要有一个控制器能够正常工作即可以提供存储服务,因此可以提高采用RDMA网络的存储装置的可靠性。并且不同QP所在的控制器可以对不同IO命令请求进行并行处理,相比于现有方案中同一QP连接的RDMA消息只能由固定的一个控制器进行处理,其性能可提升N倍,N为控制器的数量,因此可以提升单个QP连接的存储访问性能。
类似于图11的IO读写过程,主机客户端与存储装置利用上述报文接收方法和报文发送方法实现IO读写的过程如图18所示:
S1801、主机客户端在前端网络中发现存储装置,并通过一个QP与存储装置的网络接口卡中的一个共享连接器建立一条QP连接。
S1802、主机客户端通过该QP连接向存储装置发送SEND消息的第一RDMA报文。存储装置的网络接口卡的解析器从主机客户端接收第一RDMA报文。
SEND消息可以包括IO写命令或IO读命令,也就是说,SEND消息的数据载荷可以为IO写命令或IO读命令。
该步骤内容参照步骤S1401。
S1803、存储装置的网络接口卡中的解析器根据第一RDMA报文中的QPN确定对应的第一共享连接器,并将第一RDMA报文分发给该第一共享连接器。
该步骤内容参照步骤S1401。
S1804、第一共享连接器对第一RDMA报文进行合法性校验。
该步骤内容参照步骤S14021。
S1805、如果第一RDMA报文是SEND消息的首包或单包,则第一共享连接器根据第一RDMA报文中的NVME SQE信息(例如NSID和/或LBA)确定第一RDMA报文对应的第一QP,并保存第一RDMA所属的消息的首包与第一QP的对应关系。
该步骤内容参照步骤S14022和S14023。
S1806、如果第一RDMA报文是SEND消息的中间包或尾包,则第一共享连接器根据分段后的RDMA报文的PSN的保序递增性以及第一RDMA报文的PSN确定第一RDMA报文对应的首包;并根据第一RDMA报文对应的首包以及上述首包与第一QP的对应关系确定第一QP。
该步骤内容参照步骤S14024。
S1807、第一共享连接器将第一RDMA报文存储至第一QP对应的存储空间,和/或,向第一QP关联的CQ提交CQE。
该步骤内容参照步骤S14025。
S1808、第一QP所在的控制器的消费者(例如,NoF协议软件)查询CQ中新提交了CQE,解析NVME SQE信息并发起数据交互。
如果NVME SQE信息中包括IO读命令,则消费者从后端存储介质内读到IO数据后,向QP的SQ提交RDMA WRITE操作的WQE,并产生门铃信号以通知网络接口卡有消息待传输。另外,消费者可以在向QP的SQ提交RDMA WRITE操作的WQE之后,提交SEND操作的WQE。
如果NVME SQE信息中包括IO写命令,则消费者向QP的SQ提交RDMA READ操作的WQE,并产生门铃信号以通知网络接口卡有RDMA READ消息待传输。
如果NVME SQE信息中包括带立即数的IO写命令,则消费者完成IO数据持久化存储后,构造NoF命令应答消息,向QP的SQ提交SEND操作的WQE,并产生门铃信号以通知网络接口卡有SEND消息待传输。
S1809、调度器汇聚来自各个QP的门铃信号,从在位的多个控制器的多个QP中选择一个与第二共享连接器对应的有消息待发送的第二QP。
该步骤内容参照步骤S1601。
S1810、第二共享连接器将第二QP对应的存储空间中的消息以第二RDMA报文形式发送给主机客户端。
该步骤内容参照步骤S1602。
S1811、第二共享连接器向第二QP关联的CQ提交CQE。
如果第二QP的SQ的WQE指示SEND操作或RDMA WRITE操作,则在第二共享连接器接收到来自主机客户端的确认报文后,向第二QP关联的CQ提交CQE。
如果第二QP的SQ的WQE指示RDMA READ操作,则在第二共享连接器接收到来自主机客户端的RDMA READ响应消息的尾包或单包后,向第二QP关联的CQ提交CQE。
其中,如果第二QP的SQ的WQE指示RDMA READ操作,第二共享连接器在发送属于RDMA READ请求消息的第二RDMA报文时,保存第二RDMA报文的PSN与第二QP的对应关系。如果第二共享连接器接收到的第一RDMA报文是RDMA READ响应消息的首包或单包,则第二共享连接器根据该第一RDMA报文的PSN以及第二RDMA报文的PSN与第二QP的对应关系确定第二QP(即第一QP),并保存第一RDMA所属的消息的首包与第一QP的对应关系。如果第一RDMA报文是RDMA READ响应消息的尾包或中间包,则第二共享连接器根据分段后的RDMA报文的PSN的保序递增性以及第一RDMA报文的PSN确定第一RDMA报文对应的首包;并根据第一RDMA报文对应的首包以及首包与第一QP的对应关系确定第一QP(即第二QP)。
S1812、第二QP所在的控制器的消费者(例如,NoF协议软件)查询CQ中新提交了CQE。
如果新提交的CQE指示SEND操作中的发送过程完成,表示此时一个IO操作已完成,则消费者回收相关的SQ中的WQE资源和CQ中的CQE资源。
如果新提交的CQE指示RDMA WRITE操作完成,则消费者回收相关的SQ中的WQE资源和CQ中的CQE资源。
如果新提交的CQE指示RDMA READ操作完成,则消费者完成IO数据持久化存储后,构造NoF命令应答消息,向QP的SQ提交SEND操作的WQE,并产生门铃信号以通知网络接口卡有消息待传输。跳转至步骤S1809。
图18中第一QP指接收消息过程中的QP,第二QP指发送消息过程中的QP,第一QP和第二QP可以为同一QP。
图18中第一共享连接器与第二共享连接器可以是相同的共享连接器。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(Digital Subscriber Line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(Solid State Disk,SSD))等。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (21)
1.一种网络接口卡,包括解析器和至少一个共享连接器,
所述解析器,用于将接收的第一远程直接内存访问RDMA报文分发给所述至少一个共享连接器中的第一共享连接器;
所述第一共享连接器,用于与对端网络设备建立QP连接,并根据所述第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与所述第一控制器进行通信,其中,所述第一共享连接器与包含所述第一控制器在内的多个控制器分别进行连接,并且所述多个控制器中每个控制器对应的一个QP与所述第一共享连接器对应。
2.根据权利要求1所述的网络接口卡,其特征在于,所述第一共享连接器,还用于:
如果所述第一RDMA报文不为确认报文,则将所述第一RDMA报文存储至所述第一QP对应的存储空间。
3.根据权利要求1或2所述的网络接口卡,其特征在于,所述第一共享连接器,还用于:
如果所述第一RDMA报文为尾包或单包或确认报文,则向所述第一QP关联的完成队列CQ提交完成队列条目CQE,所述CQE用于指示所述第一RDMA报文对应的RDMA操作完成。
4.根据权利要求1-3任一项所述的网络接口卡,其特征在于,所述第一共享连接器,具体用于:
如果所述第一RDMA报文为SEND消息的首包或单包,则根据所述第一RDMA报文中非易失性存储器规范NVME提交队列条目SQE中的信息确定所述第一QP;
其中,所述NVME SQE中的信息对应于所述第一控制器。
5.根据权利要求1-3任一项所述的网络接口卡,其特征在于,所述第一共享连接器,具体用于:
如果所述第一RDMA报文为RDMA WRITE消息的确认报文、SEND消息的确认报文或者RDMAREAD响应消息的首包或单包,则根据所述第一RDMA报文的报文序列号以及第二RDMA报文的报文序列号与所述第一QP的对应关系确定所述第一QP;
其中,所述第二RDMA报文为所述第一QP发送的RDMA报文;所述第一RDMA报文的报文序列号与所述第二RDMA报文的报文序列号对应;所述第一RDMA报文为RDMA WRITE消息的确认报文时,所述第二RDMA报文属于RDMA WRITE消息;所述第一RDMA报文为SEND消息的确认报文时,所述第二RDMA报文属于SEND消息;所述第一RDMA报文为RDMA READ响应消息的首包或单包时,所述第二RDMA报文属于RDMA READ请求消息。
6.根据权利要求4或5所述的网络接口卡,其特征在于,所述第一共享连接器,还用于:
如果所述第一RDMA报文为首包,则保存所述第一RDMA报文所属的消息的首包与所述第一QP的对应关系。
7.根据权利要求6所述的网络接口卡,其特征在于,所述第一共享连接器,还用于:
如果所述第一RDMA报文为尾包或中间包,则根据分段后的RDMA报文的报文序列号的保序递增性以及所述第一RDMA报文的报文序列号确定所述第一RDMA报文对应的首包;
根据所述第一RDMA报文对应的首包以及所述对应关系确定所述第一QP。
8.一种网络接口卡,其特征在于,包括调度器和至少一个共享连接器,
所述调度器,用于从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,所述第二共享连接器为所述至少一个共享连接器的一个;
所述第二共享连接器,用于与对端网络设备建立QP连接,并将所述第二QP对应的存储空间中的消息以第二远程直接内存访问RDMA报文形式发送给主机客户端;其中,所述第二共享连接器与所述多个控制器分别进行连接,并且所述多个控制器中每个控制器对应的一个QP与所述第二共享连接器对应。
9.根据权利要求8所述的网络接口卡,其特征在于,所述第二共享连接器,还用于:
如果所述第二RDMA报文属于RDMA WRITE消息、SEND消息或者RDMA READ请求消息,则保存所述第二RDMA报文中的报文序列号与所述第二QP的对应关系。
10.根据权利要求8或9所述的网络接口卡,其特征在于,所述调度器,具体用于:
通过轮询调度从与所述第二共享连接器对应的多个QP中选择所述第二QP。
11.一种报文接收方法,其特征在于,应用于如权利要求1-7任一项所述的网络接口卡,所述方法包括:
解析器将接收的第一远程直接内存访问RDMA报文分发给至少一个共享连接器中的第一共享连接器;
所述第一共享连接器与对端网络设备建立QP连接,并根据所述第一RDMA报文确定与第一控制器对应的第一队列对QP以实现与所述第一控制器进行通信,其中,所述第一共享连接器与包含所述第一控制器在内的多个控制器分别进行连接,并且所述多个控制器中每个控制器对应的一个QP与所述第一共享连接器对应。
12.根据权利要求11所述的方法,其特征在于,还包括:
如果所述第一RDMA报文不为确认报文,则所述第一共享连接器将所述第一RDMA报文存储至所述第一QP对应的存储空间。
13.根据权利要求11或12所述的方法,其特征在于,还包括:
如果所述第一RDMA报文为尾包或单包或确认报文,则所述第一共享连接器向所述第一QP关联的完成队列CQ提交完成队列条目CQE,所述CQE用于指示所述第一RDMA报文对应的RDMA操作完成。
14.根据权利要求11-13任一项所述的方法,其特征在于,所述根据所述第一RDMA报文确定与第一控制器对应的第一队列对QP,包括:
如果所述第一RDMA报文为SEND消息的首包或单包,则所述第一共享连接器根据所述第一RDMA报文中非易失性存储器规范NVME提交队列条目SQE中的信息确定所述第一QP;
其中,所述NVME SQE中的信息对应于所述第一控制器。
15.根据权利要求11-13任一项所述的方法,其特征在于,所述根据所述第一RDMA报文确定与第一控制器对应的第一队列对QP,包括:
如果所述第一RDMA报文为RDMA WRITE消息的确认报文、SEND消息的确认报文或者RDMAREAD响应消息的首包或单包,则所述第一共享连接器根据所述第一RDMA报文的报文序列号以及第二RDMA报文的报文序列号与所述第一QP的对应关系确定所述第一QP;
其中,所述第二RDMA报文为所述第一QP发送的RDMA报文;所述第一RDMA报文的报文序列号与所述第二RDMA报文的报文序列号对应;所述第一RDMA报文为RDMA WRITE消息的确认报文时,所述第二RDMA报文属于RDMA WRITE消息;所述第一RDMA报文为SEND消息的确认报文时,所述第二RDMA报文属于SEND消息;所述第一RDMA报文为RDMA READ响应消息的首包或单包时,所述第二RDMA报文属于RDMA READ请求消息。
16.根据权利要求14或15所述的方法,其特征在于,还包括:
如果所述第一RDMA报文为首包,则所述第一共享连接器保存所述第一RDMA报文所属的消息的首包与所述第一QP的对应关系。
17.根据权利要求16所述的方法,其特征在于,还包括:
如果所述第一RDMA报文为尾包或中间包,则所述第一共享连接器根据分段后的RDMA报文的报文序列号的保序递增性以及所述第一RDMA报文的报文序列号确定所述第一RDMA报文对应的首包;
根据所述第一RDMA报文对应的首包以及所述对应关系确定所述第一QP。
18.一种报文发送方法,其特征在于,应用于如权利要求8-10任一项所述的网络接口卡,所述方法包括:
调度器从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,所述第二共享连接器为至少一个共享连接器的一个;
所述第二共享连接器与对端网络设备建立QP连接,并将所述第二QP对应的存储空间中的消息以第二远程直接内存访问RDMA报文形式发送给主机客户端;其中,所述第二共享连接器与所述多个控制器分别进行连接,并且所述多个控制器中每个控制器对应的一个QP与所述第二共享连接器对应。
19.根据权利要求18所述的方法,其特征在于,还包括:
如果所述第二RDMA报文属于RDMA WRITE消息、SEND消息或者RDMA READ请求消息,则所述第二共享连接器保存所述第二RDMA报文中的报文序列号与所述第二QP的对应关系。
20.根据权利要求18或19所述的方法,其特征在于,所述调度器从在位的多个控制器的多个队列对QP中选择一个与第二共享连接器对应的有消息待发送的第二QP,包括:
所述调度器通过轮询调度从与所述第二共享连接器对应的多个QP中选择所述第二QP。
21.一种存储装置,其特征在于,包括如权利要求1-10任一项所述的网络接口卡以及多个控制器,所述网络接口卡与所述多个控制器中每个控制器分别连接。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010759858.1A CN114090274A (zh) | 2020-07-31 | 2020-07-31 | 网络接口卡、存储装置、报文接收方法和发送方法 |
PCT/CN2021/091709 WO2022021988A1 (zh) | 2020-07-31 | 2021-04-30 | 网络接口卡、存储装置、报文接收方法和发送方法 |
EP21849266.8A EP4184327A4 (en) | 2020-07-31 | 2021-04-30 | NETWORK INTERFACE CARD, STORAGE APPARATUS, RECEIVING METHOD AND MESSAGE SENDING METHOD |
US18/157,402 US11886940B2 (en) | 2020-07-31 | 2023-01-20 | Network interface card, storage apparatus, and packet receiving method and sending method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010759858.1A CN114090274A (zh) | 2020-07-31 | 2020-07-31 | 网络接口卡、存储装置、报文接收方法和发送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114090274A true CN114090274A (zh) | 2022-02-25 |
Family
ID=80036845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010759858.1A Pending CN114090274A (zh) | 2020-07-31 | 2020-07-31 | 网络接口卡、存储装置、报文接收方法和发送方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11886940B2 (zh) |
EP (1) | EP4184327A4 (zh) |
CN (1) | CN114090274A (zh) |
WO (1) | WO2022021988A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220066957A1 (en) * | 2020-08-31 | 2022-03-03 | International Business Machines Corporation | Input/output queue hinting for resource utilization |
CN114827234A (zh) * | 2022-04-29 | 2022-07-29 | 广东浪潮智慧计算技术有限公司 | 一种数据传输方法、系统、装置及存储介质 |
CN115002047A (zh) * | 2022-05-20 | 2022-09-02 | 北京百度网讯科技有限公司 | 一种远程直接数据存取方法、装置、设备以及存储介质 |
CN115623018A (zh) * | 2022-11-30 | 2023-01-17 | 苏州浪潮智能科技有限公司 | 基于多设备节点的共享系统 |
CN116303173A (zh) * | 2023-05-19 | 2023-06-23 | 深圳云豹智能有限公司 | 减少rdma引擎片上缓存的方法、装置、系统及芯片 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114553678B (zh) * | 2022-02-09 | 2024-02-13 | 紫光云(南京)数字技术有限公司 | 一种云网络软slb流量问题的诊断方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016101288A1 (zh) * | 2014-12-27 | 2016-06-30 | 华为技术有限公司 | 一种远程直接数据存取方法、设备和系统 |
US20160212214A1 (en) * | 2015-01-16 | 2016-07-21 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Tunneled remote direct memory access (rdma) communication |
KR102430187B1 (ko) * | 2015-07-08 | 2022-08-05 | 삼성전자주식회사 | RDMA NVMe 디바이스의 구현 방법 |
US10423568B2 (en) * | 2015-12-21 | 2019-09-24 | Microsemi Solutions (U.S.), Inc. | Apparatus and method for transferring data and commands in a memory management environment |
US20180150256A1 (en) * | 2016-11-29 | 2018-05-31 | Intel Corporation | Technologies for data deduplication in disaggregated architectures |
CN109936510B (zh) * | 2017-12-15 | 2022-11-15 | 微软技术许可有限责任公司 | 多路径rdma传输 |
US10909066B2 (en) * | 2018-04-03 | 2021-02-02 | Microsoft Technology Licensing, Llc | Virtual RDMA switching for containerized applications |
CN109491809A (zh) * | 2018-11-12 | 2019-03-19 | 西安微电子技术研究所 | 一种降低高速总线延迟的通信方法 |
CN110113425A (zh) * | 2019-05-16 | 2019-08-09 | 南京大学 | 一种基于rdma网卡纠删码卸载的负载均衡系统及均衡方法 |
US11334507B2 (en) * | 2020-08-21 | 2022-05-17 | Samsung Electronics Co., Ltd. | Method and system for communicating data packets in remote direct memory access networks |
-
2020
- 2020-07-31 CN CN202010759858.1A patent/CN114090274A/zh active Pending
-
2021
- 2021-04-30 WO PCT/CN2021/091709 patent/WO2022021988A1/zh unknown
- 2021-04-30 EP EP21849266.8A patent/EP4184327A4/en active Pending
-
2023
- 2023-01-20 US US18/157,402 patent/US11886940B2/en active Active
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220066957A1 (en) * | 2020-08-31 | 2022-03-03 | International Business Machines Corporation | Input/output queue hinting for resource utilization |
US11604743B2 (en) * | 2020-08-31 | 2023-03-14 | International Business Machines Corporation | Input/output queue hinting for resource utilization |
US11960417B2 (en) | 2020-08-31 | 2024-04-16 | International Business Machines Corporation | Input/output queue hinting for resource utilization |
CN114827234A (zh) * | 2022-04-29 | 2022-07-29 | 广东浪潮智慧计算技术有限公司 | 一种数据传输方法、系统、装置及存储介质 |
CN115002047A (zh) * | 2022-05-20 | 2022-09-02 | 北京百度网讯科技有限公司 | 一种远程直接数据存取方法、装置、设备以及存储介质 |
CN115002047B (zh) * | 2022-05-20 | 2023-06-13 | 北京百度网讯科技有限公司 | 一种远程直接数据存取方法、装置、设备以及存储介质 |
CN115623018A (zh) * | 2022-11-30 | 2023-01-17 | 苏州浪潮智能科技有限公司 | 基于多设备节点的共享系统 |
CN116303173A (zh) * | 2023-05-19 | 2023-06-23 | 深圳云豹智能有限公司 | 减少rdma引擎片上缓存的方法、装置、系统及芯片 |
CN116303173B (zh) * | 2023-05-19 | 2023-08-08 | 深圳云豹智能有限公司 | 减少rdma引擎片上缓存的方法、装置、系统及芯片 |
Also Published As
Publication number | Publication date |
---|---|
US11886940B2 (en) | 2024-01-30 |
EP4184327A4 (en) | 2024-01-17 |
WO2022021988A1 (zh) | 2022-02-03 |
US20230267022A1 (en) | 2023-08-24 |
EP4184327A1 (en) | 2023-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114090274A (zh) | 网络接口卡、存储装置、报文接收方法和发送方法 | |
WO2022089258A1 (zh) | 网络接口卡、控制器、存储装置和报文发送方法 | |
US6493343B1 (en) | System and method for implementing multi-pathing data transfers in a system area network | |
US7818362B2 (en) | Split socket send queue apparatus and method with efficient queue flow control, retransmission and sack support mechanisms | |
US7406481B2 (en) | Using direct memory access for performing database operations between two or more machines | |
US8948199B2 (en) | Fibre channel processing by a host channel adapter | |
US6915354B1 (en) | Distributed iSCSI and SCSI targets | |
US20050223118A1 (en) | System and method for placement of sharing physical buffer lists in RDMA communication | |
WO2022179417A1 (zh) | 网络接口卡、消息收发方法和存储装置 | |
US20060067346A1 (en) | System and method for placement of RDMA payload into application memory of a processor system | |
US20040049580A1 (en) | Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms | |
WO2023040949A1 (zh) | 网络接口卡、消息发送方法和存储装置 | |
US6898638B2 (en) | Method and apparatus for grouping data for transfer according to recipient buffer size | |
EP4027249A1 (en) | Connection management in a network adapter | |
US20220407824A1 (en) | Connection management in a network adapter | |
CN116471242A (zh) | 基于rdma的发送端、接收端、数据传输系统及方法 | |
CN115550079A (zh) | 网络接口卡、消息收发方法、存储装置和主机客户端 | |
CN115686344A (zh) | 网络接口卡、数据存储方法和存储装置 | |
AU2003300885B2 (en) | Using direct memory access for performing database operations between two or more machines | |
WO2023147440A2 (en) | System and method for one-sided read rma using linked queues |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |