在网络接口控制器(nic)中促进对幂等操作进行高效管理的系统和方法

文档序号:1909822 发布日期:2021-11-30 浏览:17次 >En<

阅读说明:本技术 在网络接口控制器(nic)中促进对幂等操作进行高效管理的系统和方法 (System and method for facilitating efficient management of idempotent operations in a Network Interface Controller (NIC) ) 是由 D·罗威斯 R·L·阿尔弗森 A·成 T·J·约翰逊 于 2020-03-23 设计创作,主要内容包括:提供了一种能够促进对幂等操作进行高效管理的网络接口控制器(NIC)。所述NIC可以配备有网络接口和操作管理逻辑块。在操作期间,所述网络接口可以接收来自远程设备的操作请求。所述操作管理逻辑块可以确定所述请求是否是针对幂等操作。如果所述请求是针对幂等操作,则所述操作管理逻辑块可以执行所述操作以生成输出结果并生成包括所述输出结果的响应来对所述请求作出响应。(A Network Interface Controller (NIC) is provided that facilitates efficient management of idempotent operations. The NIC may be equipped with a network interface and operation management logic. During operation, the network interface may receive an operation request from a remote device. The operation management logic block may determine whether the request is for an idempotent operation. If the request is for an idempotent operation, the operation management logic may perform the operation to generate an output result and generate a response including the output result to respond to the request.)

在网络接口控制器(NIC)中促进对幂等操作进行高效管理的 系统和方法

背景技术

技术领域

本公开总体上涉及联网技术领域。更具体地,本公开涉及用于促进网络接口控制器(NIC)对幂等操作进行高效管理的系统和方法。

相关技术

随着支持网络的设备和应用变得越来越普遍,各种类型的流量以及不断增加的网络负载继续要求底层网络架构提供更高的性能。例如,诸如高性能计算(HPC)、流媒体和物联网(IOT)等应用可以产生具有鲜明特征的不同类型的流量。因此,除了诸如带宽和延迟等传统网络性能指标外,网络架构师仍继续面临诸如可扩展性、多功能性和效率等挑战。

发明内容

提供了一种能够对幂等操作进行高效管理的网络接口控制器(NIC)。所述NIC可以配备有网络接口和操作管理逻辑块。在操作期间,所述网络接口可以接收来自远程设备的操作请求。所述操作管理逻辑块可以确定所述请求是否是针对幂等操作。如果所述请求是针对幂等操作,则所述操作管理逻辑块可以执行所述操作以生成输出结果并生成包括所述输出结果的响应来对所述请求作出响应。

附图说明

图1示出了示例性网络。

图2A示出了具有多个NIC的示例性NIC芯片。

图2B示出了NIC的示例性架构。

图3A示出了用于NIC中的幂等操作的示例性动态管理过程。

图3B示出了用于NIC中的多包幂等操作的示例性动态管理过程。

图4A示出了用于源NIC中的幂等操作的动态管理过程的流程图。

图4B示出了用于目标NIC中的幂等操作的动态管理过程的流程图。

图5示出了配备有促进对幂等操作进行动态管理的NIC的示例性计算机系统。

在这些附图中,相同的附图标记指代相同的附图元素。

具体实施方式

对所公开实施例的各种修改对于本领域技术人员来说将是显而易见的,并且在不脱离本公开的精神和范围的情况下,本文定义的一般原理可以应用于其他实施例和应用。因此,本发明不限于所示实施例。

概述

本公开描述了促进对网络接口控制器(NIC)中的幂等操作进行动态管理的系统和方法。NIC允许主机与数据驱动的网络进行通信。网络可以通过维持各个包流的状态信息以快速、有效的拥塞控制来适应动态数据流量。更具体地,注入交换机网络中的包可以被分类到流中,这些流可以映射到它们的第2层、第3层或其他协议特定报头信息。每个流可以用交换机的输入端口本地的不同标识符进行标记,并设置有流特定输入缓冲区,以便每个流可以单独进行流控制。另外,相应流中的包可以在到达网络的出口点时进行确认,而确认的包可以沿着相同的数据路径以相反的方向被发送回所述流的入口点。因此,每个交换机都可以获得其正在转发的活动包流的状态信息,并且可以执行高响应性、流特定流控制。这种流控制可以允许网络以更高的容量操作,同时提供通用的流量工程能力。

