CN110011933B - 发送数据包的方法、装置及计算机可读存储介质 - Google Patents
发送数据包的方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110011933B CN110011933B CN201810010977.XA CN201810010977A CN110011933B CN 110011933 B CN110011933 B CN 110011933B CN 201810010977 A CN201810010977 A CN 201810010977A CN 110011933 B CN110011933 B CN 110011933B
- Authority
- CN
- China
- Prior art keywords
- packet
- data
- virtual address
- transport layer
- buffer
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/901—Buffering arrangements using storage descriptor, e.g. read or write pointers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L49/00—Packet switching elements
- H04L49/90—Buffering arrangements
- H04L49/9063—Intermediate storage in different physical parts of a node or terminal
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
本申请提供了一种发送数据包的方法、装置及计算机可读存储介质,包括:获取待发送的第一用户数据在用户内存中的虚拟地址;将第一数据包的传输层首部写入在传输层的缓冲区,第一数据包包括第一用户数据;将第一数据包的虚拟地址转换成物理地址,第一数据包的虚拟地址包括第一用户数据在用户内存中的虚拟地址及第一数据包的传输层首部在缓冲区中的虚拟地址;根据转换后的物理地址,通过网卡发送第一数据包。本申请提供的技术方案中,第一数据包的虚拟地址包含内存的两个不同存储区域中的虚拟地址,即第一数据包是跨内存区域构建和组织的,这样无需进行用户数据的拷贝,从而能够减少数据包发送过程对CPU资源的占用。
Description
技术领域
本申请涉及计算机存储领域,并且更具体地,涉及一种发送数据包的方法、装置及计算机可读存储介质。
背景技术
通常,通信设备在发送数据包的过程中,需要不断地对数据包进行封装。数据包在封装的过程中,需要对数据进行多次的拷贝。
以网络附加存储(network-attached storage,NAS)为例,网络存储设备在存储侧发送数据包至少需要经过缓冲存储(cache)区到存储协议层缓冲区、存储协议层缓冲区到传输控制协议/因特网互联协议(transmission control protocol/internet protocol,TCP/IP)协议栈缓冲区之间的多次数据拷贝。
数据在拷贝过程中,会占用较多的中央处理器(central processing unit,CPU)资源,影响CPU的性能。
发明内容
本申请提供一种发送数据包的方法、装置及计算机可读存储介质,能够减少数据包发送过程对CPU资源的占用。
第一方面,提供了一种发送数据包的方法,包括:获取待发送的第一用户数据在用户内存中的虚拟地址;将第一数据包的传输层首部写入在传输层的缓冲区,该第一数据包包括该第一用户数据;将该第一数据包的虚拟地址转换成物理地址,其中,该第一数据包的虚拟地址包括该第一用户数据在用户内存中的虚拟地址,以及该第一数据包的传输层首部在该缓冲区中的虚拟地址;根据该转换后的物理地址,通过网卡发送该第一数据包。
传统方案中,用户数据需要拷贝至传输层的缓冲区,并在传输层的缓冲区为用户数据添加传输层首部,以形成数据包。本申请提供的技术方案中,第一数据包的虚拟地址包含内存的两个不同存储区域中的虚拟地址:用户内存中的虚拟地址和传输层的缓冲区中的虚拟地址,即第一数据包是跨内存区域构建和组织的,这样无需进行用户数据的拷贝,从而能够减少数据包发送过程对CPU资源的占用。
在一种可能的实现方式中,该用户内存是预先分配的共享内存的一部分,该传输层的缓冲区是该预先分配的共享内存的一部分,将该第一数据包的虚拟地址转换成物理地址,包括:根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,将该第一数据包的虚拟地址转换成物理地址。
用户内存和传输层的缓冲区均使用预先分配的共享内存,也就是说,第一用户数据和第一数据包的传输层首部的虚拟地址均位于共享内存中。在进行地址转换时,根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,可将第一数据包的虚拟地址转换成物理地址。该方案能够在多个进程之间操作访问,能够快速地实现地址转换。
在一种可能的实现方式中,该方法还包括:获取待发送的第二用户数据;将第二数据包的传输层首部写入在传输层的缓冲区,该第二数据包包括该第二用户数据;将该第二数据包的虚拟地址转换成物理地址,其中,该第二数据包的虚拟地址包括该第二用户数据在该缓冲区中的虚拟地址,以及该第二数据包的传输层首部在该缓冲区中的虚拟地址;根据该转换后的物理地址,通过网卡发送该第二数据包。
上述技术方案中,第二数据包的传输层首部和用户数据的虚拟地址均为传输层缓冲区中的虚拟地址,表示第二数据包的用户数据从传输层的上层拷贝至了传输层的缓冲区,第二数据包的封装和组织是在传输层的缓冲区中进行的。基于上述实现方式,本申请提供的技术方案不但支持基于免拷贝的数据包发送方式,也支持基于拷贝的数据包发送方式,从而具有较好的兼容性。
在一种可能的实现方式中,该传输层的缓冲区存储有该第一数据包对应的第一结构体,第二结构体和第三结构体,该第一数据包对应的第一结构体用于记录该第一数据包的长度,以及在传输层的缓冲区中的该第一数据包的下一数据包对应的第一结构体的指针,该第一数据包对应的第二结构体用于记录该第一数据包的虚拟地址,该第一数据包对应的第三结构体用于记录该第一数据包的物理地址。
第一结构体负责在传输层组织内存,第二结构体负责管理缓冲区中数据包的虚拟地址,第三结构体用于与网卡进行交互,负责管理缓冲区中数据包的物理地址。通过上述结构体可以对缓冲区中数据包的存储位置信息,以及缓冲区与网卡之间需要交互的信息进行有效地组织和管理。
在一种可能的实现方式中,该方法由存储服务器执行,该第一用户数据为该存储服务器的客户端所请求的数据。
在一种可能的实现方式中,该传输层采用的协议为传输控制协议/因特网互联协议TCP/IP或用户数据报协议UDP。
第二方面,提供了一种发送数据包的装置,包括用于执行上述第一方面或第一方面中任一种可能实现方式中的发送数据包的方法的模块。
第三方面,提供了一种发送数据包的装置,该装置包括:存储器,用于存储程序;处理器,用于执行程序,当该程序被执行时,该处理器用于执行上述第一方面以及第一方面的各实现方式中的相应的功能。
第四方面,提供了一种存储系统,该存储系统包括:存储器,用于存储程序;控制器,该控制器如第二方面中的发送数据包的装置,用于执行该存储器中的程序。
第五方面,提供了一种计算机可读存储介质,该计算机可读存储介质用于储存计算机软件指令,其包含用于执行上述第一方面的方法所设计的程序。
第六方面,提供了一种计算机程序产品,该计算机程序产品包括:计算机程序代码,当该计算机程序代码在计算机上运行时,使得计算机执行上述第一方面或第一方面中任一种可能实现方式中的方法。
附图说明
图1是本申请实施例的NAS存储服务器的组网的实现方式。
图2是传统的发送数据包的方法的示意图。
图3是本申请实施例提供的一种发送数据包的方法的示意性流程图。
图4是本申请实施例的共享内存管理方式的示意图。
图5是本申请实施例的一种发送数据包的方法的示意图。
图6是本申请实施例的TCP/IP协议栈的免拷贝的发送流程图。
图7是本申请实施例的一种内存管理方式的示意图。
图8是本申请实施例的数据结构的具体实现方式的示意图。
图9是本申请实施例的免拷贝场景下的单个报文的内存组织形式的示意图。
图10是本申请实施例的TCP/IP协议栈缓冲区的组织方式的示意图。
图11是本申请实施例的拷贝场景下单个报文的内存组织形式的示意图。
图12是本申请实施例的免拷贝接口的实现方式的示意图。
图13是本申请实施例的一种报文的发送流程的示意图。
图14根据本申请实施例提供的发送数据包的方法的示意性流程图。
图15是本申请实施例提供的一种发送数据包的装置的示意性框图。
具体实施方式
本发明实施例提供的发送数据包的方法可应用于需要利用数据包进行通信的任意计算机设备。作为一个示例,本发明实施例提供的发送数据包的方法可应用于网络中的存储服务器,如基于NAS的存储服务器。下面结合图1,以NAS场景为例进行说明。
图1是本发明实施例的NAS存储服务器的组网的实现方式。NAS是指连接到计算机网络的文件级别计算机数据存储,可以通过TCP/IP网络为不同类型客户端提供数据存取。NAS通常在一个局域网(local area network,LAN)上占有自己的节点,无需应用服务器的干预,允许用户在网络上存取数据。在这种配置中,NAS集中管理和处理网络上的所有数据,将负载从应用或企业服务器上卸载下来,有效降低总拥有成本。
存储服务器经常需要接收客户端发送的读输入输出(input/output;IO)请求,向客户端发送相应的数据包。存储服务器在向客户端发送数据包的过程中,需要通过存储协议层、传输层等对数据包进行封装,最后网卡根据数据包的物理地址以直接内存存取(direct memory access,DMA)的方式发送数据包。
下面结合图2,以存储服务器为例,对传统的发送数据包的方式进行详细描述。
图2中的存储器主要用来存储程序和各种数据,该存储器可以为硬盘、磁盘等。在本发明实施例中,当用户内存未存储客户端所请求的数据时,CPU可以从存储器读取数据,并将数据缓存到缓存组件(即cache组件)中。
Cache组件是用户内存中的一部分内存,可以用来缓存用户数据。在存储服务器中,用户内存还可以包括存储协议层缓冲区,存储协议层缓冲区用来缓存从cache缓冲层传递下来的数据。
传输层能够实现端到端的传输,传输层所采用的协议可以为TCP/IP或用户数据报协议(user datagram protocol,UDP)。传输层缓冲区为内存空间中的一部分内存,当有数据需要缓存时,CPU向内存控制器申请一部分内存,该部分内存可以用来缓存上层传递下来的数据。
存储协议能够对标准存储协议规范处理,为不同存储协议客户端提供存储服务接入能力。存储协议根据存储服务器中协议类型的不同而不同,存储协议例如可以为NAS协议、网络文件系统(network file system,NFS)协议、服务器报文块(server messageblock,SMB)协议、互联网小型计算机系统接口(internet small computer systeminterface,ISCSI)协议、文件传输协议(file transfer protocol,FTP)、超文本传输协议(hypertext transfer protocol,HTTP)协议等,本发明实施例对此不做具体限定。
网卡可以接收上层传递下来的数据包的物理地址,并根据该物理地址,以DMA的方式将数据包发送到网络。
存储服务器在接收到客户端发送的读IO请求后,向客户端发送数据包大致需要经过如下几个过程:
1)从存储器读取数据并缓存到cache组件缓冲区中。
2)cache组件将缓冲区中的数据拷贝到存储协议层缓冲区。
3)存储协议层对数据封装后将数据拷贝到传输层缓冲区。
4)传输层对数据封装后将数据放到网卡,由网卡以DMA方式发送给客户端。
传统的发送数据包的方式需要对数据进行多次的拷贝,如cache缓冲区到存储协议层缓冲区、存储协议层缓冲区到传输层缓冲区之间的拷贝。这种发送数据包的方式需要占用较多的CPU资源,影响CPU的性能。
上文仅是以NAS场景为例对传统的发送数据包的过程进行说明,本发明实施例并不限于此。本发明实施例还可应用于其他的场景,如普通的发送数据包的通信场景。在这种场景下,可以不设置存储协议层,应用层直接将数据包发送给传输层。
为了减少在发送数据包的过程中对CPU资源的占用,本发明实施例提供一种发送数据包的方法,能够以免拷贝的方式发送数据包,降低CPU的资源消耗。
本发明实施例的发送数据包的方法的执行主体可以是计算机设备,例如可以是计算机设备中的CPU,或者是计算机设备中能够调用程序并执行程序的功能模块。
本发明实施例提及的以传输层作为执行主体是指:计算机中的CPU调用传输层协议的程序代码来执行相应的功能。本发明实施例提及的以应用层作为执行主体是指:计算机中的CPU调用应用层的程序代码来执行相应的功能。为方便描述,下文均使用传输层和应用层作为执行主体来进行描述。
图3是本发明实施例提供的一种发送数据包的方法的示意性流程图。图3的方法可以包括步骤310-340,下面分别对步骤310-340进行详细描述。
在步骤310中,获取待发送的第一用户数据在用户内存中的虚拟地址。
在本发明实施例中,第一用户数据可以为第二用户设备向第一用户设备所请求的数据,该第一用户数据位于第一用户设备的用户内存中。
本发明实施例对获取第一用户数据的虚拟地址的方式不做具体限定。例如,可以由存储协议层将第一用户数据的虚拟地址发送给传输层,或者,也可以是由应用层将第一用户数据的虚拟地址发送给传输层。也就是说,第一用户数据在用户内存中的虚拟地址,可以指第一用户数据在应用层中的虚拟地址,或者,也可以指第一用户数据在存储协议层中的虚拟地址。
该传输层所采用的协议可以为TCP/IP或UDP。本发明实施例对此不做具体限定。
在步骤320中,将第一数据包的传输层首部写入在传输层的缓冲区,该第一数据包包括第一用户数据。
本发明实施例中,第一数据包为传输第一用户数据的数据包。在传输层的缓冲区中,为第一用户数据封装传输层首部,以形成第一数据包。传输层的首部存储有源端、目的端的端口号及源端IP地址、目的端IP地址,用于寻找发送端和接收端的应用进程。
在步骤330中,将第一数据包的虚拟地址转换成物理地址,其中,第一数据包的虚拟地址包括第一用户数据在用户内存中的虚拟地址,以及第一数据包的传输层首部在缓冲区中的虚拟地址。
在步骤340中,根据转换后的物理地址,通过网卡发送第一数据包。
在本发明实施例中,传输层将转换后的物理地址发送给网卡,网卡根据该转换后的物理地址,以DMA的方式将该第一数据包发送到网络。
传统方案中,用户数据需要拷贝至传输层的缓冲区,并在传输层的缓冲区为用户数据添加传输层首部,以形成数据包。本发明实施例提供的技术方案中,第一数据包的虚拟地址包含内存的两个不同存储区域中的虚拟地址:用户内存中的虚拟地址和传输层的缓冲区中的虚拟地址,即第一数据包是跨内存区域构建和组织的,这样无需进行用户数据的拷贝,从而能够减少数据包发送过程对CPU资源的占用。
本发明实施例对获取第一用户数据的虚拟地址,及虚拟地址到物理地址的映射方式不做具体限定。例如,可以采用共享内存的方式,通过共享内存控制器对地址进行转换。下面结合图4,对共享内存控制器进行具体描述。
本发明实施例的用户内存和传输层的缓冲区可以均使用预先分配的共享内存。共享内存控制器对共享内存进行管理,可以保证内存在系统内部各个组件之间可操作访问。例如:cache组件可以通过共享内存控制器申请共享内存,TCP/IP协议栈可以通过共享内存控制器实现虚拟地址到物理地址的转换。通过共享内存控制器转换后的物理地址能被网卡直接DMA处理,而不需要进行拷贝操作。
操作系统对系统物理内存进行管理,当业务面有存储数据的需求时,共享内存控制器从操作系统管理的物理内存中分配出一部分内存作为共享内存。将共享内存按照存储业务的布局做二次管理,实现虚拟地址映射、内存池管理、缓存管理等基本内存管理功能,提供给业务面使用。业务面处理完数据之后,可以通过共享内存控制器将内存释放回操作系统。共享内存提供的映射方式可快速实现虚拟地址到物理地址的映射,实现网卡可直接基于转换后的物理地址访问共享内存数据进行DMA而不需要拷贝。
下面结合图5,在共享内存管理方式下,对本发明实施例的发送数据包的方式进行详细描述。
步骤310包括,获取待发送的第一用户数据在共享内存中的虚拟地址。
本发明实施例对获得第一用户数据在共享内存中的虚拟地址的方式不做具体限定。作为一个示例,传输层可接收从存储协议层传递下来的第一用户数据在共享内存中的虚拟地址。作为另一个示例,传输层可接收从应用层传递下来的第一用户数据在共享内存中的虚拟地址。
步骤320包括,将第一数据包的传输层首部写入在传输层的缓冲区,该述第一数据包包括第一用户数据,其中,该传输层的缓冲区位于共享内存中。
步骤330包括,根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,将该第一数据包的虚拟地址转换成物理地址。
本发明实施例中的共享内存控制器可以实现共享内存虚拟地址与物理地址之间的映射,并对地址映射关系进行管理。传输层将第一数据包的虚拟地址发送给共享内存控制器,共享内存控制器根据地址映射关系,将第一数据包的虚拟地址转换成物理地址。其中,第一数据包的虚拟地址包括第一用户数据和所述第一数据包的传输层首部在共享内存中的虚拟地址。
步骤340包括:将第一数据包的物理地址发送给网卡,以指示网卡发送第一数据包。
本发明实施例中,传输层将转换后的物理地址发送给网卡,网卡根据该转换后的物理地址,以DMA的方式将该第一数据包发送到网络。
根据本发明实施例提供的发送数据包的方法,用户内存和传输层的缓冲区均使用预先分配的共享内存,也就是说,第一用户数据和第一数据包的传输层首部的虚拟地址均位于共享内存中。在进行地址转换时,根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,可将第一数据包的虚拟地址转换成物理地址。该方案能够在多个进程之间操作访问,能够快速地实现地址转换。
传统的发送数据包的方式至少需要经过存储协议层到传输层之间的数据拷贝。与传统方式不同,本发明实施例采用自研的传输层协议配合共享内存控制器,实现发送方向的全流程免拷贝。
如图6所示,本发明实施例采用自研的传输层的私有免拷贝接口,将用户数据输入给传输层。传输层通过内存映射方法将内存组织起来,缓存在传输层缓冲区。传输层发送流程直接使用缓冲区中的内存进行发送处理,将内存地址发送给网卡驱动,网卡驱动通过DMA技术将该内存对应的数据包发送到网络中。
传输层提供完整的传输层协议功能,支持免拷贝的高性能套接字socket接口,供存储协议以高效的方式发送数据到网络,减少发送数据包过程对CPU的占用。
本发明实施例提供的技术方案还可以对数据进行拷贝处理。
在拷贝场景下,获取待发送的第二用户数据;将第二数据包的传输层首部写入在传输层的缓冲区,第二数据包包括第二用户数据;将第二数据包的虚拟地址转换成物理地址,其中,第二数据包的虚拟地址包括第二用户数据在缓冲区中的虚拟地址,以及第二数据包的传输层首部在缓冲区中的虚拟地址;根据转换后的物理地址,通过网卡发送第二数据包。
上述技术方案中,第二数据包的传输层首部和用户数据的虚拟地址均为传输层缓冲区中的虚拟地址,表示第二数据包的用户数据从传输层的上层拷贝至了传输层的缓冲区,第二数据包的封装和组织是在传输层的缓冲区中进行的。基于上述实现方式,本发明实施例提供的技术方案不但支持基于免拷贝的数据包发送方式,也支持基于拷贝的数据包发送方式,从而具有较好的兼容性。
同样地,在拷贝场景下,第二用户数据所在的用户内存和传输层缓冲区均可以位于共享内存中。共享内存控制器根据第二数据包在共享内存中的虚拟地址,将第二数据包的虚拟地址转换成物理地址。
本发明实施例对传输层管理第一数据包的地址信息的方式不作具体限定,可以由一个或多个结构体来记录第一数据包的地址信息。
作为一个示例,可以由第一数据包对应的第一结构体,第二结构体和第三结构体来记录第一数据包的地址信息。其中,第一数据包对应的第一结构体用于记录第一数据包的长度,以及在传输层的缓冲区中的第一数据包的下一数据包对应的第一结构体的指针,第一数据包对应的第二结构体用于记录第一数据包在用户内存中的虚拟地址,第一数据包对应的第三结构体用于记录第一数据包的物理地址。
第一结构体负责在传输层组织内存,第二结构体负责管理缓冲区中数据包的虚拟地址,第三结构体用于与网卡进行交互,负责管理缓冲区中数据包的物理地址。通过上述结构体可以对缓冲区中数据包的存储位置信息,以及缓冲区与网卡之间需要交互的信息进行有效地组织和管理。
作为一个示例,该第一结构体可以为内存管理单元,第二结构体可以为数据区描述符,第三结构体可以为报文缓冲区。其中,内存管理单元例如可以为MBUF,数据区描述符例如可以为DBD,报文缓冲区例如可以为PBUF。
上文以第一结构体、第二结构体、第三结构体为例对内存的组织方式进行举例说明。本发明实施例并不限于此,例如可以对第一结构体、第二结构体、第三结构体进行合并,合并为一个或两个结构体进行组织内存。
下面结合图7、图8,对内存的组织方式进行具体描述。为支持免拷贝处理,传输层缓冲区基于报文缓存,拷贝/免拷贝接口内的均以报文为单位进行组织内存,并放入发送缓冲区中。在发送过程中,正常场景下直接使用发送缓冲区中的缓存内存进行发送。
本实施例中,传输层使用基于池化的内存管理,预先在共享内存划分出一块内存作为内存池,传输层在使用时直接从内存池中分配内存。下面以内存管理单元、数据区描述符、报文缓冲区为例进行说明。传输层每次从内存池申请的内存均为固定长度,每片内存由四部分构成。如图7所示。关键数据结构由报文缓冲区、内存管理单元、数据区描述符和数据负载四部分构成。
图8是本发明实施例提供的各结构体的具体实现方式的示意图,下面对各结构体的功能进行描述。
报文缓冲区:主要负责和网卡驱动交互。报文缓冲区本身可以构成一个单向链表,一个报文缓冲区链表代表一个报文。报文缓冲区记录报文的虚拟地址和物理地址。
共享内存控制器将报文的虚拟地址转换为物理地址后发送给传输层,传输层将报文的物理地址记录在报文缓冲区中。在发送阶段,传输层通过报文缓冲区与网卡驱动进行交互,以指示网卡根据该报文的物理地址,以DMA的方式将该报文发送到网络。
内存管理单元:负责TCP/IP协议栈内的内存组织,一个内存管理单元对应一个报文。内存管理单元记录报文的总长度。
数据区描述符:负责维护数据负载的虚拟地址,长度。数据区描述符可以组成数据区描述符链后,由内存管理单元总体维护。数据区描述符可以用于记录用户数据的虚拟地址及长度。
传输层获得用户数据的虚拟地址后,将用户数据的虚拟地址记录在数据区描述符中。
数据负载:在使用拷贝接口时,将用户数据拷贝到该内存空间。
下面结合图9、图10,以上述结构体为例,对本发明实施例提供的发送数据包的方式进行详细描述。
图9是本发明实施例的免拷贝场景下的单个报文的内存组织形式。传输层接收存储协议传递下来的用户数据的虚拟地址后,将用户数据的虚拟地址记录在数据区描述符中。由于存储协议传递下来的内存中不会预留传输层首部的内存空间。因此,传输层会为单个报文新分配一个数据区描述符用于管理传输层首部。也即是说,传输层在生成报文的传输层首部后,将传输层首部的虚拟地址记录在新分配的数据区描述符中,其他数据区描述符用于记录存储协议下发的用户数据的虚拟地址及长度。
如图9所示,以一个报文包括两个用户数据和一个传输层首部为例进行说明。数据区描述符1用于记录传输层首部的虚拟地址,数据负载为传输层生成的传输层首部。数据区描述符2、数据区描述符3用于记录用户数据在内存中的存储位置的指针信息,该指针信息指向用户数据在用户内存中的虚拟地址。数据区描述符1、数据区描述符2、数据区描述符3组成数据区描述符链表后,由内存管理单元统一管理。
传输层有多个待发送报文时,可以采用多个内存管理单元进行管理。每个内存管理单元对应一个报文,多个内存管理单元通过链表链接在一起。如图10所示,该链表可以为双向链表,也可以为单向链表。
本发明实施例的内存组织方式也同样适用于拷贝数据的场景。如图11所示,图11是本发明实施例的拷贝场景下单个报文的内存组织形式。
传输层接收到用户数据后,将用户数据缓冲在传输层缓冲区的数据负载2的位置,由数据区描述符2来记录用户数据的虚拟地址。在为用户数据生成传输层首部后,会新分配一个数据区描述符1来记录传输层首部的虚拟地址,数据负载1的位置记录传输层的首部信息。一个报文也可以由数据区描述符链表构成,由一个内存管理单元统一管理。每个报文的负载长度小于等于该套接字的分片长度,该分片长度取决于套接字的协商的长度和硬件分片的长度的最大值。
本发明实施例以数据结构为内存片的形式进行举例说明,但本发明实施例并不限于此。实际上,各结构体所占用的内存也可以为一段不连续的内存,只要能够记录报文的虚拟地址和物理地址,将内存进行组织即可。
传输层除了需要进行组织内存外,还需要具有支持免拷贝的socket接口。下面结合图12,对免拷贝接口的实现方式进行详细描述。
图12是本发明实施例的免拷贝接口的实现方式。socket免拷贝接口和拷贝接口的输入输出保持一致,内部实现按照上述内存组织形式组织内存。
本发明实施例的免拷贝接口可以对应标准的写入(writev)函数。用户输入输入输出向量(input/output vector,IOV)数组后,传输层按照TCP分片长度对IOV数组进行切分。如图12所示,将IOV数组切分为2个报文,数据区描述符1、数据区描述符2、数据区描述符3组成第一个报文,数据区描述符4、数据区描述符5组成第二个报文。其中,数据区描述符1和数据区描述符4分别用来记录第一个报文和第二个报文的传输层首部的虚拟地址信息。
数据区描述符1、数据区描述符2、数据区描述符3组成链表后,由内存管理单元1进行管理。数据区描述符4、数据区描述符5组成链表后,由内存管理单元2进行管理。内存管理单元1和内存管理单元2通过链表链在一起,组成传输层发送缓冲区的缓冲队列。
传输层在发送报文的过程中,记录待发送的报文指针,该报文指针指向发送缓冲区中的一个内存管理单元,具体实现方式如图13所示。
图13是本发明实施例的一种报文的发送流程示意图。
步骤1:待发送报文指针指向传输层缓冲区中的第一个报文。
步骤2:获取待发送报文指向的内存管理单元,完成报文首部填充。
步骤3:按照上文描述的内存组织方法,如果是以拷贝的方式发送数据时,进行内存管理单元到报文缓冲区的转换;如果是以免拷贝的方式发送数据时,将数据包的虚拟地址转换后的物理地址记录到报文缓冲区中。
步骤4:待发送报文指针移动到下一个内存管理单元。
步骤5:重复上述步骤。
本发明实施例以内存管理单元、报文缓冲区、数据区描述符数据区描述符体为例进行说明,但本发明实施例并不限于此。例如,报文缓冲区体可以为其他能够与驱动进行交互的结构体,内存管理单元也可以为其他传输层能够支持的结构体。
下面结合具体例子,更加详细地描述本发明实施例。应注意,图14的例子仅仅是为了帮助本领域技术人员理解本发明实施例,而非要将本发明实施例限于所示例的具体场景。
以存储服务器场景为例,存储服务器通常会接收不同的客户端发送的读IO请求,然后根据该读IO请求,向客户端发送所请求的数据。
图14是在该场景下的发送数据包的方法的示意性流程图。
1)客户端通过传输层发送IO请求到存储设备,存储协议从传输层读取IO请求,按存储协议(NFS/SMB/ISCSI/FTP/HTTP等)规范解析IO请求后向cache组件请求客户端要获取的数据。
2)cache组件在cache缓冲区中查询缓存数据。如果缓存数据不存在,则向共享内存控制器请求分配共享内存,通过驱动读取数据到共享内存,并缓存读到的数据;如果缓存数据存在,直接返回缓存到的数据。
3)cache组件将缓存数据的共享内存地址返回给存储协议(无数据拷贝)。
4)存储协议按协议规范完成数据封装后通过传输层提供的免拷贝高性能发送方式将数据推送到传输层。传输层按照免拷贝方式组织数据,完成协议逻辑处理、数据封装后,通过共享内存控制器将数据的虚拟地址转换成网卡可识别的物理地址。最后将数据推送到网卡。
5)网卡将传输层送来的数据通过DMA方式发送到网络。
6)客户端接收到存储服务端的响应,完成一次IO操作。
图15是本发明实施例提供的发送数据包的装置的示意性框图。该装置1500可以为存储服务器,也可以为其他需要利用数据包进行通信的任意计算机设备。
该装置1500包括获取单元1510、写入单元1520、转换单元1530和发送单元1540。需要说明的是,在实体装置中,处理器通过调用存储器中的计算机程序,实现各个单元执行的步骤。作为一个示例,处理器可以通过调用传输层协议的程序来执行相应的功能。
获取单元1510,获取待发送的第一用户数据在用户内存中的虚拟地址。
其中,第一用户数据可以为第二用户设备向第一用户设备所请求的数据,该第一用户数据位于第一用户设备的用户内存中。
本发明实施例对获取第一用户数据的虚拟地址的方式不做具体限定。例如,可以由存储协议层将第一用户数据的虚拟地址发送给传输层。
该传输层所采用的协议可以为TCP/IP或UDP。本发明实施例对此不做具体限定。
写入单元1520,将第一数据包的传输层首部写入在传输层的缓冲区,该第一数据包包括第一用户数据。
本发明实施例中,第一数据包为传输第一用户数据的数据包,在传输层的缓冲区中,为第一用户数据封装传输层首部,以形成第一数据包。传输层的首部存储有源端、目的端的端口号及源端IP地址、目的端IP地址,用于寻找发送端和接收端的应用进程。
转换单元1530,将第一数据包的虚拟地址转换成物理地址,其中,第一数据包的虚拟地址包括第一用户数据在用户内存中的虚拟地址,以及第一数据包的传输层首部在缓冲区中的虚拟地址。
发送单元1540,根据转换后的物理地址,通过网卡发送第一数据包。
在本发明实施例中,传输层将转换后的物理地址发送给网卡,网卡根据该转换后的物理地址,以DMA的方式将该第一数据包发送到网络。
传统方案中,用户数据需要拷贝至传输层的缓冲区,并在传输层的缓冲区为用户数据添加传输层首部,以形成数据包。本发明实施例提供的技术方案中,第一数据包的虚拟地址包含内存的两个不同存储区域中的虚拟地址:用户内存中的虚拟地址和传输层的缓冲区中的虚拟地址,即第一数据包是跨内存区域构建和组织的,这样无需进行用户数据的拷贝,从而能够减少数据包发送过程对CPU资源的占用。
本发明实施例对获取第一用户数据的虚拟地址,及虚拟地址到物理地址的映射方式不做具体限定。
作为一个实施例,用户内存和传输层的缓冲区均位于预先分配的共享内存中。本发明实施例中的装置中的转换单元具体用于根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,将该第一数据包的虚拟地址转换成物理地址。
用户内存和传输层的缓冲区均使用预先分配的共享内存,也就是说,第一用户数据和第一数据包的传输层首部的虚拟地址均位于共享内存中。在进行地址转换时,根据预先建立的该共享内存的虚拟地址和物理地址的对应关系,可将第一数据包的虚拟地址转换成物理地址。该方案能够在多个进程之间可操作访问,能够快速地实现地址转换。
可选地,本发明实施例的发送数据包的装置还可对数据进行拷贝处理。在拷贝场景下,装置1500中的获取单元1510、写入单元1520、转换单元1530和发送单元1540的具体功能如下。
获取单元1510,获取待发送的第二用户数据。
写入单元1520,将第二数据包的传输层首部写入在传输层的缓冲区,该第二数据包包括第二用户数据。
转换单元1530,将第二数据包的虚拟地址转换成物理地址,其中,第二数据包的虚拟地址包括第二用户数据在缓冲区中的虚拟地址,以及第二数据包的传输层首部在缓冲区中的虚拟地址。
发送单元1540,根据转换后的物理地址,通过网卡发送第二数据包。
上述技术方案中,第二数据包的传输层首部和用户数据的虚拟地址均为传输层缓冲区中的虚拟地址,表示第二数据包的用户数据从传输层的上层拷贝至了传输层的缓冲区,第二数据包的封装和组织是在传输层的缓冲区中进行的。基于上述实现方式,本发明实施例提供的技术方案不但支持基于免拷贝的数据包发送方式,也支持基于拷贝的数据包发送方式,从而具有较好的兼容性。
本发明实施例对传输层模块管理第一数据包的地址信息的方式不作具体限定,可以由一个或多个结构体来记录第一数据包的地址信息。
在一种可能的实现方式中,该传输层的缓冲区存储有该第一数据包对应的第一结构体,第二结构体和第三结构体,该第一数据包对应的第一结构体用于记录该第一数据包的长度,以及在传输层的缓冲区中的该第一数据包的下一数据包对应的第一结构体的指针,该第一数据包对应的第二结构体用于记录该第一数据包的虚拟地址,该第一数据包对应的第三结构体用于记录该第一数据包的物理地址。
第一结构体负责在传输层组织内存,第二结构体负责管理缓冲区中数据包的虚拟地址,第三结构体用于与网卡进行交互,负责管理缓冲区中数据包的物理地址。通过上述结构体可以对缓冲区中数据包的存储位置信息,以及缓冲区与网卡之间需要交互的信息进行有效地组织和管理。
上述结构体的具体实现方式与上文描述的方法侧类似,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种发送数据包的方法,其特征在于,包括:
获取待发送的第一用户数据在用户内存中的虚拟地址;
将第一数据包的传输层首部写入在传输层的缓冲区,所述第一数据包包括所述第一用户数据;
将所述第一数据包的虚拟地址转换成物理地址,其中,所述第一数据包的虚拟地址包括所述第一用户数据在用户内存中的虚拟地址,以及所述第一数据包的传输层首部在所述缓冲区中的虚拟地址;
根据所述转换后的物理地址,通过网卡发送所述第一数据包。
2.根据权利要求1所述的方法,其特征在于,所述用户内存是预先分配的共享内存的一部分,所述传输层的缓冲区是所述预先分配的共享内存的一部分,
所述将所述第一数据包的虚拟地址转换成物理地址,包括:
根据预先建立的所述共享内存的虚拟地址和物理地址的对应关系,将所述第一数据包的虚拟地址转换成物理地址。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
获取待发送的第二用户数据;
将第二数据包的传输层首部写入在传输层的缓冲区,所述第二数据包包括所述第二用户数据;
将所述第二数据包的虚拟地址转换成物理地址,其中,所述第二数据包的虚拟地址包括所述第二用户数据在所述缓冲区中的虚拟地址,以及所述第二数据包的传输层首部在所述缓冲区中的虚拟地址;
根据所述转换后的物理地址,通过网卡发送所述第二数据包。
4.根据权利要求1或2所述的方法,其特征在于,所述传输层的缓冲区存储有所述第一数据包对应的第一结构体,第二结构体和第三结构体,所述第一数据包对应的第一结构体用于记录所述第一数据包的长度,以及在所述传输层的缓冲区中的所述第一数据包的下一数据包对应的第一结构体的指针,所述第一数据包对应的第二结构体用于记录所述第一数据包的虚拟地址,所述第一数据包对应的第三结构体用于记录所述第一数据包的物理地址。
5.根据权利要求1或2所述的方法,其特征在于,所述方法由存储服务器执行,所述第一用户数据为所述存储服务器的客户端所请求的数据。
6.根据权利要求1或2所述的方法,其特征在于,所述传输层采用的协议为传输控制协议/因特网互联协议TCP/IP或用户数据报协议UDP。
7.一种发送数据包的装置,其特征在于,所述装置位于存储服务器中,所述装置包括:
第一获取单元,用于获取待发送的第一用户数据在用户内存中的虚拟地址;
第一写入单元,用于将第一数据包的传输层首部写入在传输层的缓冲区,所述第一数据包包括所述第一用户数据;
第一转换单元,用于将所述第一数据包的虚拟地址转换成物理地址,其中,所述第一数据包的虚拟地址包括所述第一用户数据在用户内存中的虚拟地址,以及所述第一数据包的传输层首部在所述缓冲区中的虚拟地址;
第一发送单元,用于根据所述转换后的物理地址,通过网卡发送所述第一数据包。
8.根据权利要求7所述的装置,其特征在于,所述用户内存是预先分配的共享内存的一部分,所述传输层的缓冲区是所述预先分配的共享内存的一部分,
所述第一转换单元具体用于根据预先建立的所述共享内存的虚拟地址和物理地址的对应关系,将所述第一数据包的虚拟地址转换成物理地址。
9.根据权利要求7或8所述的装置,其特征在于,所述装置还包括:
第二获取单元,用于获取待发送的第二用户数据;
第二写入单元,用于将第二数据包的传输层首部写入在传输层的缓冲区,所述第二数据包包括所述第二用户数据;
第二转换单元,将所述第二数据包的虚拟地址转换成物理地址,其中,所述第二数据包的虚拟地址包括所述第二用户数据在所述缓冲区中的虚拟地址,以及所述第二数据包的传输层首部在所述缓冲区中的虚拟地址;
第二发送单元,用于根据所述转换后的物理地址,通过网卡发送所述第二数据包。
10.根据权利要求7或8所述的装置,其特征在于,所述传输层的缓冲区存储有所述第一数据包对应的第一结构体,第二结构体和第三结构体,所述第一数据包对应的第一结构体用于记录所述第一数据包的长度,以及在所述传输层的缓冲区中的所述第一数据包的下一数据包对应的第一结构体的指针,所述第一数据包对应的第二结构体用于记录所述第一数据包的虚拟地址,所述第一数据包对应的第三结构体用于记录所述第一数据包的物理地址。
11.根据权利要求7或8所述的装置,其特征在于,所述装置为存储服务器,所述第一用户数据为所述存储服务器的客户端所请求的数据。
12.根据权利要求7或8所述的装置,其特征在于,所述传输层采用的协议为传输控制协议/因特网互联协议TCP/IP或用户数据报协议UDP。
13.一种计算机可读存储介质,其特征在于,包括计算机指令,当所述计算机指令在计算机上运行时,使得所述计算机执行如权利要求1-6中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810010977.XA CN110011933B (zh) | 2018-01-05 | 2018-01-05 | 发送数据包的方法、装置及计算机可读存储介质 |
PCT/CN2018/107481 WO2019134403A1 (zh) | 2018-01-05 | 2018-09-26 | 发送数据包的方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810010977.XA CN110011933B (zh) | 2018-01-05 | 2018-01-05 | 发送数据包的方法、装置及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110011933A CN110011933A (zh) | 2019-07-12 |
CN110011933B true CN110011933B (zh) | 2021-05-18 |
Family
ID=67143588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810010977.XA Active CN110011933B (zh) | 2018-01-05 | 2018-01-05 | 发送数据包的方法、装置及计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110011933B (zh) |
WO (1) | WO2019134403A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111506541B (zh) * | 2020-06-30 | 2020-09-22 | 翱捷科技(上海)有限公司 | 一种嵌入式网络设备中加速网络数据包处理的方法及系统 |
CN114095572B (zh) * | 2020-07-30 | 2023-04-07 | 大唐移动通信设备有限公司 | 数据搬运方法及装置 |
CN111988394B (zh) * | 2020-08-18 | 2022-11-01 | 北京金山云网络技术有限公司 | 一种虚拟化环境中优化p2p数据传输的方法、装置及设备 |
CN116959289B (zh) * | 2023-09-21 | 2024-03-22 | 山东通维信息工程有限公司 | 一种基于车路协同技术的智慧停车系统及方法 |
CN117692416B (zh) * | 2024-02-04 | 2024-05-03 | 苏州元脑智能科技有限公司 | 网络报文处理方法、装置、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000041358A2 (en) * | 1999-01-08 | 2000-07-13 | Intel Corporation | A credit based flow control method |
CN102375789A (zh) * | 2010-08-09 | 2012-03-14 | 上海中标软件有限公司 | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101150487A (zh) * | 2007-11-15 | 2008-03-26 | 曙光信息产业(北京)有限公司 | 一种零拷贝网络报文发送方法 |
CN101304373B (zh) * | 2008-06-25 | 2011-03-02 | 中兴通讯股份有限公司 | 一种实现局域网内高效传输大块数据的方法及系统 |
CN101340574B (zh) * | 2008-08-04 | 2010-09-08 | 中兴通讯股份有限公司 | 一种实现零拷贝发送流媒体数据的方法及系统 |
CN101819564B (zh) * | 2009-02-26 | 2013-04-17 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN101841470B (zh) * | 2010-03-29 | 2012-10-10 | 东南大学 | 一种基于Linux的底层数据包的高速捕获方法 |
CN106598752B (zh) * | 2016-11-15 | 2020-05-12 | 北京大学深圳研究生院 | 远程零拷贝方法 |
-
2018
- 2018-01-05 CN CN201810010977.XA patent/CN110011933B/zh active Active
- 2018-09-26 WO PCT/CN2018/107481 patent/WO2019134403A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000041358A2 (en) * | 1999-01-08 | 2000-07-13 | Intel Corporation | A credit based flow control method |
CN102375789A (zh) * | 2010-08-09 | 2012-03-14 | 上海中标软件有限公司 | 一种通用网卡非缓存的零拷贝方法及零拷贝系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2019134403A1 (zh) | 2019-07-11 |
CN110011933A (zh) | 2019-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110011933B (zh) | 发送数据包的方法、装置及计算机可读存储介质 | |
US9678918B2 (en) | Data processing system and data processing method | |
JP3217002B2 (ja) | デジタルスタジオ装置およびその制御方法 | |
US7370174B2 (en) | Method, system, and program for addressing pages of memory by an I/O device | |
US7707337B2 (en) | Object-based storage device with low process load and control method thereof | |
Cheriton et al. | The distributed V kernel and its performance for diskless workstations | |
US8713180B2 (en) | Zero-copy network and file offload for web and application servers | |
US8898336B2 (en) | Content conversion system and content conversion server | |
WO2022126919A1 (zh) | 文件传输方法、装置、计算机设备及存储介质 | |
JP4532098B2 (ja) | パックし圧縮したバッファを使用してクライアント−サーバ間の通信を向上させるシステムおよび方法 | |
US20030145230A1 (en) | System for exchanging data utilizing remote direct memory access | |
JP2019507409A (ja) | 従来のファイルシステムインターフェースを使用することによってクラウドストレージサービスにアクセスする方法及び装置 | |
JP4348087B2 (ja) | ネットワークにおけるファイル共有の方法およびシステム | |
US9584628B2 (en) | Zero-copy data transmission system | |
WO2021244155A1 (zh) | 一种进程间通信方法以及进程间通信装置 | |
US11379405B2 (en) | Internet small computer interface systems extension for remote direct memory access (RDMA) for distributed hyper-converged storage systems | |
WO2016065611A1 (zh) | 访问文件的方法、系统和主机 | |
CN109857545B (zh) | 一种数据传输方法及装置 | |
US10154079B2 (en) | Pre-boot file transfer system | |
CN113127139B (zh) | 一种基于数据面开发套件dpdk的内存分配方法和装置 | |
WO2019045837A1 (en) | REMOTE APPLICATION CONFIGURATION ON A NETWORK STORAGE SERVER | |
US10289550B1 (en) | Method and system for dynamic write-back cache sizing in solid state memory storage | |
US6516344B1 (en) | Reducing network traffic for remote file system accesses by keeping track of unallocated regions in files | |
KR100785774B1 (ko) | 객체 기반 파일 입출력 시스템 및 방법 | |
KR20150048028A (ko) | 데이터 전송 관리 방법 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |