CN112540941A - 一种数据转发芯片及服务器 - Google Patents
一种数据转发芯片及服务器 Download PDFInfo
- Publication number
- CN112540941A CN112540941A CN201910895926.4A CN201910895926A CN112540941A CN 112540941 A CN112540941 A CN 112540941A CN 201910895926 A CN201910895926 A CN 201910895926A CN 112540941 A CN112540941 A CN 112540941A
- Authority
- CN
- China
- Prior art keywords
- data
- data forwarding
- address
- network card
- information
- 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
- 230000015654 memory Effects 0.000 claims abstract description 225
- 238000009826 distribution Methods 0.000 claims description 50
- 230000006870 function Effects 0.000 claims description 46
- 238000000034 method Methods 0.000 claims description 28
- 238000003860 storage Methods 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 abstract description 26
- 238000004891 communication Methods 0.000 description 18
- 238000010586 diagram Methods 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 7
- 238000013507 mapping Methods 0.000 description 6
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000000977 initiatory effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000004088 simulation 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
- 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
- G06F13/1684—Details of memory controller using multiple buses
-
- 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
- G06F13/287—Multiplexed DMA
-
- 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/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
-
- 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/2866—Architectures; Arrangements
-
- 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/56—Provisioning of proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请提供一种数据转发芯片以及服务器,服务器包括:数据转发芯片、网卡以及处理器,数据转发芯片通过总线分别与网卡和处理器连接,其中,数据转发芯片在接收处理器或者网卡发送的数据转发请求后;根据数据转发请求的目的地址,通过转发芯片上与所述数据转发请求的目的地址对应的内存空间直接相连的端点端口,实现数据转发请求指定的待转发数据的转发。当数据转发芯片接收到数据发送请求后,能够根据待转发数据的地址信息以及服务器的逻辑架构,确定一条到达该目的地址的最短路径,通过最短路径转发待转发数据,能够避免服务器在发送或者接收数据时,数据在处理器之间发生跨片传输,降低数据传输时延。
Description
技术领域
本申请涉及服务器领域,尤其涉及一种数据转发芯片及服务器。
背景技术
随着数据的指数级增长,服务器通常会配备多个处理器,服务器内多个处理器会共享一张网卡。但是多个处理器共享的一张网卡通常只连接到一个处理器上。当与网卡没有直接连接的处理器需要通过网卡发送数据时,数据需要经过处理器间的数据总线传输到网卡,这样会增加系统的I/O开销以及数据传输的时延。
发明内容
本申请实施例公开了一种服务器及数据转发芯片,能够在服务器发送或者接收数据时,避免数据在处理器之间发生跨片传输,降低数据传输时延。
第一方面,本申请提供了一种服务器,该服务器包括数据转发芯片、网卡以及目标处理器,所述数据转发芯片通过总线分别与所述网卡和所述目标处理器连接,其中,
所述数据转发芯片用于:接收所述目标处理器或者所述网卡发送的数据转发请求;
通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口,是所述数据转发芯片上与所述数据转发请求的地址对应的内存空间直接相连的端点端口,其中,所述数据转发请求的地址包括所述待转发数据的源地址或者所述待转发数据需要写入的目的地址。
通过在服务器的处理器与网卡之间增加用于实现数据转发的数据转发芯片,在网卡需要读取服务器的目标内存空间中的数据时,数据转发芯片通过数据转发芯片上与目标内存空间直接相连的目标端点端口,从目标内存空间中读取数据,然后将读取到的数据发送给网卡,或者在网卡需要将数据写入到服务器的目标内存空间中时,通过上述目标端点端口,将数据写入到目标内存空间中,可以避免服务器在发送或者接收数据时,数据需要通过处理器之间的通信总线跨片传输的问题,降低数据传输时延。
在一种可能的实现方式中,所述数据转发芯片还用于根据所述数据转发请求的地址与所述服务器的内存分布信息,确定与所述数据转发请求的地址对应的内存空间直接连接的所述目标端点端口,其中,所述内存分布信息包括所述数据转发芯片上多个端点端口中的至少两个端点端口与所述服务器的内存空间之间的对应关系。
本申请实施例中,所述数据转发芯片上包括多个端点端口,所述多个端点端口通过总线与处理器和服务器的内存空间相连,所述多个端点端口中的至少两个端点端口与所述服务器的内存空间直接相连,因此在数据转发芯片或网卡读取内存空间中的数据或者往内存空间中写入数据时,会存在两条读/写路径,数据转发芯片通过所述至少两个端点端口与所述服务器的内存空间之间的对应关系,可以确定与所述数据转发请求的地址对应的内存空间直接连接的端点端口为目标端点端口,进而确定经过该目标端点端口的路径为最短路径。
在一种可能的实现方式中,所述服务器包括多个处理器,所述多个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接,所述内存分布信息包括所述多个端点端口中至少两个端点端口与所述多个处理器中每个处理器对应的预设地址范围的内存空间之间的对应关系,所述目标处理器为所述多个处理器中的任意一个。
在一种可能的实施方式中,上述服务器可以是采用非一致性内存访问NUMA架构,NUMA架构将服务器的硬件资源分为多个NUMA节点,每个NUMA节点包括服务器内的一个或者多个CPU以及内存。
数据转发芯片中保存有每个端点端口与服务器内的内存空间地址的对应关系,每个端点端口与一段地址范围内的内存空间直接连接,在数据转发芯片接收到上述数据转发请求时,通过数据转发请求确定待转发数据的源地址或者目的地址,根据待转发数据的源地址或者目的地址,确定与服务器内存空间直接连接的目标端点端口,进而通过目标端点端口从内存空间读取数据或者向内存空间写入数据。
在一种可能的实现方式中,所述目标处理器,用于通过所述总线向所述数据转发芯片发送所述数据转发请求,所述数据转发请求携带存储所述待转发数据的源地址;
所述数据转发芯片,具体用于:根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述源地址对应的内存空间直接连接的端点端口为所述目标端点端口。在目标处理器需要通过网卡发送内存空间中的数据时,目标处理器通过向数据转发芯片发送携带有待转发数据的源地址的数据转发请求,数据转发芯片所述源地址以及上述内存分布信息中的对应关系,确定与待转发数据的源地址对应的内存空间直接连接的所述目标端点端口。
在一种可能的实现方式中,所述网卡,用于向所述数据转发芯片发送所述数据转发请求,所述数据转发请求为所述网卡向所述目标处理器发送的写数据请求;
所述数据转发芯片,具体用于:根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述目的地址对应的内存空间直接连接的端点端口为所述目标端点端口,其中,所述目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
本申请实施例中,服务器预先分配有缓存空间用于存储网卡接收到的数据,在数据转发芯片接收到网卡的写数据请求之后,获取上述缓存空间的地址信息,并结合上述内存分布信息确定数据转发芯片上与上述缓存空间直接连接的端点端口作为目标端点端口。
在一种可能的实现方式中,所述数据转发芯片还用于:
根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括所述目标端点端口;
通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
在一种可能的实现方式中,所述数据转发芯片通过直接内存存取DMA的方式,通过所述路径从所述源地址对应的内存空间获取所述待转发数据,或者,所述数据转发芯片通过直接内存存取DMA的方式,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
在一种可能的实现方式中,所述网卡通过所述DMA方式从所述数据转发芯片的所述缓存地址对应的缓存空间中获取所述待转发数据。
数据转发芯片在确定上述目标端点端口之后,可以确定一条通过上述目标端点端口的最短路径,数据转发芯片通过该最短路径从待转发数据的源地址对应的内存空间中获取待转发数据,或者通过该最短路径将待转发数据写入数据转发请求的地址对应的内存空间,从而避免网卡读取内存空间中的数据或者向内存空间中写入数据时,数据在处理器之间跨片传输、增加数据传输时延、降低处理器的资源消耗。
在一种具体的实现方式中,所述数据转发芯片以及所述网卡为支持单根输入输出虚拟化SR-IOV标准的设备。
在一种可能的实现方式中,所述数据转发芯片,还用于对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
所述目标处理器用于:对所述数据转发芯片进行枚举,获取所述数据转发芯片中代理单元的信息,为所述代理单元分配地址,并将所述代理单元的地址信息发送给所述数据转发芯片,其中,所述代理单元为所述功能单元的代理;
所述数据转发芯片还用于:根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系。
本申请实施例中,所述服务器包括多个处理器,所述多个处理器中的第一处理器通过总线与所述数据转发芯片连接;
所述数据转发芯片还用于:对所述网卡进行枚举,获取所述网卡中第一功能单元的信息,并为所述第一功能单元分配地址,其中,所述第一功能单元用于实现所述网卡的功能,所述第一功能单元的信息包括第一物理功能PF的信息和/或第一虚拟功能VF的信息;
所述第一处理器用于:对所述数据转发芯片进行枚举,获取所述数据转发芯片中第一代理单元的信息,为所述第一代理单元分配地址,并将所述第一代理单元的地址信息发送给所述数据转发芯片,其中,所述第一代理单元为所述第一功能单元的代理;
所述数据转发芯片还用于:根据所述第一代理单元的地址信息,建立所述第一代理单元与所述第一功能单元的地址信息之间的对应关系。
所述服务器还包括第二处理器,所述第二处理器通过所述总线分别与所述数据转发芯片和所述第一处理器连接;
所述数据转发芯片还用于:对所述网卡进行枚举,获取所述网卡中第二功能单元的信息,并为所述第二功能单元分配地址,其中,所述第二功能单元用于实现所述网卡的功能,所述第二功能单元的信息包括第二物理功能PF的信息和第二虚拟功能VF的信息;
所述第二处理器用于:对所述数据转发芯片进行枚举,获取所述数据转发芯片中第二代理单元的信息,为所述第二代理单元分配地址,并将所述第二代理单元的地址信息发送给所述数据转发芯片,其中,所述第二代理单元为所述第二功能单元的代理;
所述数据转发芯片还用于:根据所述第二代理单元的地址信息,建立所述第二代理单元与所述第二功能单元的地址信息之间的对应关系。
在一种可能的实施方式中,上述第一功能单元的PF信息包括第一PF的总线设备功能BDF信息和基地址寄存器BAR的空间地址;第一虚拟单元VF的信息包括第一VF的BDF信息和BAR空间地址;上述第一代理单元的信息包括第一代理单元PF’的BDF和BAR空间地址;上述第二功能单元的PF信息包括第二PF的总线设备功能BDF信息和基地址寄存器BAR的空间地址;第二虚拟单元VF的信息包括第二VF的BDF信息和BAR空间地址;上述第二代理单元的信息包括第二代理单元PF’的BDF和BAR空间地址。
在一种可能的实现方式中,所述数据转发芯片,还用于根据所述数据转发芯片中代理单元的地址信息与所述网卡中功能单元的地址信息之间的对应关系,实现所述数据转发请求在所述处理器与所述网卡之间的转发。
在一种可能的实现方式中,上述数据转发芯片接收所述网卡发送的第一访问请求,其中,所述第一访问请求用于访问所述目标处理器,所述数据转发请求包括读数据请求和写数据请求,所述第一访问请求的源地址为所述网卡中的功能单元的地址信息;将所述第一访问请求映射为第二访问请求,其中,所述第二访问请求的源地址为所述数据转发芯片中的代理单元的地址信息;将所述第二访问请求通过所述目标端点端口发送给所述目标处理器。
在一种可能的实现方式中,所述数据转发芯片在根据上述目标端点端口确定转发所述待转发数据的路径之后,所述数据转发芯片还用于将所述待转发数据的源地址发送给所述网卡,接收所述网卡根据所述待转发数据的源地址向所述目标处理器发送第一读数据请求;所述读数据请求携带有所述网卡的功能单元的地址信息;将所述功能单元的地址信息替换为所述代理单元的地址信息,得到第二读数据请求,将所述第二读数据请求发送给所述目标处理器。
在一种可能的实现方式中,所述数据转发芯片接收所述网卡发送的第一写数据请求,所述第一写数据请求携带有所述网卡的功能单元的地址信息,将所述功能单元的地址信息替换为所述代理单元的地址信息,得到第二写数据请求,将所述第二写数据请求发送给所述目标处理器。
在一种可能的实现方式中,所述网卡通过所述DMA方式,从所述待转发数据的源地址中,通过所述目标端口获取所述对应的内存空间里的数据;或者,所述网卡通过所述DMA方式,将接收到的数据通过所述目标端点端口写入所述内存空间。
当上述数据转发芯片仅用作确定上述最短路径的情况下,网卡需要通过上述最短路径直接获取内存单元中的数据或者向内存单元中写入数据时,网卡需要向目标处理器发送访问请求,该访问请求中携带有网卡的功能单元的地址信息,由于目标处理器与数据转发芯片之间直接连接,目标处理器无法识别网卡发送的访问请求,该访问请求在经过数据转发芯片时,数据转发芯片会将访问请求中的网卡中功能单元的信息替换为数据转发芯对应代理单元的信息,以使目标处理器能够识别该访问请求。
在一种可能的实现方式中,所述目标处理器,还用于加载所述数据转发芯片的驱动程序,并通过运行所述驱动程序获取所述内存分布信息并发送给所述数据转发芯片。
在一种可能的实现方式中,所述服务器包括2个、4个或者8个处理器,每两个处理器通过一个数据转发芯片与一个网卡连接。
第二方面,本申请提供一种数据转发芯片,所述数据转发芯片包括路由模块、至少两个第一端点端口和第二端点端口,所述至少两个第一端点端口分别与服务器的至少两个处理器连接,所述第二端点端口与所述服务器的网卡连接;
路由模块,用于:分别与所述第一端点端口和所述第二端点端口连接,并通过所述第一端点端口接收目标处理器发送的数据转发请求或通过所述第二端点端口接收所述网卡发送的;通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口是所至少两个第一端点端口中与所述数据转发请求的地址对应的内存空间直接相连的端点端口,所述目标处理器为所述至少两个处理器中的任意一个。
在一种可能的实现方式中,所述数据转发芯片还包括:
记录模块,用于记录所述服务器的内存分布信息,所述内存分布信息包括所述至少两个第一端点端口与所述服务器内存空间之间的对应关系;
所述路由模块,还用于:
从所述记录模块中获取所述服务器的内存分布信息,根据所述内存分布信息和所述数据转发请求的地址,确定所述目标端点端口。
在一种可能的实现方式中,所述内存分布信息是所述目标处理器加载所述数据转发芯片的驱动程序,并通过运行所述驱动程序获取到的;所述路由模块通过所述第一端点端口接收到所述目标处理器发送的所述内存分布信息之后,将所述内存分布信息发送给所述记录模块进行存储。
在一种可能的实现方式中,所述内存分布信息包括所述至少两个第一端点端口与所述服务器中所述至少两个处理器对应的预设地址范围的内存空间之间的对应关系,其中,所述服务器包括多个目标处理器,所述至少两个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接。
在一种可能的实现方式中,所述路由模块具体用于:
通过所述至少两个第一端点端口获取所述目标处理器发送的所述数据转发请求,所述数据转发请求携带存储所述待转发数据的源地址;
根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述待转发数据的源地址对应的内存空间直接连接的所述目标端点端口。
在一种可能的实现方式中,所述路由模块具体用于:
通过所述第二端点端口获取所述网卡发送的所述数据转发请求,所述数据转发请求为所述网卡发送给所述目标处理器的写数据请求;
根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述预设的写数据请求的目的地址对应的内存空间直接连接的所述目标端点端口,其中,所述预设的写数据请求的目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
在一种可能的实现方式中,所述路由模块具体用于:
根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括与所述数据转发请求的地址对应的内存空间直接连接的目标端点端口;
所述数据转发芯片还包括直接内存存取DMA引擎,用于:通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
在一种可能的实现方式中,所述路由模块,还用于:对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
接收目标处理器发送的代理单元的地址信息,其中,所述代理单元为所述功能单元的代理,所述代理单元的地址信息是所述目标处理器对所述数据转发芯片进行枚举,获取所述数据转发芯片中代理单元的信息,并为所述代理单元分配地址后得到的;
根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系,并将所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系发送给所述记录模块进行存储。
在一种可能的实现方式中,所述路由模块在根据上述目标端点端口确定转发所述待转发数据的路径之后,所述路由模块还用于将所述待转发数据的源地址发送给所述网卡,接收所述网卡根据所述待转发数据的源地址向所述目标处理器发送读数据请求;或者,在所述网卡需要将待转发数据写入内存空间中时,接收所述网卡发送的写数据请求;将所述读数据请求或所述写数据请求通过所述路径发送给所述目标处理器。
在一种可能的实现方式中,所述路由模块,还用于:接收所述网卡发送的访问请求,根据所述网卡中功能单元的地址信息与所述数据转发芯片中代理单元的地址信息之间的对应关系,转发所述访问请求给所述目标处理器,所述访问请求为读数据请求或者写数据请求。
在一种可能的实现方式中,上述路由模块接收所述网卡发送的第一访问请求,其中,所述第一访问请求用于访问所述目标处理器,所述数据转发请求包括读数据请求和写数据请求,所述第一访问请求的源地址为所述网卡中的功能单元的地址信息;将所述第一访问请求映射为第二访问请求,其中,所述第二访问请求的源地址为所述数据转发芯片中的代理单元的地址信息;将所述第二访问请求通过所述目标端点端口发送给所述目标处理器。
在一种可能的实现方式中,上述数据转发芯片可以通过现场可编程逻辑门阵列FPGA实现,也可以通过专用集成电路ASIC芯片实现。
第三方面,本申请实施例提供了一种数据转发方法,该包括:数据转发芯片接收目标处理器或者网卡发送的数据转发请求;所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口是所述数据转发芯片上至少两个第一端点端口中与所述数据转发请求的地址对应的内存空间直接连接的端点端口。其中,所述数据转发芯片包括所述至少两个第一端点端口和第二端点端口,所述至少两个第一端点端口分别与服务器的至少两个处理器连接,所述第二端点端口与所述服务器的网卡连接,所述目标处理器为所述至少两个处理器中的任意一个。
在一种可能的实现方式中,所述数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,其中,所述内存分布信息包括所述至少两个第一端点端口与所述服务器的内存空间之间的对应关系。
在一种可能的实现方式中,所述内存分布信息包括所述至少两个第一端点端口与所述至少两个处理器对应的预设地址范围的内存空间之间的对应关系,其中,所述至少两个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接。
在一种可能的实现方式中,其特征在于,数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,包括:
所述数据转发芯片通过所述至少两个第一端点端口中的任意一个获取所述目标处理器发送的所述数据转发请求,所述数据转发请求携带所述待转发数据的源地址;
所述数据转发芯片根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述源地址对应的内存空间直接连接的第一端点端口为所述目标端点端口。
在一种可能的实现方式中,数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,包括:
所述数据转发芯片接收所述网卡发送的数据转发请求,所述数据转发请求为所述网卡发送给所述目标处理器的写数据请求;
所述数据转发芯片根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述目的地址对应的内存空间直接连接的端点端口为所述目标端点端口,其中,所述目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
在一种可能的实现方式中,所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,包括:
所述数据转发芯片根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括所述目标端点端口;
所述数据转发芯片通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
所述数据转发芯片从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
在一种可能的实现方式中,所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发之前,还包括:
所述数据转发芯片对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
所述数据转发芯片接收目标处理器发送的代理单元的地址信息,其中,所述代理单元为所述功能单元的在所述数据转发芯片中的代理,所述代理单元的地址信息是所述目标处理器对所述数据转发芯片进行枚举,获取所述数据转发芯片中代理单元的信息,并为所述代理单元分配地址后得到的;
所述数据转发芯片根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系。
在一种可能的实施方式中,所述方法还包括:所述数据转发芯片对所述网卡进行枚举,获取所述网卡中第一功能单元的信息,并为所述第一功能单元分配地址,其中,所述第一功能单元用于实现所述网卡的功能,所述第一功能单元的信息包括第一物理功能PF的信息和/或第一虚拟功能VF的信息;
所述数据转发芯片接收第一处理器发送的所述数据转发芯片中第一代理单元的信息,所述第一代理单元为所述第一功能单元的代理,所述第一代理单元的地址信息是所述第一处理器对所述数据转发芯片进行枚举,获取所述数据转发芯片中第一代理单元的信息,并为所述第一代理单元分配地址后得到的;
所述数据转发芯片根据所述第一代理单元的地址信息,建立所述第一代理单元与所述第一功能单元的地址信息之间的对应关系。
在一种可能的实施方式中,所述数据转发芯片对所述网卡进行枚举,获取所述网卡中第二功能单元的信息,并为所述第二功能单元分配地址,其中,所述第二功能单元用于实现所述网卡的功能,所述第二功能单元的信息包括第二物理功能PF的信息和第二虚拟功能VF的信息;
所述数据转发芯片接收第二处理器发送的所述数据转发芯片中第二代理单元的信息所述第二代理单元为所述第二功能单元的代理,所述第二代理单元的地址信息是所述第二处理器对所述数据转发芯片进行枚举,获取所述数据转发芯片中第二代理单元的信息,并为所述第二代理单元分配地址后得到的;
所述数据转发芯片根据所述第二代理单元的地址信息,建立所述第二代理单元与所述第二功能单元的地址信息之间的对应关系。
在一种可能的实现方式中,所述方法还包括:
所述数据转发芯片根据所述代理单元的地址信息与所述功能单元的地址信息,实现所述数据转发请求在所述目标处理器与所述网卡之间的转发。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种NUMA架构的示意图;
图2是本申请实施例提供的一种multi-socket服务器之间通信的示意图;
图3是本申请实施例提供的另一种multi-socket服务器之间通信的示意图;
图4是本申请实施例提供的一种数据转发芯片与服务器以及网卡的连接示意图;
图5是本申请实施例提供的一种SR-IOV模式下数据转发芯片与服务器以及网卡的对应关系示意图;
图6是本申请实施例提供的一种服务器发送数据的方法流程示意图;
图7是本申请实施例提供的另一种服务器发送数据的方法流程示意图;
图8是本申请实施例提供的一种数据转发芯片与4P服务器以及网卡的连接示意图;
图9是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为了帮助本领域技术人员更好地理解本申请的技术方案,首先对本申请实施例中所涉及到的一些概念进行介绍。
总线设备功能(bus device function,BDF):外设总线接口标准(peripheralcomponent interface express,PCIe)设备中的每一项功能的唯一的标识符。每个PCIe设备可以只有一个功能,也可以拥有最多8个功能。无论一个PCIe设备拥有多少个功能,其每一个功能都有一个唯一独立的配置空间。PCIe的配置软件(例如PCIe的root complex等)能够识别出PCIe总线系统的逻辑拓扑,以及其中的每一条总线,每一个PCIe设备和PCIe设备的每一项功能,即能够识别出BDF。在BDF中,Bus Number占用8位,Device Number占用5位,Function Number占用3位。
PCIe设备枚举:PCIe体系架构一般由根复合体(root complex),switch,endpoint等类型的PCIe设备组成,并且在root complex和switch中通常还会有embeded endpoint(这种设备对外无PCIe接口)。当PCIe设备所在的计算机系统启动后,中央处理器(centralprocessing unit,CPU)需要识别这些设备。Root complex通常是采用特定的算法,例如深度优先算法,访问每一个可能的分支路径,直到不能再深入访问为止,且每个PCIe设备只访问一次。这个过程称为PCIe设备枚举。
单根输入输出虚拟化(single root input/output virtualization,SR-IOV)技术:一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。通过SR-IOV技术,单个输入输出(input/output,I/O)资源可由多个虚拟机共享,每个虚拟机(virtual machine,VM)都可访问唯一的I/O资源。启用了SR-IOV并且具有适当的硬件和操作系统(operatingsystem,OS)支持的PCIe设备(例如以太网端口)可以显示为多个单独的物理设备,每个都具有自己的PCIe配置空间。该技术抽象出两种功能类型供用户使用,分别称为物理功能(physical function,PF)和虚拟功能(virtual function,VF)。PF是全功能的PCIe功能,可以像其他任何PCIe设备一样被发现、管理和处理。PF拥有完全配置资源,可以用于配置或控制PCIe设备。VF是与PF关联的一种功能,是一种轻量级PCIe功能,可以与PF以及与同一PF关联的其他VF共享一个或多个物理资源。VF仅允许拥有用于其自身行为的配置资源。每个实现SR-IOV的设备都可以有一个PF或多个PF,并且每个PF最多可有64,000个与其关联的VF。PF可以通过寄存器创建VF,这些寄存器设计有专用于此目的的属性。每个VF都具有一个PCIe内部空间,用于映射其寄存器集。VF设备驱动程序对寄存器集进行操作以启用其功能,并且显示为实际存在的PCIe设备。每个PF或VF在PCIe总线系统中都有一个唯一的BDF。
多PF场景:是指一个物理网卡的物理端口可以分成多个PF,即物理上只出一个端口,但在基本输入输出系统(basic input/output system,BIOS)扫描和OS下可以看到多个独立的PCIe设备,独立的网口,独立的媒体接入控制(Media Access Control,MAC)地址等。例如:Intel XL710网卡,支持40千兆以太网(Gigabit Ethernet,GE),出1个物理网口;可以将40GE的网口分成4个10GE的网口,此时就是1个物理端口分4个PF的场景。
传输层包(transaction layer packet,TLP)报文:PCIe总线在传输数据的时候使用事务进行传输,这种事务又称为TLP报文。TLP报文通常包含报文头,数据段,以及校验信息等。PCIe报文主要分为:内存访问读/写,I/O访问读/写,配置空间访问读/写,以及消息事务等。
基地址寄存器(base address register,BAR)空间地址:每个PCIe设备(例如PF或VF)都有自己的内部空间,这部分内部空间不能直接被CPU访问。当CPU需要读取PF或VF的内部空间的数据时,首先由Root complex通过TLP报文把数据从PF或VF读到CPU可访问的内存,然后CPU从可访问的内存中读取数据;如果CPU要往PF或VF的内部空间写入数据时,则先把数据写入内存中,然后由Root complex通过TLP报文将数据写入PF或VF的内部空间中。
虚拟化:将一种形式的资源抽象成另外一种形式就是虚拟化,虚拟化本质上是一种模拟。系统虚拟化是将一台物理计算机系统(Host主机)虚拟化为一台或多台VM。每台VM都有自己的硬件,如CPU、内存和各种外设,每台VM上都可以运行自己的OS和应用程序。VM拥有的硬件资源既可以是软件模拟的也可以是真实的物理硬件。
下面首先介绍本申请提供的装置的应用场景,随着数据的指数级增长,服务器通常会配备具有多个CPU插槽(multi-socket)的主板和一张网卡(network interface card,NIC),每个CPU插槽可以插一个处理器,即服务器包括多个CPU,多个CPU之间通过通信总线连接。但是,服务器内的多个CPU共享一张网卡,且多个CPU共享的这一张网卡只连接到其中一个CPU上。当与网卡没有直接连接的CPU需要通过网卡向网络发送数据时,数据需要经过处理器间的通信总线传输到网卡,这样会增加系统的I/O开销以及数据传输的时延。其中,上述通信总线包括但不限于快速互联通道(quick path interconnect,QPI)总线、超级互联通道(utra path interconnect,UPI)总线或Intel加速器链路(acceleratorlink,IAL)总线等。
例如,以服务器采用非一致性内存访问(non uniform memory accessarchitecture,NUMA)架构为例,图1是一种NUMA架构的示意图,NUMA架构将服务器的硬件资源分为多个NUMA节点,每个NUMA节点包括服务器内的一个或者多个CPU、内存以及内存控制器等,其中,每个NUMA节点内的CPU与内存直接连接,每个NUMA节点中的内存相互分离。每个NUMA节点之间可以进行信息交互,因此每个CPU可以访问整个计算机系统的内存。每个NUMA节点内部共用一个内存控制器,NUMA节点内的内存资源对于本NUMA节点内的所有CPU都是等同的,即每个NUMA节点内的内存对于本NUMA节点内的CPU是本地内存,但对于其他NUMA节点中的CPU则为远端内存,每个CPU访问本地内存的速度要比访问远端内存的速度快。
图2是两个multi-socket服务器之间通信的示意图,其中,服务器100与服务器200均包括两个socket,若每个socket作为一个NUMA节点,每个NUMA节点包括一个CPU以及对应的内存。每个服务器中的两个CPU共享一个网卡,每个服务器的网卡均与其中一个CPU直接通信连接,将直接连接网卡的CPU作为本地CPU(local CPU),另一个CPU作为远端CPU(remote CPU)。在服务器100中,如果远端CPU上运行的应用程序的数据需要通过网络传输,且该应用程序申请的内存在上述远端CPU所在的NUMA节点中,即该应用程序的数据在该远端CPU对应的本地内存中,则该应用程序的数据需要经过远端CPU与本地CPU之间的通信总线传输给网卡,进而通过网卡发送至网络。如果接收上述数据的服务器200中,需要使用上述数据的应用程序运行在服务器200的远端CPU中,且该应用程序申请的内存为服务器200的远端CPU对应的本地内存,则该服务器200的网卡在接收到上述数据之后,需要将数据通过CPU之间的通信总线发送给远端CPU对应的本地内存。
上述服务器在发送或者接收数据时,数据均可能会出现跨片传输(即数据需要经过CPU之间的通讯总线传输到网卡),这种数据传输方式会导致CPU占用率增加以及数据传输时延增加。
图3是另一种multi-socket服务器之间通信的示意图,图3中网卡可以提供多个PCIe接口,使服务器中的每个CPU均可以通过总线与网卡直接连接。例如服务器100包括两个CPU,则网卡可以提供两个PCIe接口,每个CPU可以直接将数据发送给网卡。从而避免上述图1中远端CPU在发送数据时,数据需要通过处理器之间的总线跨片传输给网卡,最后才能由网卡发送给其他服务器的情况。
但是在上述图3所示的服务器中,需要人为配置服务器的NUMA策略,即人为设置应用程序在运行时,服务器为应用程序分配本地内存(即与运行该应用程序的CPU位于同一NUMA节点的内存)存储该应用程序的数据,并在需要向其他服务器发送该应用程序的数据时,运行该应用程序的CPU通过该CPU与网卡连接的接口将数据发送给网卡。该方法需要应用程序感知服务器的NUMA信息,该应用程序运行时,根据感知到的NUMA信息申请本地内存,并在应用程序需要发送数据时,运行该应用程序的CPU能够将数据直接发送给网卡,从而避免出现上述图1中所示的远端CPU需要将数据通过处理器间的总线发送给网卡。
其中,上述NUMA信息包括服务器中的NUMA节点数、每个NUMA节点中的处理器数量、每个NUMA节点中内存的大小以及每个NUMA节点中内存的地址范围等硬件结构以及逻辑架构。例如,图3中,服务器100的NUMA信息包括服务器内每个NUMA节点中内存的地址范围以及上述多个NUMA节点与多个网卡之间的映射关系,具体包括:服务器30包括NUMA节点A和NUMA节点B两个NUMA节点,NUMA节点A包括CPU0以及内存0(memory0),memory0的内存的地址范围,NUMA节点B包括CPU1以及内存1(memory1),memory1的内存的地址范围,NUMA节点A与网卡的接口A连接,NUMA节点B与网卡的接口B连接。当应用程序运行在NUMA节点A的CPU0中时,应用程序根据感知到的服务器30的NUMA信息,申请本地内存memory0中的缓存区域用于缓存数据。在CPU0需要将该应用程序的数据发送给其他服务器时,CPU0通过与网卡的接口A将数据发送给网卡。
但是,当前多数原生应用程序无法感知服务器的NUMA信息。若应用程序无法感知服务器的NUMA信息,当应用程序运行时,操作系统会给该应用程序分配其他NUMA节点中的内存用于缓存数据,如运行该应用程序的CPU对应的本地内存不足,需要分配远端内存缓存数据,则在需要发送该应用程序的数据时,CPU需要通过访问远端内存获取远端内存中该应用程序的数据,然后再发送给网卡。或者,操作系统会为该应用程序分配本地内存,但是在发送该应用程序的数据时,操作系统可能会选择通过其他NUMA节点中与网卡连接的接口将数据发送给网卡。例如,图3中,应用程序运行在服务器100的CPU0中,CPU0给该应用程序分配的内存位于节点A的memory0中。上述CPU0在需要发送该应用程序的数据时,可能会选择通过节点B的I/O接口将数据发送给网卡,在这种情况下数据仍然需要跨片传输,即数据需要从节点A的内存模块memory0经过节点之间的通信总线以及CPU1传输到网卡。因此使用图3中所示的网卡仍然会出现增加CPU的开销,数据传输时延长的问题。
为了解决上述服务器在发送数据时,数据需要跨片传输才能到达网卡,增加CPU开销以及数据传输时延的问题,本申请实施例提供一种数据转发芯片,该数据转发芯片具有多个处理器,每个处理器对应有预设地址范围的内存空间,本申请实施例以上述NUMA架构的服务器为例进行说明。如图4所示,图4是本申请实施例提供的一种双路(2P)服务器的示意图,服务器30包括CPU0、CPU1、数据转发芯片500以及网卡600,其中,CPU0位于NUMA节点310中,CPU1位于NUMA节点320中,CPU0和CPU1之间通过通信总线330连接,其中,上述通信总线包括但不限于快速互联通道(quick path interconnect,QPI)总线、超级互联通道(utrapath interconnect,UPI)总线或Intel加速器链路(accelerator Link,IAL)总线等。CPU0和CPU1分别通过总线与数据转发芯片500连接,数据转发芯片500与网卡600之间通过总线连接,其中,上述总线包括但不限于PCIe总线或UPI总线。
数据转发芯片500包括接口模块510、路由模块520、记录模块530、直接内存存取(direct memory access,DMA)引擎540以及第二端点端口550。其中,接口模块510包括多个用于与服务器的socket连接的第一端点端口,其中,上述多个第一端点端口中至少包括两个第一端点端口与处理器对应的内存空间之间连接,本申请实施例中以接口模块510包括两个第一端点端口:第一端点端口5101以及第一端点端口5102为例,第一端点端口5101通过总线与NUMA节点310中的CPU0与内存0直接连接,第一端点端口5102通过总线与NUMA节点320中的CPU1与内存1直接连接。路由模块520用于实现对数据转发芯片500的控制,例如,在接收到CPU发送的数据发送请求后,根据需要发送的目标数据的地址信息,确定获取该目标数据的路径;或者,在接收到数据时,根据接收的数据的目的地址信息,确定将数据写入服务器内存的路径;记录模块530用于记录服务器的NUMA信息;DMA引擎540用于读取或者写入数据,例如从服务器的内存中读取数据或者将接收到的其他服务器发送的数据写入到服务器的内存中。第二端点端口550作为根复合体(root complex)中的root port,与网卡600通过PCIe总线连接,上述根复合体是PCIe拓扑结构的根节点,通常包括Host bridge,根复合体和内部总线。在本申请实施例中,所述Host bridge可以通过路由模块520实现。当然,Host bridge也可以通过数据转发芯片500中的其它控制部件或数据转发芯片500与网卡600之间的其它控制设备来实现,本申请实施例不做具体限定。
网卡600的端点端口610通过PCIe总线与数据转发芯片500的第二端点端口550连接,网卡600通过网络端口620与网络连接,网卡600还包括主控芯片630以及DMA引擎640,主控芯片630用于实现对网卡600的控制,DMA引擎640用于读取或者写入数据,例如从数据转发芯片500中读取数据或者将接收到的其他服务器发送的数据写入到数据转发芯片500中。
本申请实施例中,以数据转发芯片500以及网卡600均支持并启动SR-IOV技术,CPU0运行VM3101,CPU2运行VM3201,数据转发芯片500通过现场可编程逻辑门阵列(fieldprogrammable gate array,FPGA)实现为例,对图4中服务器30的实现进行说明,如图5所示,网卡600包含PF601和PF602,且VF6011与PF601关联,VF6021与PF602关联。
上述数据转发芯片500插入到服务器30连接CPU和网卡600之后,数据转发芯片500会从PCIe枚举的角度枚举网卡600,得到网卡的PF信息和VF信息。本申请实施例中,数据转发芯片500中的路由模块520可以作为PCIe拓扑结构的根节点,通过PCIe枚举发现与第二端点端口550相连的PCIe端点设备:网卡600。例如,路由模块520通过PCIe枚举,发现网卡600并进一步发现网卡600中的PF601和PF602。路由模块520使能每个PF的SR-IOV配置空间的VFEnable寄存器,配置VF的属性以发现VF,例如发现VF6011和VF6021。示例性的,数据转发芯片500通过配置PF601的SR-IOV的capability以发现VF6011,通过配置PF602的SR-IOV的capability以发现VF6021。
路由模块520通过PCIe枚举发现PF和VF,并根据PF和VF在PCIe拓扑中的位置,为发现的PF和VF分配相应的BDF,并将分配的BDF存储在记录模块530中。例如,路由模块520将PF601的BDF、VF6011的BDF、PF602的BDF和VF6021的BDF,存储在记录模块530中。同时,路由模块520还通过枚举获取每个功能单元(例如PF或VF)的BAR空间大小并配置BAR空间地址。以VF6011为例,路由模块520获取VF6011的BAR空间大小,配置VF6011的BAR空间的起始地址和地址长度,配置的VF6011的BAR空间的起始地址和地址长度为VF6011的BAR空间地址信息。通过类似的实现方式,路由模块520还可以获取到PF602的BAR空间地址、PF602的BAR空间地址和VF6021的BAR空间地址信息。路由模块520获取到各个功能单元的BAR空间地址后,将其存储在记录模块530中。
可选地,上述记录模块530可以是数据转发芯片500中独立的存储器,例如随机存取存储器(random access memory,RAM)等,用于存储上述BDF信息和BAR空间地址信息。当然,路由模块520也可以将上述BDF信息和BAR空间地址信息存储在其它的存储器中,该其它的存储器可以是数据转发芯片500外部的存储器。本申请实施例不限定存储BDF信息和BAR空间地址信息的具体位置。
在数据转发芯片500枚举到网卡并获取网卡的PF信息与VF信息之后,数据转发芯片500对CPU呈现PCIe设备,即数据转发芯片500作为CPU与网卡之间的数据转发装置,对CPU呈现为网卡功能,CPU会将该芯片作为网卡设备,进而对数据转发芯片500进行PCIe枚举,获取上述芯片500的PF’信息和VF’信息。即CPU0和CPU1也可以作为PCIe拓扑结构的根节点,通过PCIe枚举发现数据转发芯片500中的端点设备。CPU0与CPU1在对数据转发芯片500进行PCIe枚举时,CPU0通过第一端点端口5101发现PF601’,CPU1通过第一端点端口5102发现PF602’。以CPU0枚举为例,CPU0读取第一端点端口5101的寄存器,该寄存器中存储有标识PF601’的信息,CPU0根据该信息发现PF601’。
上述数据转发芯片500的第一端点端口的寄存器中用于标识PF功能的信息,可以是数据转发芯片500在制造时就配置好的,也可以是路由模块520在获取到网卡600中的PF信息和VF信息之后,根据网卡600中PF和VF的信息配置在第一端点端口的寄存器中的。如果第一端点端口的寄存器中用于标识PF功能的信息是在制造时就配置好的,需要在制造数据转发芯片500时根据可能连接的网卡的相关信息配置相应的PF功能。
上述CPU0在枚举到数据转发芯片500中的PF601’信息之后,使能PF601’的SR-IOV配置空间的VF Enable寄存器,配置VF的属性以发现VF6011’。例如,CPU0通过配置PF601’的SR-IOV的capability以发现VF6011’,CPU0根据PF601’和VF6011’在PCIe拓扑中的位置,为PF601’和VF6011’分配相应的BDF。CPU0还通过枚举获取PF’和VF’的BAR空间大小并配置BAR空间地址。以VF6011’为例,CPU0获取VF6011’的BAR空间大小,配置VF6011’的BAR空间的起始地址和地址长度,配置的VF6011’的BAR空间的起始地址和地址长度为VF6011’的BAR空间地址信息。
CPU0在完成枚举后,通过TLP报文将PF601’的BDF信息和BAR空间地址信息,以及VF6011’的BDF信息和BAR空间地址信息发送给数据转发芯片500。路由模块520根据CPU0发送的信息,建立PF601’的BDF与PF601的BDF之间的对应关系,以及VF6011’的BDF与VF6011的BDF之间的对应关系,并将建立的对应关系存储在记录模块530中。同时,路由模块520建立PF601’的BAR空间地址与PF601的BAR空间地址的对应关系,以及VF6011’的BAR空间地址与VF6011的BAR空间地址之间的对应关系,并将建立的对应关系存储在记录模块530中。
通过上述CPU0对数据转发芯片500的枚举,PF601’可以被看作PF601在数据转发芯片500中的代理,或PF601’为数据转发芯片500中与PF601对应的虚拟的PF;VF6011’可以被看作VF6011在数据转发芯片500中的代理,或VF6011’为数据转发芯片500中与VF6011对应的虚拟的VF。CPU0通过枚举发现数据转发芯片500具备PF的功能(PF601’)和VF的功能(VF6011’),可以将数据转发芯片500作为PCIe链路上的一个网卡,并通过数据转发芯片500实现数据报文或命令报文的转发。数据转发芯片500进而根据存储的对应关系,对接收到的数据报文或命令报文在数据转发芯片500到网卡600之间的转发。
可以理解,CPU1对数据转发芯片500枚举的过程与CPU0对数据转发芯片500的枚举过程类似。例如,在CPU1作为PCIe拓扑结构的根节点进行PCIe枚举时,CPU1发现PF602’并配置VF6021’。CPU1在完成枚举后,通过TLP报文将PF602’的BDF信息和BAR空间地址信息,以及VF6021’的BDF信息和BAR空间地址信息发送给路由模块520。路由模块520将PF602’的BDF与PF602的BDF之间的对应关系,以及VF6021’的BDF与VF6021的BDF之间的对应关系存储在记录模块530中。同时,路由模块520将PF602’的BAR空间地址与PF602的BAR空间地址的对应关系,以及VF6021’的BAR空间地址与VF6021的BAR空间地址之间的对应关系存储在记录模块530中。
服务器30的两个CPU分别枚举到数据转发芯片500之后,服务器加载数据转发芯片500的驱动,该驱动中包括查询服务器的NUMA信息的代码,服务器30在加载该数据转发芯片500的驱动之后,CPU0或者CPU1通过运行该驱动获取服务器30的NUMA信息,并将获取到的NUMA信息通过第一端点端口5101或者第一端点端口5102发送给数据转发芯片500,其中,服务器30的NUMA信息包括NUMA节点310以及NUMA节点320中各NUMA节点对应的内存的大小、内存对应的地址范围以及与各个NUMA节点连接的端点端口信息。路由模块520通过第一端点端口5101或第一端点端口5102接收到上述NUMA信息之后,将上述NUMA信息发送给记录模块530进行记录。同时,记录模块530中可以存储有PF’与PF、VF’与VF的对应关系,例如,PF601’的BDF与PF601的BDF之间的对应关系,以及VF6011’的BDF与VF6011的BDF之间的对应关系;PF601’的BAR空间地址与PF601的BAR空间地址的对应关系,以及VF6011’的BAR空间地址与VF6011的BAR空间地址之间的对应关系;PF602’的BDF与PF602的BDF之间的对应关系,以及VF6021’的BDF与VF6021的BDF之间的对应关系;PF602’的BAR空间地址与PF602的BAR空间地址的对应关系,以及VF6021’的BAR空间地址与VF6021的BAR空间地址之间的对应关系BAR。
需要说明的是,为清楚显示数据转发芯片500的组成以及数据转发芯片500与CPU以及网卡之间的连接关系,数据转发芯片500中的代理单元,例如PF601’、VF6011’、PF602’和VF6021’等,不在图中显示。本申请其它实施例中提到的代理单元,也不再对应的数据转发芯片中显示。
可以理解,上述实施例中是以网卡支持两个PF,每个PF关联一个VF为例,对本申请实施例提供的技术方案进行的描述。在具体实现时,一个网卡可能支持多个PF,每个PF可能关联多个VF,例如,PF601关联64个VF(VF0-VF63),则数据转发芯片500中PF601’关联64个VF’(VF0’-VF63’),其中,VF0-VF63与VF0’-VF63’一一对应。若一个VF对应CPU中的一个虚拟机(virtual machine,VM),例如,CPU0中运行有64个VM(VM0-VM63),则PF601’关联的VF0’-VF63’与CPU0中运行的VM0-VM63一一对应,用于实现VM0-VM63中数据报文或命令报文的转发。同样,CPU1中运行有64个VM(VM64-VM127),PF602’关联的VF64’-VF127’与CPU1中运行的VM64-VM127一一对应,用于实现VM64-VM127中数据报文或命令报文的转发。
下面分别从服务器发送数据和接收数据为例,对数据转发芯片实现CPU与网卡之间数据转发的方法进行介绍。如图6所示,图6是本申请实施例提供的服务器发送数据的方法流程示意图,该方法包括:
601、CPU0发起数据发送请求。
以图5所示的服务器为例,服务器30中CPU0上运行的应用程序需要发送目标数据,例如该应用程序运行在CPU0中的VM9中,CPU0通过运行VM9对应的驱动,向数据转发芯片500发起数据发送请求,将上述数据发送请求封装为对应的描述符之后,通过向门铃(doorbell,DB)寄存器中写入描述符对应的指针并通知数据转发芯片500的路由模块520,其中,上述指针指示上述描述符的位置信息,上述描述符包括上述目标数据的源地址、目标数据的类型以及目标数据的长度等。
602、数据转发芯片500根据上述数据发送请求确定获取上述目标数据的目标路径,并通过目标路径获取上述目标数据。
路由模块520根据指针通过第一端点端口5101从CPU0对应的队列中获取上述描述符,获取描述符中目标数据的源地址,并从记录模块530中获取存储的服务器30的NUMA信息,然后根据描述符中的目标数据的源地址确定目标数据位于服务器内多个NUMA节点中的目标NUMA节点中,根据上述服务器30的NUMA信息,确定与目标NUMA节点连接的目标端点端口,进而确定通过上述目标端点端口获取上述目标数据的路径为最短路径,最后通过DMA引擎540从上述最短路径获取服务器30内存空间的目标数据,并将目标数据存储在数据转发芯片500的缓存中。
举例来讲,若上述服务器30中的CPU0上运行有应用程序,该应用程序申请的内存空间为本地内存,即该应用程序的数据存储在memory0中。在该应用程序需要发送目标数据时,CPU0通过该芯片的驱动将上述数据发送请求封装为对应的描述符,然后将描述符写入到提交队列(submission queue,SQ)中,并通过写DB寄存器通知数据转发芯片500的路由模块520从CPU0对应的SQ中获取描述符。或者上述服务器30中的CPU0将上述数据发送请求转换为处理器间的通信报文发送至CPU1,由CPU1将通信报文解析得到上述数据发送请求并将该数据发送请求封装为对应的描述符之后,然后将描述符写入CPU1对应的内存中的SQ队列中,CPU1通过写DB寄存器通知芯片500的路由模块从CPU1的对应的SQ队列中获取上述描述符。
本申请实施例中,以上述CPU0将数据发送请求发送给CPU1,CPU1通知数据转发芯片500为例,对数据转发芯片500获取目标数据的过程进行阐述。数据转发芯片500的路由模块520通过第一端点端口5102从上述CPU1对应的SQ中获取上述描述符,根据描述符中的目标数据的源地址确定上述目标数据位于memory0中,并根据从记录模块530中获取到的服务器30的NUMA信息,确定memory0位于NUMA节点310中,而数据转发芯片500的第一端点端口5101与NUMA节点310连接,因此路由模块520确定通过路径“第一端点端口5101->memory0”读取上述目标数据为最短路径。进而DMA引擎540通过第一端点端口5101向CPU0发起DMA读请求,通过“memory0->第一端点端口5101”将目标数据读取到上述数据转发芯片500的缓存中。
603、数据转发芯片500将缓存地址通知给网卡600。
上述缓存地址为数据转发芯片500中用于缓存上述目标数据的地址,DMA引擎在将目标数据读取到数据转发芯片500的缓存中之后,路由模块520将该目标数据的缓存地址封装为描述符,并将上述描述符写入数据转发芯片500的SQ队列中,然后将上述描述符对应的指针通过写DB寄存器的方式通知网卡600的主控芯片630。
604、网卡600获取上述缓存地址,根据缓存地址获取上述目标数据。
网卡600的主控芯片630获取到上述数据转发芯片500的SQ队列中的描述符之后,网卡600通过DMA引擎640向上述数据转发芯片500的路由模块520发送DMA读请求,从数据转发芯片的上述缓存地址中读取上述目标数据,并缓存到发送队列中发送至网络。
605、数据转发芯片发送中断信息通知CPU0数据发送完成。
网卡600的DMA引擎640在发送完上述目标数据之后,向数据转发芯片500的路由模块520发送中断信息,通知路由模块520数据发送完毕,路由模块520接收到上述目标数据发送完成的信息之后,通过上述最短路径中的第一端点端口5101向CPU0发送中断信息,以通知CPU0数据发送完成。
上述数据转发芯片500在实现CPU0与网卡600之间数据的转发的过程中,数据转发芯片500是将目标数据读取到数据转发芯片的缓存中缓存,然后将目标数据在数据转发芯片500中的缓存地址通知网卡600,然后由网卡600到数据转发芯片500的缓存中去读取目标数据。可选地,数据转发芯片500在确定从内存中读取目标数据的最短路径之后,数据转发芯片500不从内存中读取该目标数据,而是将目标数据的地址信息发送给网卡600,由网卡600向CPU0发起读请求,数据转发芯片500接收到网卡的读请求之后,将该读请求通过确定的最短路径发送给CPU0,由网卡600通过上述最短路径从内存中读取该目标数据。
在一种具体的实现方式中,数据转发芯片500实现CPU0与网卡600之间数据的转发的过程如图7所示,包括:
701、CPU0发起数据发送请求。
CPU0发起数据发送请求的方式可参照上述601中的详细描述,本申请实施例中,CPU0除将目标数据的地址信息通知数据转发芯片500之外,CPU0还会将发起数据发送请求的VM对应的VF’的BDF信息和BAR空间地址信息发送给数据转发芯片500。
702、数据转发芯片500接收数据发送请求,根据数据发送请求确定获取上述目标数据的目标路径,并将数据发送请求中目标数据的地址信息发送给网卡600。
数据转发芯片500通过第一端点端口5101接收上述数据发送请求,数据转发芯片500的路由模块520根据数据发送请求确定目标路径的过程可参照上述602中,在此不再赘述。
数据转发芯片500的路由模块520在接收到上述数据发送请求之后,对所述数据发送请求进行解析,得到上述数据发送请求中目标数据的源地址,然后将上述目标数据的源地址发送给网卡600,在路由模块520将目标数据的源地址发送给网卡时,由于路由模块520是通过第一端点端口5101接收到上述数据发送请求,CPU0通过上述第一端点端口5101枚举到的是PF601’,而PF601’在对应网卡600中的PF601,则路由模块520将上述目标数据的地址信息发送给PF601或者PF601关联的任意一个VF。示例性的,如果上述CPU0中的VM1发送的上述数据发送请求,VM1在网卡中对应的VF为VF1,则路由模块520将上述目标数据的地址信息发送给网卡600中的VF1。
703、网卡600根据接收到目标数据的地址信息向CPU0发送读请求。
网卡600的PF或VF在接收到上述目标数据的源地址之后,通过DMA引擎640向CPU0发起读请求,该读请求中携带上述目标数据的源地址信息。
704、数据转发芯片500接收网卡600发送的读请求,将读请求转发给CPU0。
可以理解,由于CPU0和CPU1与数据转发芯片500直接连接,CPU0和CPU1枚举到的是数据转发芯片500中的代理单元PF’或者VF’,CPU0与CPU1只能识别数据转发芯片500中代理单元发送的信息。因此,数据转发芯片500的路由模块520在接收到上述读请求之后,需要在该读请求中增加一个PF’或者一个VF’的BDF信息和BAR空间地址信息,其中,在上述读请求中增加的一个PF’或者一个VF’的BDF信息和BAR空间地址信息,是接收到上述数据发送请求的端点端口对应的PF’或者VF’中任意一个的BDF信息和BAR空间地址信息,端点端口对应的PF’或者VF’为CPU通过该端点端口枚举到的PF’或者VF’。或者,在该读请求中包括上述接收目标数据的地址信息的PF或者VF的BDF信息和BAR空间地址信息的情况下,路由模块520将PF或者VF的BDF信息和BAR空间地址信息替换为对应的PF’或者VF’的BDF信息和BAR空间地址信息。
示例性的,在数据转发芯片500的路由模块520通过第一端点端口5101接收到CPU0发送的数据发送请求的情况下,由于CPU0通过第一端点端口5101枚举到的是PF601’,则路由模块520在接收到该数据发送请求对应的读请求时,将该读请求添加上PF601’的BDF信息和BAR空间地址信息,然后将更改后的读请求通过第一端点端口5101发送给CPU0。又例如,在上述702中路由模块520将上述目标数据的源地址发送给网卡600中的VF1后,如果DMA640发送的读请求中包括VF1对应的BDF信息和BAR空间地址信息,则路由模块520在接收到上述读请求之后,将该读请求中的VF1对应的BDF信息和BAR空间地址信息替换为VF1’的BDF信息和BAR空间地址信息,或者替换为PF601’的BDF信息和BAR空间地址信息。路由模块520在对接收到的读请求进行上述修改之后,通过上述确定的目标路径将修改后的读请求发送给CPU0。
705、网卡600读取目标数据,并在将读取的目标数据发送完成后向CPU0发送中断信息。
网卡600的DMA引擎640通过上述目标路径从内存中读取目标数据并发送完成之后,向数据转发芯片500路由模块520发送中断信息,路由模块520接收到上述中断信息之后,通过上述目标路径中的第一端点端口5101向CPU0转发该中断信息,以通知CPU0目标数据发送完成。
在服务器30接收数据时,网卡600接收到网络发送数据报文之后,网卡600的DMA引擎640向数据转发芯片500的路由模块520发送DMA写请求,将数据报文发送给数据转发芯片500进行缓存。数据转发芯片500的驱动在注册成功时,数据转发芯片500的驱动会向服务器申请用于缓存网卡600接收到的数据报文的目标缓存。数据转发芯片500中的记录模块530中存储有上述目标缓存的目的地址,或者网卡600将上述目标缓存的目的地址随数据报文一起发送给路由模块520,数据转发芯片500在接收到数据报文之后,路由模块520根据上述目标缓存的目的地址确定该目标缓存属于memory0,并根据记录模块530中记录的服务器30的NUMA信息,确定memory0位于NUMA节点310中,而数据转发芯片500的第一端点端口5101与NUMA节点310连接,因此路由模块520确定通过路径“第一端点端口5101->memory0”将数据报文发送到目标缓存的路径为最短路径。数据转发芯片500中的DMA引擎540通过上述第一端点端口5101向CPU0发起DMA写请求,进而按照上述路径将数据报文移动到memory0中的目标缓存中。
网卡600接收到其他服务器发送的数据报文之后,可以将该数据报文缓存在网卡600的缓存中,网卡600的DMA引擎640向数据转发芯片500的路由模块520发送写请求,该写请求包括上述目标缓存的目的地址,路由模块520在接收到上述写请求后,根据记录模块530中记录的上述目标缓存的目的地址,确定该目标缓存属于memory0,并根据记录模块530中记录的服务器30的NUMA信息,确定memory0位于NUMA节点310中,而数据转发芯片500的第一端点端口5101与NUMA节点310连接,因此路由模块520确定通过路径“第一端点端口5101->memory0”将数据报文发送到目标缓存的路径为最短路径。然后路由模块520将该写请求转发给CPU0,进而网卡600的DMA引擎640通过上述最短路径写入上述目标缓存,其中,路由模块将该写请求转发给CPU0的方式可参照上述704中将读请求发送给CPU0的方式,在此不再赘述。
本申请实施例中,上述数据转发芯片可以通过现场可编程逻辑门阵列(fieldprogrammable gate array,FPGA)实现,也可以通过专用集成电路(application-specificintegrated circuit,ASIC)芯片实现,本申请实施例不做具体限定。可以理解,当上述数据转发芯片为FPGA芯片时,由于FPGA芯片中具有内存(memory),因此上述数据转发芯片500在从服务器的内存中读取数据,或者接收其他服务器发送的数据时,可以将读取或者接收到的数据缓存在FPGA的memory。在上述数据转发芯片为ASIC芯片时,由于ASIC芯片不具有memory,因此若上述数据转发芯片为ASIC芯片时,则该数据转发芯片500需要连接外部存储器,将读取的数据或者接收到的数据缓存到外部存储器中。
上述图4中服务器以2P服务器为例,在具体实现中,服务器还可以包括两个或者两个以上的CPU,例如服务器还可以为4P或者8P服务器,则每两个CPU通过一个数据转发芯片与其中一个网卡连接。如图8所示,在服务器为4P服务器时,服务器30包括CPU0、CPU1、CPU2以及CPU3,其中,CPU0与CPU2通过数据转发芯片500连接网卡600,CPU1和CPU3通过数据转发芯片700连接网卡800,其中,数据转发芯片700的实现方式与上述数据转发芯片500的实现方式相同,在此不再赘述。
在一种可能的实施方式中,上述数据报文是服务器30上运行的应用程序需要的数据,该应用程序在在运行时会向处理器申请缓存,若应用程序申请的用于存储上述数据报文的缓存与上述数据转发芯片的驱动申请的目标缓存不同,则DMA引擎540在将数据报文发送到上述数据转发芯片的驱动申请的目标缓存之后,数据报文会从目标缓存中复制到应用程序申请的缓存中。若上述目标缓存与上述应用程序申请的缓存位于不同的NUMA节点中,则上述数据报文从目标缓存复制到应用程序申请的缓存中时,数据报文需要进行跨片传输。本申请实施例中,通过配置指定在应用程序需要接收数据时,上述应用程序申请的缓存与数据转发芯片驱动申请的目标缓存位于同一个NUMA节点中,从而防止数据报文的跨片传输。
上述数据转发芯片通过获取并记录服务器的内存分布信息以及服务器内与数据转发芯片的接口的映射关系,在多处理器以及多内存的服务器(例如采用NUMA架构的服务器)发送数据或者接收数据时,上述数据转发芯片可以根据需要发送的目标数据的目的地址、服务器中的内存分布信息以及上述映射关系,确定获取上述目标数据的最短路径,并通过确定的最短路径读取上述目标数据;或者在接收到其他服务器发送的数据时,根据服务器为接收到的数据分配的目的地址,以及上述内存分布信息和映射关系,确定将接收到的数据发送到目标地址的最短路径。从而不需应用程序感知上述内存分布信息,即能够避免服务器在发送或者接收数据时,数据在处理器之间发生跨片传输,达到降低数据传输时延,降低处理器开销,提高处理器利用率的目的。
图9是本申请实施例提供的一种计算机设备900的结构示意图,如图9所示,该计算机设备包括CPU901、CPU902、数据转发芯片903以及网卡904,上述数据转发芯片903通过总线分别与上述CPU901、CPU902以及上述网卡904,该网卡904包括多个虚拟化技术产生的功能单元,例如该网卡904包括多个基于SR-IOV虚拟化技术产生的PF或VF。
上述数据转发芯片903,用于获取上述网卡904中第一功能单元和第二功能单元的信息,并分别为上述第一功能单元和第二功能单元分配地址,上述第一功能单元和上述第二功能单元均用于实现上述网卡904的功能。
上述CPU901和CPU902,分别获取上述数据转发芯片903中第一代理单元和第二代理单元的信息,并分别为第一代理单元和第二代理单元分配地址,然后分别将第一代理单元和第二代理单元的地址信息发送给上述数据转发芯片903,其中,第一代理单元是第一功能单元的代理,第二代理单元是第二功能单元的代理。
所述数据转发芯片903,还用于根据上述第一代理单元和上述第二代理单元的地址信息,建立上述第一代理单元的地址信息与上述第一功能单元的地址信息之间的对应关系,以及上述第二代理单元的地址信息与上述第二功能单元的地址信息之间的对应关系,并根据上述对应关系,实现CPU901或CPU902与所述网卡904之间报文的转发。
在一种具体的实施方式中,上述CPU901或者CPU902,用于向数据转发芯片903发送数据发送请求,该数据发送请求指示数据转发芯片903从计算机设备900的内存中获取计算机设备需要发送的目标数据。
上述数据转发芯片903用于获取上述CPU901或者CPU902发送的数据发送请求,并根据上述数据发送请求中的目标地址,确定获取目标数据的最短路径,并通过确定的最短路径获取上述目标数据,将获取到的目标数据发送给网卡904。
上述网卡904用于在接收到上述数据转发芯片发送的目标数据之后,将目标数据发送到网络。
在一种具体的实施方式中,上述网卡904还用于接收其他计算机设备通过网络发送的数据报文,将上述数据报文发送给数据转发芯片903。上述数据转发芯片903还用于根据服务器为网卡904接收到的数据分配的缓存空间的目标地址,确定将上述数据报文写入上述目标地址的最短路径,并将该数据报文通过确定的最短路径发送到目标地址。
具体的,该计算机设备900中数据转发芯片903发现网卡904的第一功能单元以及第二功能单元的,以及实现通过最短路径从内存空间中读取数据或者通过最短路径将数据发送到内存空间的方法,可参照上述实施例中对数据转发芯片903的介绍,在此不再详细阐述。上述CPU901或者CPU902发现数据转发芯片903的第一代理单元以及第二代理单元的方法,可参照上述实施例中CPU0枚举的过程,在此不再详细阐述。
在一种具体的实施方式中,上述服务器采用NUMA架构,CPU在加载上述数据转发芯片903的驱动之后,运行该数据转发芯片903的驱动获取服务器的NUMA信息,并将服务器的NUMA信息发送给数据转发芯片903,数据转发芯片903在接收到数据发送请求之后,根据数据发送请求中的目标地址,确定目标数据位于服务器内多个NUMA节点中的目标NUMA节点中,根据上述服务器900的NUMA信息,确定与目标NUMA节点连接的目标端点端口,进而确定通过上述目标端点端口获取上述目标数据的路径为最短路径,最后通过上述最短路径获取服务器30内存空间的目标数据,确定获取上述目标数据的最短路径,并通过确定的最短路径获取上述目标数据,并将获取到的目标数据发送给网卡904。
本申请实施例中,数据转发芯片903包括:接口模块9031、路由模块9032、记录模块9033、DMA引擎模块9034以及第二端点端口9035,其中,接口模块9031包括第一端点端口90311以及第一端点端口90312,数据转发芯片903通过第一端点端口90311与CPU901连接,通过第一端点端口90312与CPU902连接。
所述路由模块9032,用于获取上述网卡904中第一功能单元的信息,为所述第一功能单元分配地址,获取第一代理单元的地址信息,并建立所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系;其中,所述第一功能单元为所述网卡904中基于虚拟化技术产生的单元,所述第一代理单元是所述第一功能单元的代理;
所述记录模块9033,用于存储所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系;
所述路由模块9032,还用于根据所述第一代理单元的地址信息与所述第一功能单元的地址信息之间的对应关系,实现所述CPU901与所述网络适配器之间报文,例如数据报文或命令报文的转发。
上述数据转发芯片903还用于获取上述CPU901或者CPU902发送的数据发送请求,并根据上述数据发送请求中的地址,确定获取目标数据的最短路径,并通过确定的最短路径获取上述目标数据,然后将获取到的目标数据发送给网卡904。
上述数据转发芯片903的具体实现方式,可以上述图4或者图5中的与数据转发芯片500的相关描述,在此不再赘述。
应当理解,上述实施例中所描述的芯片或者服务器的结构仅是示例性的,上述描述的芯片或者服务器的功能,还可以通过其他方式实现,例如上述数据转发芯片的结构,仅仅是一种逻辑功能的划分,实际实现时还可以有另外的划分方式。另外,本申请实施例中各功能芯片可以集成在一个模块上,也可以是各个芯片单独存在。以上对本申请实施例进行的介绍,是采用具体个例对本申请中提供的芯片和服务器的原理进行的阐述,以上实施例只是用于帮助理解本申请的核心思想,对于本领域技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (25)
1.一种服务器,其特征在于,所述服务器包括:数据转发芯片、网卡以及目标处理器,所述数据转发芯片通过总线分别与所述网卡和所述目标处理器连接,其中,
所述数据转发芯片用于:接收所述目标处理器或者所述网卡发送的数据转发请求;
通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口是所述数据转发芯片上与所述数据转发请求的地址对应的内存空间直接相连的端点端口。
2.根据权利要求1所述的服务器,其特征在于,所述数据转发芯片还用于:
根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,其中,所述内存分布信息包括所述数据转发芯片上多个端点端口中的至少两个端点端口与所述服务器的内存空间之间的对应关系。
3.根据权利要求2所述的服务器,其特征在于,所述服务器包括多个处理器,所述多个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接,所述内存分布信息包括所述多个端点端口中至少两个端点端口与所述多个处理器对应的预设地址范围的内存空间之间的对应关系,所述目标处理器为所述多个处理器中的任意一个。
4.根据权利要求2或3所述的服务器,其特征在于,
所述目标处理器,用于通过所述总线向所述数据转发芯片发送所述数据转发请求,所述数据转发请求携带所述待转发数据的源地址;
所述数据转发芯片,具体用于:根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述源地址对应的内存空间直接连接的端点端口为所述目标端点端口。
5.根据权利要求2或3所述的服务器,其特征在于,
所述网卡,用于向所述数据转发芯片发送所述数据转发请求,所述数据转发请求为所述网卡向所述目标处理器发送的写数据请求;
所述数据转发芯片,具体用于:根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述目的地址对应的内存空间直接连接的端点端口为所述目标端点端口,其中,所述目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
6.根据权利要求2-5任一项所述的服务器,其特征在于,
所述数据转发芯片还用于:
根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括所述目标端点端口;
通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
7.根据权利要求1-3任一项所述的服务器,其特征在于;
所述数据转发芯片,还用于对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
所述目标处理器用于:对所述数据转发芯片进行枚举,获取所述数据转发芯片中代理单元的信息,为所述代理单元分配地址,并将所述代理单元的地址信息发送给所述数据转发芯片,其中,所述代理单元为所述功能单元的代理;
所述数据转发芯片还用于:根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系。
8.根据权利要求7所述的服务器,其特征在于,
所述数据转发芯片,还用于根据所述数据转发芯片中代理单元的地址信息与所述网卡中功能单元的地址信息之间的对应关系,实现所述数据转发请求在所述目标处理器与所述网卡之间的转发。
9.根据权利要求2-8任一项所述的服务器,其特征在于,
所述目标处理器,还用于加载所述数据转发芯片的驱动程序,并通过运行所述驱动程序获取所述内存分布信息并发送给所述数据转发芯片。
10.一种数据转发芯片,其特征在于,所述数据转发芯片包括路由模块、至少两个第一端点端口和第二端点端口,所述至少两个第一端点端口分别与服务器的至少两个处理器连接,所述第二端点端口与所述服务器的网卡连接;
所述路由模块,分别与所述第一端点端口和所述第二端点端口连接,通过所述第一端点端口接收目标处理器发送的数据转发请求或通过所述第二端点端口接收所述网卡发送的数据转发请求,并通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口是所述至少两个第一端点端口中与所述数据转发请求的地址对应的内存空间直接相连的端点端口,所述目标处理器为所述至少两个处理器中的任意一个。
11.根据权利要求10所述的芯片,其特征在于,所述数据转发芯片还包括:
记录模块,用于记录所述服务器的内存分布信息,所述内存分布信息包括所述至少两个第一端点端口与所述服务器的内存空间之间的对应关系;
所述路由模块,还用于:
从所述记录模块中获取所述服务器的内存分布信息,根据所述内存分布信息和所述数据转发请求的地址,确定所述目标端点端口。
12.根据权利要求11所述的芯片,其特征在于,所述内存分布信息包括所述至少两个第一端点端口与所述服务器中所述至少两个处理器对应的预设地址范围的内存空间之间的对应关系,其中,所述至少两个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接。
13.根据权利要求11或12所述的芯片,其特征在于,所述路由模块具体用于:
通过所述第一端点端口获取目标处理器发送的所述数据转发请求,所述数据转发请求携带所述待转发数据的源地址;
根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述源地址对应的内存空间直接连接的第一端点端口为所述目标端点端口。
14.根据权利要求11或12所述的芯片,其特征在于,所述路由模块具体用于:
通过所述第二端点端口获取所述网卡发送的所述数据转发请求,所述数据转发请求为所述网卡发送给所述处理器的写数据请求;
根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述目的地址对应的内存空间直接连接的第一端点端口为所述目标端点端口,其中,所述目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
15.根据权利要求10-14任一项所述的芯片,其特征在于,
所述路由模块具体用于:
根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括所述目标端点端口;
所述数据转发芯片还包括直接内存存取DMA引擎,用于:通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
16.根据权利要求11或12所述的芯片,其特征在于,
所述路由模块,还用于:对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
接收所述目标处理器发送的代理单元的地址信息,其中,所述代理单元为所述功能单元的代理;
根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系,并将所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系发送给所述记录模块进行存储。
17.根据权利要求16所述的芯片,其特征在于,所述路由模块还用于:
根据所述网卡中功能单元的地址信息与所述数据转发芯片中代理单元的地址信息之间的对应关系,实现所述数据转发请求在所述处理器与所述网卡之间的转发。
18.一种数据转发方法,其特征在于,包括:
数据转发芯片接收目标处理器或者网卡发送的数据转发请求;
所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,所述目标端点端口是所述数据转发芯片上至少两个第一端点端口中与所述数据转发请求的地址对应的内存空间直接连接的端点端口;
其中,所述数据转发芯片包括所述至少两个第一端点端口和第二端点端口,所述至少两个第一端点端口分别与服务器的至少两个处理器连接,所述第二端点端口与所述服务器的网卡连接,所述目标处理器为所述至少两个处理器中的任意一个。
19.根据权利要求18所述的方法,其特征在于,所述方法还包括:
所述数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,其中,所述内存分布信息包括所述至少两个第一端点端口与所述服务器的内存空间之间的对应关系。
20.根据权利要求19所述的方法,其特征在于,所述内存分布信息包括所述至少两个第一端点端口与所述至少两个处理器对应的预设地址范围的内存空间之间的对应关系,其中,所述至少两个处理器中的每个处理器对应有预设地址范围的内存空间,所述每个处理器与对应的预设地址范围的内存空间直接连接。
21.根据权利要求19或20所述的方法,其特征在于,数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,包括:
所述数据转发芯片通过所述至少两个第一端点端口中的任意一个获取所述目标处理器发送的所述数据转发请求,所述数据转发请求携带所述待转发数据的源地址;
所述数据转发芯片根据所述数据转发请求携带的所述源地址以及所述服务器的内存分布信息,确定与所述源地址对应的内存空间直接连接的第一端点端口为所述目标端点端口。
22.根据权利要求19或20所述的方法,其特征在于,数据转发芯片根据所述数据转发请求的地址与所述服务器的内存分布信息,确定所述目标端点端口,包括:
所述数据转发芯片接收所述网卡发送的数据转发请求,所述数据转发请求为所述网卡发送给所述目标处理器的写数据请求;
所述数据转发芯片根据预设的写数据请求的目的地址以及所述服务器的内存分布信息,确定与所述目的地址对应的内存空间直接连接的第一端点端口为所述目标端点端口,其中,所述目的地址是所述目标处理器分配的,用于缓存所述待转发数据的内存空间对应的地址。
23.根据权利要求18-22任一项所述的方法,其特征在于,所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发,包括:
所述数据转发芯片根据所述目标端点端口,确定转发所述待转发数据的路径,其中,所述路径包括所述目标端点端口;
所述数据转发芯片通过所述路径从所述待转发数据的源地址对应的内存空间获取所述待转发数据并缓存,并将缓存所述待转发数据的缓存地址发送给所述网卡,以使所述网卡根据所述缓存地址获取所述待转发数据;或者
所述数据转发芯片从所述网卡获取所述待转发数据,通过所述路径将所述待转发数据发送到所述数据转发请求的地址对应的内存空间。
24.根据权利要求18-20任一项所述的方法,其特征在于,所述数据转发芯片通过目标端点端口,实现所述数据转发请求指定的待转发数据的转发之前,还包括:
所述数据转发芯片对所述网卡进行枚举,获取所述网卡中功能单元的信息,并为所述功能单元分配地址,其中,所述功能单元用于实现所述网卡的功能,所述功能单元的信息包括物理功能PF的信息和/或虚拟功能VF的信息;
所述数据转发芯片接收目标处理器发送的代理单元的地址信息,其中,所述代理单元为所述功能单元在所述数据转发芯片中的代理;
所述数据转发芯片根据所述代理单元的地址信息,建立所述代理单元的地址信息与所述功能单元的地址信息之间的对应关系。
25.根据权利要求24所述的方法,其特征在于,所述方法还包括:
所述数据转发芯片根据所述代理单元的地址信息与所述功能单元的地址信息,实现所述数据转发请求在所述目标处理器与所述网卡之间的转发。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910895926.4A CN112540941A (zh) | 2019-09-21 | 2019-09-21 | 一种数据转发芯片及服务器 |
PCT/CN2020/097867 WO2021051919A1 (zh) | 2019-09-21 | 2020-06-24 | 一种数据转发芯片及服务器 |
US17/698,059 US11829309B2 (en) | 2019-09-21 | 2022-03-18 | Data forwarding chip and server |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910895926.4A CN112540941A (zh) | 2019-09-21 | 2019-09-21 | 一种数据转发芯片及服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112540941A true CN112540941A (zh) | 2021-03-23 |
Family
ID=74883934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910895926.4A Pending CN112540941A (zh) | 2019-09-21 | 2019-09-21 | 一种数据转发芯片及服务器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11829309B2 (zh) |
CN (1) | CN112540941A (zh) |
WO (1) | WO2021051919A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312182A (zh) * | 2021-07-27 | 2021-08-27 | 阿里云计算有限公司 | 一种云计算节点、文件处理方法及装置 |
CN113938428A (zh) * | 2021-09-06 | 2022-01-14 | 锐捷网络股份有限公司 | 跨芯片的数据流转发方法及装置 |
CN114500654A (zh) * | 2022-02-23 | 2022-05-13 | 石家庄通合电子科技股份有限公司 | 一种数据转发装置、电源模块及数据转发方法 |
CN115314159A (zh) * | 2022-08-02 | 2022-11-08 | 成都爱旗科技有限公司 | 一种芯片间数据传输方法及装置 |
WO2024108825A1 (zh) * | 2022-11-21 | 2024-05-30 | 浪潮(北京)电子信息产业有限公司 | 内存备份加速方法、装置、设备及非易失性可读存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114553797B (zh) * | 2022-02-25 | 2023-05-09 | 星宸科技股份有限公司 | 具有命令转发机制的多芯片系统及地址产生方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013989A (zh) * | 2006-01-18 | 2007-08-08 | 国际商业机器公司 | 使用集成did的基于pci总线地址的路由的方法和装置 |
CN102388373A (zh) * | 2011-09-30 | 2012-03-21 | 华为技术有限公司 | 访问高速缓冲存储器的方法及非真实缓存代理 |
CN104579695A (zh) * | 2013-10-23 | 2015-04-29 | 杭州华三通信技术有限公司 | 一种数据转发装置和方法 |
US20170142012A1 (en) * | 2013-09-04 | 2017-05-18 | Nicira, Inc. | Multiple Active L3 Gateways for Logical Networks |
CN106936739A (zh) * | 2015-12-30 | 2017-07-07 | 新华三技术有限公司 | 一种报文转发方法及装置 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103544269B (zh) * | 2013-10-17 | 2017-02-01 | 华为技术有限公司 | 目录的存储方法、查询方法及节点控制器 |
CN103744799B (zh) * | 2013-12-26 | 2017-07-21 | 华为技术有限公司 | 一种内存数据访问方法、装置和系统 |
CN105404597B (zh) * | 2015-10-21 | 2018-10-12 | 华为技术有限公司 | 数据传输的方法、设备及系统 |
CN107111452B (zh) * | 2015-12-03 | 2020-01-10 | 华为技术有限公司 | 应用于计算机系统的数据迁移方法和装置、计算机系统 |
AU2015412144B2 (en) * | 2015-12-29 | 2018-11-15 | Xfusion Digital Technologies Co., Ltd. | CPU and multi-CPU system management method |
CN106789756A (zh) * | 2016-12-26 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 一种基于操作系统内核网桥的数据发送方法和装置 |
-
2019
- 2019-09-21 CN CN201910895926.4A patent/CN112540941A/zh active Pending
-
2020
- 2020-06-24 WO PCT/CN2020/097867 patent/WO2021051919A1/zh active Application Filing
-
2022
- 2022-03-18 US US17/698,059 patent/US11829309B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101013989A (zh) * | 2006-01-18 | 2007-08-08 | 国际商业机器公司 | 使用集成did的基于pci总线地址的路由的方法和装置 |
CN102388373A (zh) * | 2011-09-30 | 2012-03-21 | 华为技术有限公司 | 访问高速缓冲存储器的方法及非真实缓存代理 |
US20170142012A1 (en) * | 2013-09-04 | 2017-05-18 | Nicira, Inc. | Multiple Active L3 Gateways for Logical Networks |
CN104579695A (zh) * | 2013-10-23 | 2015-04-29 | 杭州华三通信技术有限公司 | 一种数据转发装置和方法 |
CN106936739A (zh) * | 2015-12-30 | 2017-07-07 | 新华三技术有限公司 | 一种报文转发方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312182A (zh) * | 2021-07-27 | 2021-08-27 | 阿里云计算有限公司 | 一种云计算节点、文件处理方法及装置 |
CN113938428A (zh) * | 2021-09-06 | 2022-01-14 | 锐捷网络股份有限公司 | 跨芯片的数据流转发方法及装置 |
CN113938428B (zh) * | 2021-09-06 | 2023-06-16 | 锐捷网络股份有限公司 | 跨芯片的数据流转发方法及装置 |
CN114500654A (zh) * | 2022-02-23 | 2022-05-13 | 石家庄通合电子科技股份有限公司 | 一种数据转发装置、电源模块及数据转发方法 |
CN114500654B (zh) * | 2022-02-23 | 2024-03-22 | 石家庄通合电子科技股份有限公司 | 一种数据转发装置、电源模块及数据转发方法 |
CN115314159A (zh) * | 2022-08-02 | 2022-11-08 | 成都爱旗科技有限公司 | 一种芯片间数据传输方法及装置 |
CN115314159B (zh) * | 2022-08-02 | 2023-08-04 | 成都爱旗科技有限公司 | 一种芯片间数据传输方法及装置 |
WO2024108825A1 (zh) * | 2022-11-21 | 2024-05-30 | 浪潮(北京)电子信息产业有限公司 | 内存备份加速方法、装置、设备及非易失性可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20220206969A1 (en) | 2022-06-30 |
WO2021051919A1 (zh) | 2021-03-25 |
US11829309B2 (en) | 2023-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021051919A1 (zh) | 一种数据转发芯片及服务器 | |
US20200278880A1 (en) | Method, apparatus, and system for accessing storage device | |
CN107690622B (zh) | 实现硬件加速处理的方法、设备和系统 | |
US11593291B2 (en) | Methods and apparatus for high-speed data bus connection and fabric management | |
WO2019233322A1 (zh) | 资源池的管理方法、装置、资源池控制单元和通信设备 | |
US8918568B2 (en) | PCI express SR-IOV/MR-IOV virtual function clusters | |
US11741039B2 (en) | Peripheral component interconnect express device and method of operating the same | |
US11995019B2 (en) | PCIe device with changeable function types and operating method thereof | |
US11983136B2 (en) | PCIe device and operating method thereof | |
US11928070B2 (en) | PCIe device | |
US20220300442A1 (en) | Peripheral component interconnect express device and method of operating the same | |
US10719333B2 (en) | BIOS startup method and apparatus | |
US20220327228A1 (en) | PCIe FUNCTION AND OPERATING METHOD THEREOF | |
CN115840620A (zh) | 一种数据通路构建方法、设备及介质 | |
US11604742B2 (en) | Independent central processing unit (CPU) networking using an intermediate device | |
CN115811509A (zh) | 一种总线通信方法及相关设备 | |
CN116483259A (zh) | 一种数据处理方法以及相关装置 | |
US20240012684A1 (en) | Memory disaggregation method, computing system implementing the method | |
US20230350824A1 (en) | Peripheral component interconnect express device and operating method thereof | |
US20230318606A1 (en) | Interface device and method of operating the same | |
CN117877541A (zh) | 用于控制池化存储器装置或存储器扩展器的设备和方法 | |
CN117827449A (zh) | 服务器的物理内存扩展架构、服务器、方法、设备及介质 | |
CN117648264A (zh) | 一种网卡设备及数据传输系统 |
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 |