本文描述的实施例通过以下方式来解决确保恰当执行远程请求的幂等操作的问题:(i)执行单包操作,而无需跟踪所述操作是否是重复操作;以及(ii)存储多包操作的输出结果的存储器位置。通过这种方式,NIC可以使用已经执行的多包操作的输出结果的存储器位置来响应重复请求。

在操作期间,可以在NIC的源设备上运行的应用程序可以请求对远程目标设备的存储器位置进行数据操作(例如,远程直接存储器访问(RDMA)的“GET”或“PUT”命令)。目标设备的NIC可以接收请求,促进操作的执行,并发送带有执行输出结果的响应。输出结果的示例可以包括但不限于:根据与操作相关联的计算而生成的一个或多个值;指示操作执行成功或不成功的指示符;与操作相关联的存储器位置或索引;以及指示基于对数据结构执行操作的数据结构状态的信息。源设备和目标设备的NIC可以分别被称为源NIC和目标NIC。操作可以是幂等操作或非幂等操作。幂等操作可以执行一次以上,而不会导致错误。另一方面,非幂等操作可以执行一次。将非幂等操作执行一次以上可能会导致错误。

通常,如果幂等RDMA操作没有完成,则目标设备的软件(例如,操作系统)可以重放所述操作,而不是目标NIC执行所述操作。然而,这种基于软件的执行会占用大量的主机带宽(例如,内部总线的带宽)和处理器周期。此外,跟踪操作完成所产生的计算开销可能高于操作的计算负荷的计算开销。因此,跟踪幂等操作可能效率低下。

为了解决这一问题,源NIC可以生成指示符,所述指示符指示所请求的操作是幂等操作还是非幂等操作。然后,源NIC可以将请求包含在包中,并经由交换机结构将包发送到目标NIC。源NIC可以将指示符包括在请求中(例如,作为请求的参数)或包中(例如,在包的报头中)。在接收到请求后,目标NIC可以基于指示符来确定所请求的操作是幂等操作。然后,目标NIC可以执行操作而无需确定操作是否是重复操作,并生成操作的输出结果(或结果)。目标NIC可以基于经由目标NIC的快速外围部件互连(PCIe)接口进行的存储器访问来执行操作。然后,目标NIC可以将输出结果包括在响应包中,并将响应发送回源NIC。这使得目标NIC可以避免跟踪幂等操作的完成状态。

如果对幂等操作的请求与大量存储器位置相关联,则所述请求可以生成一组操作。这组操作中的每一个操作都可以对应于幂等操作。源NIC可以针对请求生成多个包(每个包用于这组操作中的一个操作),并将相应的包发送到目标NIC。这样的请求可以被称为多包请求。由于每个包都可以包括相应的操作,因此幂等操作的多包请求可以作为一组单包请求进行传输。源NIC可以将请求的相应数据包存储在重试缓冲区中。如果源NIC在超时间隔内没有接收到对包的响应,则源NIC可以从重试缓冲区获得包并重新发送包。

对于每个包,目标NIC可以执行操作而无需确定操作是否是重复操作,并生成操作的输出结果(或结果)。然后,目标NIC可以将输出结果包括在响应包中,并将响应发送回源NIC。由于操作是幂等操作并以每个包可以表示单包幂等操作的方式分布在多个包中,因此目标NIC可能不会存储与每个单独包相关联的操作的输出结果。

本发明的一个实施例提供了一种NIC,所述NIC可以配备有网络接口和操作管理逻辑块。在操作期间,所述网络接口可以接收来自远程设备的操作请求。所述操作管理逻辑块可以确定所述请求是否是针对幂等操作。如果所述请求是针对幂等操作,则所述操作管理逻辑块可以执行所述操作以生成输出结果并生成包括所述输出结果的响应来对所述请求作出响应。

在本实施例的变体中,所述请求可以是多包请求。于是,所述请求可以分布在多个包中。因此,所述包可以在所述多个包中。

在进一步变体中,所述多个包中的相应包包括对应于所述请求的操作,从而将所述包呈现为单包请求。

在本实施例的变体中,所述操作管理逻辑块可以执行所述操作以生成所述输出结果,而无需检查所述NIC先前是否已经执行过所述操作。

在本实施例的变体中,所述包是从所述远程设备的重试缓冲区发送的。

在本实施例的变体中,所述操作管理逻辑块可以基于经由所述NIC的快速外围部件互连(PCIe)接口进行的存储器访问来执行所述操作。

在本实施例的变体中,所述操作对应于RDMA命令。

在本公开中,结合图1的描述与网络架构有关,并且结合图2A及之后的描述提供了关于与支持对幂等操作进行高效管理的NIC相关联的架构和操作的更多细节。

图1示出了示例性网络。在该示例中,交换机网络100(也可以被称为“交换机结构”)可以包括交换机102、104、106、108和110。每个交换机在交换机结构100内可以具有唯一的地址或ID。各种类型的设备和网络可以耦接到交换机结构。例如,存储阵列112可以经由交换机110耦接到交换机结构100;基于无限带宽(IB)的HPC网络114可以经由交换机108耦接到交换机结构100;诸如主机116等多个终端主机可以经由交换机104耦接到交换机结构100;并且IP/以太网网络118可以经由交换机102耦接到交换机结构100。通常,交换机可以具有边缘端口和结构端口。边缘端口可以耦接到结构外部的设备。结构端口可以经由结构链路耦接到结构内的另一个交换机。通常,流量可以经由边缘交换机的入口端口注入到交换机结构100中,并经由另一个(或同一个)边缘交换机的出口端口离开交换机结构100。入口链路可以将边缘设备(例如,HPC终端主机)的NIC耦接到边缘交换机的入口边缘端口。然后,交换机结构100可以将流量传输到出口边缘交换机,所述出口边缘交换机进而可以经由另一个NIC将流量传送到目的地边缘设备。

示例性NIC架构

图2A示出了具有多个NIC的示例性NIC芯片。参考图1中的示例,NIC芯片200可以是为主机116设计的定制专用集成电路(ASIC)以与交换机结构100一起工作。在该示例中,芯片200可以提供两个独立的NIC 202和204。芯片200的各个NIC可以配备有主机接口(HI)(例如,用于连接到主机处理器的接口)和一个高速网络接口(HNI),以用于与耦接到图1的交换机结构100的链路进行通信。例如,NIC 202可以包括HI 210和HNI 220,并且NIC 204可以包括HI 211和HNI 221。

在一些实施例中,HI 210可以是外围部件互连(PCI)接口或快速外围部件互连(PCIe)接口。HI 210可以经由主机连接201耦接到主机,所述主机连接可以包括N个(例如,在一些芯片中N可以是16)PCIe Gen 4通道,能够以高达每通道25Gbps的信令速率进行操作。HNI 210可以促进高速网络连接203,这样可以与图1的交换机结构100中的链路进行通信。HNI 210可以使用M个(例如,在一些芯片中M可以是4)全双工串行通道以100Gbps或200Gbps的总速率进行操作。M个通道中的每一个都可以分别基于非归零(NRZ)调制或脉冲幅度调制4(PAM4)以25Gbps或50Gbps的速率进行操作。HNI 220可以支持电气和电子工程师协会(IEEE)802.3基于以太网的协议、以及为更高速率的小消息提供支持的增强型帧格式。

NIC 202可以支持以下一项或多项:基于消息传递接口(MPI)的点对点消息传递、远程存储器访问(RMA)操作、批量数据集体操作的卸载和进度、以及以太网包处理。当主机发出MPI消息时,NIC 202可以匹配对应的消息类型。此外,NIC 202可以针对MPI实施紧迫协议和约定协议两者,从而从主机卸载对应的操作。

此外,NIC 202所支持的RMA操作可以包括PUT、GET和原子存储器操作(AMO)。NIC202可以提供可靠的传输。例如,如果NIC 202是源NIC,则NIC 202可以为幂等操作提供重试机制。此外,基于连接的错误检测和重试机制可以用于可能操纵目标状态的有序操作。NIC202的硬件可以维持重试机制所需的状态。通过这种方式,NIC 202可以减轻主机(例如,软件)上的负担。决定重试机制的策略可以由主机通过驱动程序软件来指定,从而确保NIC202的灵活性。

此外,NIC 202可以促进触发操作、通用卸载机制以及依赖性操作序列(诸如批量数据集体)的进度。NIC 202可以支持应用编程接口(API)(例如,libfabric API),以促进由图1的交换机结构100向在主机116上运行的应用程序提供结构通信服务。NIC 202还可以支持低级别网络编程接口,诸如Portals API。另外,NIC 202可以提供高效的以太网包处理,所述以太网包处理在NIC 202为发送方时可以包括有效发射,在NIC 202为目标时可以包括流操纵,以及校验和计算。此外,NIC 202可以支持虚拟化(例如,使用容器或虚拟机)。

图2B示出了NIC的示例性架构。在NIC 202中,HNI 220的端口宏可以促进低级别以太网操作,诸如物理编码子层(PCS)和媒体访问控制(MAC)。另外,NIC 202可以提供对链路层重试(LLR)的支持。传入包可以由解析器228解析并存储在缓冲区229中。缓冲区229可以是PFC缓冲区,所述PFC缓冲区被供应用于缓冲阈值量(例如,一微秒)的延迟带宽。HNI 220还可以包括分别用于管理传出包和传入包的控制发射单元224和控制接收单元226。

NIC 202可以包括命令队列(CQ)单元230。CQ单元230可以负责获取并发出主机端命令。CQ单元230可以包括命令队列232和调度器234。命令队列232可以包括分别用于启动器命令(PUT、GET等)和目标命令(Append、Search等)的两组独立的队列。命令队列232可以被实施为在NIC 202的存储器中维持的循环缓冲区。在主机上运行的应用程序可以直接写入命令队列232。调度器234可以包括分别用于启动器命令和目标命令的两个单独的调度器。启动器命令基于散列函数被分类到流队列236中。流队列236之一可以分配到唯一的流。此外,CQ单元230可以进一步包括触发操作模块238,所述触发操作模块负责对触发命令进行排队和分派。

出站传输引擎(OXE)240可以从流队列236中拉取命令,以对其进行处理以供分派。OXE 240可以包括地址转换请求单元(ATRU)244,所述地址转换请求单元可以将地址转换请求发送到地址转换单元(ATU)212。ATU 212可以代表不同的引擎提供虚拟到物理地址的转换,所述不同的引擎诸如OXE 240、入站传输引擎(IXE)250和事件引擎(EE)216。ATU 212可以维持较大的转换缓存214。ATU 212既可以自己执行转换,也可以使用基于主机的地址转换服务(ATS)执行转换。OXE 240还可以包括消息切分单元(MCU)246,所述消息切分单元可以将大的消息分割为与最大发射单元(MTU)相对应的大小的包。MCU 246可以包括多个MCU模块。当MCU模块可用时,MCU模块可以从指派的流队列中获得下一个命令。接收到的数据可以写入数据缓冲区242中。然后,MCU模块可以将包报头、对应的流量分类和包大小发送到流量整形器248。整形器248可以确定由MCU 246提出的哪些请求可以进入网络。

随后,可以将所选择的包发送到包和连接跟踪(PCT)270。PCT 270可以将包存储在队列274中。PCT 270还可以维持出站命令的状态信息,并在返回响应时更新状态信息。PCT270还可以维持包状态信息(例如,允许将响应与请求匹配)、消息状态信息(例如,跟踪多包消息的进度)、启动器完成状态信息、以及重试状态信息(例如,维持在请求或响应丢失时对命令进行重试所需的信息)。如果在阈值时间内未返回响应,则可以将对应的命令存储在重试缓冲区272中。PCT 270可以促进分别基于源表276和目标表278对启动器命令和目标命令进行连接管理。例如,PCT 270可以更新其源表276,以跟踪可靠地传送包和消息完成通知所需的状态。PCT 270可以将传出包转发到HNI 220,所述HNI将包存储在出站队列222中。

NIC 202还可以包括IXE 250,所述IXE在NIC 202为目标或目的地时提供包处理。IXE 250可以从HNI 220获得传入包。解析器256可以解析传入包并将对应的包信息传递到列表处理引擎(LPE)264或消息状态表(MST)266以进行匹配。LPE 264可以将传入消息与缓冲区进行匹配。LPE 264可以确定每个消息要使用的缓冲区和起始地址。LPE 264还可以管理用于表示缓冲区的列表条目池262、以及意外消息。MST 266可以存储匹配结果和生成目标端完成事件所需的信息。MST 266可以由不受限制的操作使用,包括多包PUT命令以及单包和多包GET命令。

随后,解析器256可以将包存储在包缓冲区254中。IXE 250可以获得匹配结果以进行冲突检查。然后,DMA写入和AMO模块252可以向存储器发出由写入和AMO操作生成的更新。如果包包括生成目标端存储器读操作的命令(例如,GET响应),则可以将所述包传递到OXE240。NIC 202还可以包括EE 216,所述EE可以从NIC 202中的其他模块或单元接收生成事件通知的请求。事件通知可以指定生成填充事件或计数事件。EE 216可以管理位于主机处理器存储器内的事件队列,其将完整事件写入所述主机处理器存储器。EE 216可以将计数事件转发到CQ单元230。

NIC中的动态操作管理

图3A示出了用于NIC中的非幂等操作的示例性动态管理过程。在该示例中,设备302和304可以经由交换机结构310彼此耦接。设备302和304可以分别配备有NIC 320和330。HNI 322和332可以分别将NIC 320和330耦接到交换机结构310。在操作期间,在设备302上运行的应用程序304可以发出对设备304的存储器位置进行数据操作342(例如,RDMA操作)的请求312。由于设备302是源,并且设备304是请求312的目标,因此设备302和304可以分别被称为请求312的源设备和目标设备。

NIC 330可以接收请求312,促进操作342的执行,并且发送带有操作342的执行输出结果的响应314。输出结果的示例可以包括但不限于:根据与操作342相关联的计算而生成的一个或多个值;指示操作342执行成功或不成功的指示符;与操作342相关联的存储器位置或索引;以及指示基于对数据结构执行操作342的数据结构状态的信息。

假设操作342是幂等操作。由于请求312可以从NIC 320发出并跨交换机结构310传输到NIC 330,因此操作342是基于NIC 320与330之间的请求-响应通信协议来执行的。PCT324和334可以分别促进对NIC 320和330的包进行跟踪,以支持通信协议。在这种情况下,如果设备320发出请求312但没有接收到响应314,则请求312或响应314可能丢失(例如,由于交换机结构310中发生包丢失)。这种丢失可能导致PCT 324确定操作尚未执行。因此,为了执行操作,PCT 324可以重新发出请求312。

NIC 320可能无法区分丢失的是请求312还是响应314。因此,NIC 320可能无法确定操作342是否已经由NIC 330执行。所以,即使NIC 330已经执行了操作342,NIC 320也可以重新发出对操作342的请求312。因此,在接收到重新发出的请求312后,设备304的软件可以重放操作342。然而,这种基于软件的执行会占用设备304的大量资源,诸如计算资源和内部带宽。此外,跟踪操作342的完成所产生的计算开销可能高于操作342的计算负荷。因此,跟踪操作342的状态可能效率低下。

为了解决这一问题,NIC 320可以生成指示符,所述指示符指示操作342是否是幂等操作。然后,NIC 320可以将请求312包括在包中,并经由交换机结构310将所述包发送到NIC 330。NIC 320可以将指示符包括在请求314或包中。在接收到请求312后,NIC 330可以基于指示符来确定操作342是幂等操作。然后,NIC 330可以执行操作342而无需确定操作是否是重复操作,并生成输出结果344。然后,NIC 330可以将输出结果344包括在响应314中,将响应314包括在包中,并将响应发送到NIC 320。这使得NIC 330避免跟踪操作342的状态。

图3B示出了用于NIC中的多包幂等操作的示例性动态管理过程。如果对幂等操作的请求350与大量存储器位置相关联,则请求350可以生成一组操作。这些操作中的每一个都可以对应于请求350的幂等操作。相应地,NIC 320可以生成与请求350相关联的多个包,诸如包352和352,每个包用于这组操作中的一个操作。然后,NIC 320可以将各个包352和354发送到NIC 330。这里,请求350可以被称为多包请求(例如,引起存储器读操作的多包GET请求)。此外,PCT 324可以将包352和354存储在PCT 324中的重试缓冲区326中。如果NIC320在超时间隔内没有接收到对包(诸如包354)的响应,则NIC 320可以从重试缓冲区326获得包354并将包354重新发送到NIC 330。PCT 324可以在接收到对应的响应包时从重试缓冲区中移除包。

对于包352和354中的每一个,NIC 330都可以执行操作而无需确定操作是否是重复操作,并生成操作的输出结果(或结果)。NIC 330可以基于经由NIC 330的HI对设备304的存储器进行存储器访问来执行操作。然后,NIC 330可以分别将相应的输出结果包括在响应包382和384中。随后,NIC 330将响应包382和384发送回NIC 320。由于操作是幂等操作并以每个包可以表示与请求350相关联的单包幂等操作的方式分布在包352和354中,因此NIC330可能不会存储与每个单独包相关联的操作的输出结果。

图4A示出了用于源NIC中的幂等操作的动态管理过程的流程图。在操作期间,NIC可以接收对幂等操作的请求(例如,来自NIC的流队列或重试缓冲区)(操作402),并检查所述请求是否是多包请求(操作404)。如果所述请求不是多包请求,则NIC可以生成带有操作请求的包(操作412),并将所述包发送到目标NIC(操作414)。另一方面,如果所述请求是多包请求,则NIC可以生成对应于幂等操作的一组操作(操作406)。然后,NIC可以生成带有对这组操作中的各个操作的请求的一组包(操作408)。然后,NIC可以将这组包发送到目标NIC(操作410)。

图4B示出了用于目标NIC中的幂等操作的动态管理过程的流程图。在操作期间,NIC可以从自远程NIC接收的包获得对幂等操作的请求(操作452),并执行所述操作以获得输出结果,而无需检查是否是重复操作(即,无需检查操作是否是从远程NIC重新发出的)(操作454)。随后,NIC可以将输出结果包括在包中并将所述包转发到远程NIC(操作456)。

示例性计算机系统

图5示出了配备有促进对非幂等操作进行动态管理的NIC的示例性计算机系统。计算机系统550包括处理器552、存储器设备554和存储设备556。存储器设备554可以包括易失性存储器设备(例如,双列直插式存储器模块(DIMM))。此外,计算机系统550可以耦接到键盘562、指向设备564和显示设备566。存储设备556可以存储操作系统570。应用程序572可以在操作系统570上操作。

计算机系统550可以配备有使促进高效数据请求管理的NIC 520耦接的主机接口。NIC 520可以向计算机系统550提供一个或多个HNI。NIC 520可以经由HNI之一耦接到交换机502。NIC 520可以包括操作管理逻辑块530(例如,在图3A和图3B中的PCT 324或334中)。如果NIC 520作为源NIC进行操作,则操作管理逻辑块530可以包括请求逻辑块532,所述请求逻辑块针对单包请求和多包请求生成包,每个包具有对应的操作。请求逻辑块532可以将包存储在重试缓冲区中。

如果NIC 520作为目标NIC进行操作,则操作管理逻辑块530可以包括执行逻辑块534和存储逻辑块536。执行逻辑块534可以基于来自源NIC的请求来执行幂等操作,而无需检查对应操作是否是重复操作。在生成输出结果后,响应逻辑块536可以将输出结果包括在包中并将所述包转发到源NIC。

总之,本公开描述了一种促进对幂等操作进行高效管理的NIC。所述NIC可以配备有网络接口和操作管理逻辑块。在操作期间,所述网络接口可以接收来自远程设备的操作请求。所述操作管理逻辑块可以确定所述请求是否是针对幂等操作。如果所述请求是针对幂等操作,则所述操作管理逻辑块可以执行所述操作以生成输出结果并生成包括所述输出结果的响应来对所述请求作出响应。

上述方法和过程可以由硬件逻辑块、模块、或装置来执行。硬件逻辑块、模块、逻辑块或装置可以包括但不限于专用集成电路(ASIC)芯片、现场可编程门阵列(FPGA)、在特定时间执行代码的专用或共享处理器、以及现在已知或以后开发的其他可编程逻辑设备。硬件逻辑块、模块或装置在被激活时执行其内包括的方法和过程。

本文描述的方法和过程也可以体现为代码或数据,该代码或数据可以存储在存储设备或计算机可读存储介质中。当处理器读取并执行所存储的代码或数据时,处理器可以执行这些方法和过程。

本发明的实施例的前述描述是仅出于说明和描述的目的而呈现的。所述描述并非旨在是穷举的或将本发明限制为所公开的形式。相应地,本领域技术人员将了解许多的修改和变化。另外,以上公开内容并非旨在限制本发明。本发明的范围由所附权利要求限定。

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于在网络中执行即时归约的系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!