CN110445580A - 数据发送方法及装置、存储介质、电子装置 - Google Patents

数据发送方法及装置、存储介质、电子装置 Download PDF

Info

Publication number
CN110445580A
CN110445580A CN201910736438.9A CN201910736438A CN110445580A CN 110445580 A CN110445580 A CN 110445580A CN 201910736438 A CN201910736438 A CN 201910736438A CN 110445580 A CN110445580 A CN 110445580A
Authority
CN
China
Prior art keywords
data
sent
virtual address
address range
kernel state
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.)
Granted
Application number
CN201910736438.9A
Other languages
English (en)
Other versions
CN110445580B (zh
Inventor
吴惠敏
吴赛玲
尹浪
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang Dahua Technology Co Ltd
Original Assignee
Zhejiang Dahua Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang Dahua Technology Co Ltd filed Critical Zhejiang Dahua Technology Co Ltd
Priority to CN201910736438.9A priority Critical patent/CN110445580B/zh
Publication of CN110445580A publication Critical patent/CN110445580A/zh
Application granted granted Critical
Publication of CN110445580B publication Critical patent/CN110445580B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0001Systems modifying transmission characteristics according to link quality, e.g. power backoff
    • H04L1/0015Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/0001Systems modifying transmission characteristics according to link quality, e.g. power backoff
    • H04L1/0015Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy
    • H04L1/0016Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy involving special memory structures, e.g. look-up tables
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/568Storing data temporarily at an intermediate stage, e.g. caching

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Quality & Reliability (AREA)
  • Computer And Data Communications (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明提供了一种数据发送方法及装置、存储介质、电子装置,该方法包括:在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。通过本发明,解决了发送单份业务数据给多个不同用户时,发送数据的效率低的问题,达到高效发送数据的效果。

Description

数据发送方法及装置、存储介质、电子装置
技术领域
本发明涉及通信领域,具体而言,涉及一种数据发送方法及装置、存储介质、电子装置。
背景技术
现有的技术方案里,网络发送的数据在网络协议栈处理时,因为协议栈需要添加协议栈本身数据的需要,都会先进行分片拷贝,再处理每个分片数据;在发送数据时或多或少存在一些通用性约束,例如IP报文头的省略,使得它只失去后续报文IP路由的能力,缺乏在IP网络推广的可能性;例如仅仅支持用户数据协议(User Date Protocol,简称为UDP)或传输控制协议(Transfer Control Protocol,简称为TCP)协议,也使得应用范围变窄,且如果仅仅是预先分配与网络链路适配的分片大小,避免因UDP报文过大而导致IP层分片的预分配拷贝方案,带来的受益也非常有限,且基本不考虑单份数据大批量发送给多个不同连接的情况。
在我们实际的应用里,存在某份数据(例如:图片a),它生成后,会发送给多个“用户”,部分“用户”就是此案中所谓的“网络连接”,也就是说设备或系统,会把某张图片发送给很多网络连接;我们现在的软件架构里,每个连接是独立的,每次发送是独立的。那么,在实现上述业务的时候,系统里的模块都在各自完成各自的任务,无不搭理,这样的优势是独立清晰的设计和实现,这样的劣势是存在很多冗余而繁杂的重复操作和过程,它们的存在使得设备或系统无法全力发挥性能,而这正是嵌入式系统的使命,充分挖掘和发挥系统的全部性能,来支撑业务的顺畅实现。
针对上述存在的发送单份业务数据给多个不同用户时,发送数据的效率低的问题,相关技术中尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种数据发送方法及装置、存储介质、电子装置,以至少解决相关技术中发送单份业务数据给多个不同用户时,发送数据的效率低的问题。
根据本发明的一个实施例,提供了一种数据发送方法,包括:在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。
根据本发明的另一个实施例,提供了一种数据发送装置,包括:发送模块,用于在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在所述内核态虚拟地址范围中发送所述待发送数据的缓存;其中,所述待发送数据存储在用户态虚拟地址范围内,所述内核态虚拟地址范围与所述用户态虚拟地址范围之间通过一预设变量关联。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明,由于在对数据发送之前,先判断内核态虚拟地址范围中是否存在待发送数据的缓存,如果存在,直接在内核态虚拟地址范围中发送待发送数据的缓存,并不需要对待发送数据进行处理,其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。因此,可以解决相关技术中发送单份业务数据给多个不同用户时,发送数据的效率低的问题,达到高效发送数据的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明实施例的一种数据发送方法的移动终端的硬件结构框图;
图2是根据本发明实施例的数据发送方法的流程图;
图3是本实施例中的发送待发送数据的流程图;
图4是本发明实施例中的用户态虚拟地址范围的示意图;
图5是本实施例中的待发送数据的示意图;
图6是根据本发明实施例的数据发送装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种数据发送方法的移动终端的硬件结构框图。如图1所示,移动终端10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述移动终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述移动终端的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的数据发送方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种数据发送方法,图2是根据本发明实施例的数据发送方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;
其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。
由上述方法可知,由于在对数据发送之前,先判断内核态虚拟地址范围中是否存在待发送数据的缓存,如果存在,直接在内核态虚拟地址范围中发送待发送数据的缓存,并不需要对待发送数据进行处理,其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。因此,可以解决相关技术中发送单份业务数据给多个不同用户时,发送数据的效率低的问题,达到高效发送数据的效果。
可选地,上述步骤的执行主体可以为终端等,但不限于此。
在本实施例中,待发送数据可以是图片、文字、视频等待发送的文件。关联内核态虚拟地址范围和用户态虚拟地址范围的预设变量可以基于需要进行设置。
用户态虚拟地址范围和内核态虚拟地址范围所对应的物理内存可以是同一位置,也可以不同。
在本实施例中,可以应用于以下场景中:一次一次的将一张照片发送给多个人,每个人都会先建立一个独立的连接,通过每个人的连接,依次逐个发送。
在一个可选的实施例中,在发送待发送数据的缓存之前,需要设置与用户态虚拟地址范围对应的第一物理内存页面的属性为只读;其中,第一物理内存页面用于表示待发送数据占用的物理内存,用户态虚拟地址范围的起始地址与第一物理内存页面对齐。在本实施例中,第一物理内存页面的属性为只读是利用内核态虚拟地址范围发送待发送数据的前提条件。用户态虚拟地址范围的起始地址与第一物理内存页面对齐是中央处理单元CPU的硬约束条件,一般4KB、16KB、64KB对齐;即用户态虚拟地址范围的起始地址都是物理页面尺寸对齐。此外,对应物理内存页面的使用也是独占性,也就是说,不允许不存在用户态虚拟地址范围对应的某个物理内存页面,它的部分空间分享给其它模块使用的情况。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,可以通过以下方式确定内核态虚拟地址范围,其中,通过以下方式确定内核态虚拟地址范围:利用以下信息至少之一确定内核态虚拟地址范围的空间需求:待发送数据中所包括的数据块的大小,内存管理单元MTU的大小,逐层协议栈头部空间的大小,发送待发送数据的维护信息,待发送数据的状态信息;基于空间需求申请以下信息至少之一:与空间需求对应的内核态虚拟地址空间,与虚拟地址空间对应的物理内存页面;基于信息确定内核态虚拟地址范围。在本实施例中,内核态虚拟地址范围存在对应的物理内存页面;内核态虚拟地址范围对应的物理内存页面是网络协议栈定义的逻辑大小和顺序约束,它与CPU无关,但是它们之间可以转换和处理。可以利用TCP、UDP、IP等互联网协议、网络传输链路,处理器内存管理等方面的因素,实现内核态虚拟地址范围的大小和对齐。
可选地,网络协议栈可以对待发送数据进行逻辑大小和发送顺序的约束;
网络传输链路对待发送数据进行物理大小的约束;
处理器内存管理和网络传输硬件对待发送数据进行在访问内存的模式、对齐和连续性约束;
基于这些关键约束,进行空间分配、划分和数据拷贝等初步准备工作;
基于这些关键约束,可以预估此内核态虚拟地址范围在后续协议栈和网络硬件处理的耗时,并将此预估的耗时记录在缓存的信息头中。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,可以通过以下方式确定待发送数据的缓存:将待发送数据中的数据块按照预设规则进行分片,得到多个数据分片,其中,预设规则包括以下至少之一:协议栈,最大传输单元MTU;将多个数据分片按照协议栈的顺序分别拷贝至内核态虚拟地址范围中的各个物理内存页面中,以确定待发送数据的缓存,其中,各个物理内存页面用于表示内核态虚拟地址范围中的数据占用的物理内存。在本实施例中,上述中对待发送数据的处理即是在第一次发送待发送数据时,将待发送数据拷贝至内核态虚拟地址范围中的过程。分片的大小可以由协议栈和链路MTU同时决定;例如TCP/IP在Ethernet的环境里典型大小是1500-Bytes。
可选地,可以通过以下方式确定内核态虚拟地址范围的空间需求,将多个数据分片的大小、网络链路MTU的大小、逐层协议栈头部空间的大小,以及维护此次发送的总体描述和状态信息的大小进行合并对齐之后,计算出总空间需求,然后,向操作系统申请分配相应大小内核态虚拟地址空间,以及虚拟地址对应的物理内存页面。在本实施例中,每个协议栈,网络设备,都会定义MTU。
在一个可选的实施例中,在将多个数据分片分别拷贝至内核态虚拟地址范围中的各个物理内存页面中,以确定待发送数据的缓存之后,可以在各个物理内存页面中设置报文头,其中,报文头用于标识物理内存页面中的协议栈头部空间,例如TCP/IP的协议栈的每个报文头部信息,协议栈头部空间和业务数据分片成组,一般它们之间无缝隙。在各个物理内存页面中的数据分片中设置信息头,其中,信息头用于标识数据分片的状态信息和描述信息。可以在信息头中记录预计发送待发送数据的耗时。
在一个可选的实施例中,可以锁定内核态虚拟地址范围,以启动发送待发送数据的缓存,其中,启动发送待发送数据的缓存的时间戳记录在信息头中;对待发送数据的缓存进行网络协议栈处理和硬件发送。
硬件发送完毕后,释放内核态虚拟地址范围;记录发送待发送数据的缓存所用的时间,使得缓存可以在后续过程里再次被使用。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,在第一物理内存页面的属性为只读,且存在请求写入用户态虚拟地址范围数据的情况下,终止待发送数据的缓存的发送;
在发送待发送数据的缓存时,且存在请求写入用户态虚拟地址范围数据的情况下,解除用户态虚拟地址范围与内核态虚拟地址范围之间的关联。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存包括以下之一:在内核态虚拟地址范围处于空闲状态的情况下,发送待发送数据的缓存;在内核态虚拟地址范围不处于空闲状态,且待发送数据在内核态虚拟地址范围内的排队被唤醒的情况下,发送待发送数据的缓存,其中,内核态虚拟地址范围内的数据缓存利用先进先出FIFO的方式进行排队。此处之所以需要缓存存在与否的判断,是因为系统可能在内存紧缺的时候,已经提前回收内核态虚拟地址范围占用的资源,或者,用户态虚拟地址范围已经修改“Ro”属性的设定,以及解除与内核态虚拟地址的关联。
下面对本发明中的部分实现细节进行说明:
图3是本实施例中的发送待发送数据的流程图,如图3所示,包括以下步骤:
S301:待发送数据准备:此处准备完成,是指有效业务数据已经由数据源生成完成,且已经完整存储在某种模式(用户态)的某段可用线性映射地址范围内(即用户态虚拟地址范围),本实施例使用“VMu[a-b]”表示。以及,此用户态虚拟地址范围使用的第一物理内存页面,本实施例中用“PageU1-Un”表示;
在带MMU的Linux环境里,VMu[a-b]对应用户态的虚拟地址,它是线性连续的地址范围,PageU1-Un是此部分虚拟地址实际使用的物理内存页面,它是离散的区域;
在本步骤中,VMu[a-b]的起始地址都与第一物理页面尺寸对齐,那么,对应物理内存页面的使用也是独占性,也就是说,不允许不存在VMu[a-b]对应的某个物理内存页面,它的部分空间分享给其它模块使用的情况;
S302:第1次发送准备:再申请一段某种模式(内核态)的可用线性地址映射范围(即内核态虚拟地址范围),本实施例用“VMk[c-d]”表示,以及,此分配和映射此地址范围对应的物理内存页面,本案用“PageK1-Km”表示;
VMk[c-d]的大小和对齐,依赖实际的运行环境因素,主要指网络协议栈,网络传输链路,处理器内存管理等方面因素;
网络协议栈会对传输的业务数据有逻辑大小和顺序的约束;
网络传输链路对于传送的数据分片存在物理大小的约束;
处理器内存管理和网络传输硬件同时还存在访问内存的模式、对齐和连续性约束;
基于这些关键约束,进行空间分配、划分和数据拷贝等初步准备工作;
基于这些关键约束,可以预估此VMk[c-d]后续协议栈和网络硬件处理的耗时,并将此预估的耗时记录在信息头,后续的步骤会使用此值;
完成此初步工作后,PageU1-Un的属性会被设置为只读模式(Read-Only),VMk[c-d]会被管理使用,且持续和VMu[a-b]保持逻辑关联,直到VMk[c-d]被系统回收,或者,PageU1-Un的只读属性被关闭;在本案例,用PageU1Ro-UnRo表示物理内存页面只读;
PageU1-Un的只读属性关闭,在实际系统里,就是表示它存储的数据将被更新为新的业务数据;例如某张图片数据的存储区,发送给N个用户后,完成实际的发送业务需求,此缓冲区会被再次使用,作为下一张图片数据的存储区;
在带MMU的Linux环境里,VMk[c-d]典型对应到内核态的虚拟地址,PageK1-Km是此部分虚拟地址实际使用的物理内存页面。
S303:发送准备是否成功,失败则采用传统发送方式,成功则转至S304;
S304:发送启动,锁定VMk[c-d],记录发送启动时刻的时间戳;
S305:启动发送:协议栈处理及硬件发送;
S306:完成发送:释放VMk[c-d],记录实际耗时;此处释放,是指VMk[c-d]可以再次被占用,而非解除VMu[a-b]与VMk[c-d]的关联;完成发送后,会查看是否有排队发送的请求,如果存在,那么唤醒排队的请求,否则就安静地结束此次发送,记录下本次发送的实际耗时;
S307:第2+次发送开始,寻找和判断VMk[c-d]是否已经存在,如果不存在那么跳转到S301,否则转至步骤S308;
S308:判断VMk[c-d]是否可以直接占用,即它是否“空闲”,如果空闲,那么直接跳转到S304,否则前进到S309;
S309:判断是否排队等待VMk[c-d],如果不排队,那么采用传统发送方案,否则排队等待被唤醒,队列采用FIFO(First In First Out,先进先出)模式,因此只要被唤醒,那么表示已经可以直接占用VMk[c-d],直接调转到S304;
可选地,排队与否的决定因素由排队可能引起的延时决定,可能引起的延时由当前正在处理的事务的预期结束点,以及,队列里排队发送请求的数量的预期耗时,共同计算得到;具体实现可以通过设定一个预期等待阈值,当此阈值>当前正在处理预期结束时间量+队列排队请求数量*单次发送预期耗时,判定为不排队;
之所以会遇到既有新请求到来,又有老请求还在处理,甚至还有排队等待处理的情况,主要是由于如下几方面因素引起:
上次提交的请求,推向协议栈和网络硬件后,硬件有并发处理的能力,因此当前CPU上的线程可以掉头去处理后续的发送请求;
另外一种典型的情景是,当前系统多线程且多CPU核心并发运行,那么自然会出现多个请求同时抵达发送点的情况。
图4是本发明实施例中的用户态虚拟地址范围的示意图,如图4所示,“VMu[a-b]”:这块待发送数据区的用户态虚拟地址范围,其中,“VM”表示虚拟地址(Virtual Memory),“u”表示用户空间(UserSpace),“[a-b]”表示地址范围;
“U1~Un”:这块待发送数据区,逻辑上占用的、以分页大小为单位的分段,且此区域的头部、尾部按照此分页单位对齐;
“PageU1~PageUn”:这块待发送数据区,实际占用的物理内存页面;物理内存页面是否连续;
图4中灰色部分:待发送的业务数据块,它是整个数据块的全部或一部分,主要是因为对齐需求出现的部分空白区域。
图5是本实施例中的待发送数据的示意图,如图5所示,在第1次发送的准备阶段,根据业务数据的大小,网络链路MTU的大小,逐层协议栈头部空间的大小,以及维护此次发送的总体描述和状态信息的大小,将它们总和在一起,并进行合理的对齐后,计算得总空间需求,然后,申请分配相应大小内核态(KernelSpace)虚拟地址空间(VMk[c-d]),以及虚拟地址对应的物理内存页面(PageK1~Km),如果分配失败,则按照现存的旧方案进行发送;
将VMu[a-b]的业务数据拷贝到VMk[c-d]中的K1-Km处,按照顺序分割放置,分割的大小由协议栈和链路MTU同时决定;例如TCP/IP在Ethernet的环境里典型大小是1500-Bytes;
图5中每个Page只有一片业务数据分片,这只是为了示例图片清晰,实际情况由具体的大小和对齐约束同时决定,可能存在每个Page多个业务数据分片,也可能存在单个业务数据分片跨越多个Page的情况,此时的约束条件来自后续处理此数据是否需要连续的物理内存;
每个业务数据分片前会设置报文头,用于协议栈头部空间,例如TCP/IP的协议栈的每个报文头部信息;协议栈头部空间和业务数据分片成组,一般它们之间无缝隙;
VMk[c-d]头部还设置信息头,它是整块数据的总体描述和状态信息,简称信息头,此处记录预计处理耗时;至此,第1次发送的准备阶段完成。
第1次发送的协议栈处理和硬件发送阶段,将VMk[c-d]锁定,并且记录开始处理时间戳到信息头,进行后续的网络协议栈处理和硬件发送;硬件发送完毕后,将释放VMk[c-d],记录实际处理耗时,使得它可以在后续Send-2+过程里再次被使用;至此,第1次发送完成。
另外,在第1次发送的准备阶段开始之前,将VMu[a-b]对应的所有物理页面(PageU1~Un),全部设定为只读模式(Ro);
如果在第1次发送的准备阶段,发现有向用户态虚拟地址范围写入数据的请求发生,那么立刻终止一切处理,因为这是BUG,一切都完蛋了;
如果在第1次发送的协议栈处理和硬件发送阶段,发现有向此区域写入数据的请求发生,那么解除VMu[a-b]和VMk[c-d]的关联。
Send-2+阶段:
开始第2次,第3次,第…次发送;
寻找VMu[a-b]对应的VMk[c-d]是否有缓存,如果不存在,那么按照Send-1逻辑进行发送;此处之所以需要缓存存在与否的判断,是因为系统可能在内存紧缺的时候,已经提前回收VMk[c-d]占用的资源,或者,VMu[a-b]已经修改“Ro”属性的设定,以及解除与VMk[c-d]的关联;
还有一种情况,那就是这次的发送目的网络协议族与链路不匹配,同样判定为无缓存,这种情况比较罕见,但是逻辑上的确存在此类情况,我们的设备恰巧很不吻合这样的特殊情况,也就是说,在这样的特殊的情况下,此案的优化可能失效,即可能和传统的发送效率一样,但不会明显差于传递的方案;
如果VMk[c-d]存在,读取信息头里的信息,判断此区域是否空闲,如果非空闲,那么,读取其预估处理时间、实际处理时间、占用到现在的耗时,结合这三项,以及队列的深度进行计算,可以预估多少时间后当前处理会完成,对比已经预设定的等待时间阈值,如果大于阈值则按照现存的旧方案进行发送,如果小于等于阈值,则判定队列情况;如果已经有排队等待的发送请求,则判定已经预设定的等待队列深度的阈值,如果大于队列阈值,那么也按照现存的旧方案进行发送,否则将此发送请求排队等待;
如果空闲,或等待被唤醒,则直接占用VMk[c-d],并记录开始使用的时间戳,启动后续网络协议栈和网络硬件发送处理,后续步骤与第1步完全一致;
综上所述,本实施例在保持现有网络数据发送的框架前提下,充分利用运行环境的各种软硬件机制,同时支持TCP/UDP、IP网络的核心能力有效,实现单份业务数据在多线程情景里发送给多个不同连接的更高效手段;其中是利用运行环境和模式下的不同物理内存地址与线性地址的映射、属性与关联等技术。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种数据发送装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6是根据本发明实施例的数据发送装置的结构框图,如图6所示,该装置包括:发送模块62,下面对该装置进行说明:
发送模块62,用于在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;
其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。
由上述装置可知,由于在对数据发送之前,先判断内核态虚拟地址范围中是否存在待发送数据的缓存,如果存在,直接在内核态虚拟地址范围中发送待发送数据的缓存,并不需要对待发送数据进行处理,其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。因此,可以解决相关技术中发送单份业务数据给多个不同用户时,发送数据的效率低的问题,达到高效发送数据的效果。
可选地,上述步骤的执行主体可以为终端等,但不限于此。
在本实施例中,待发送数据可以是图片、文字、视频等待发送的文件。关联内核态虚拟地址范围和用户态虚拟地址范围的预设变量可以基于需要进行设置。
用户态虚拟地址范围和内核态虚拟地址范围所对应的物理内存可以是同一位置,也可以不同。
在本实施例中,可以应用于以下场景中:一次一次的将一张照片发送给多个人,每个人都会先建立一个独立的连接,通过每个人的连接,依次逐个发送。
在一个可选的实施例中,在发送待发送数据的缓存之前,需要设置与用户态虚拟地址范围对应的第一物理内存页面的属性为只读;其中,第一物理内存页面用于表示待发送数据占用的物理内存,用户态虚拟地址范围的起始地址与第一物理内存页面对齐。在本实施例中,第一物理内存页面的属性为只读是利用内核态虚拟地址范围发送待发送数据的前提条件。用户态虚拟地址范围的起始地址与第一物理内存页面对齐是中央处理单元CPU的硬约束条件,一般4KB、16KB、64KB对齐;即用户态虚拟地址范围的起始地址都是物理页面尺寸对齐。此外,对应物理内存页面的使用也是独占性,也就是说,不允许不存在用户态虚拟地址范围对应的某个物理内存页面,它的部分空间分享给其它模块使用的情况。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,可以通过以下方式确定内核态虚拟地址范围,其中,通过以下方式确定内核态虚拟地址范围:利用以下信息至少之一确定内核态虚拟地址范围的空间需求:待发送数据中所包括的数据块的大小,内存管理单元MTU的大小,逐层协议栈头部空间的大小,发送待发送数据的维护信息,待发送数据的状态信息;基于空间需求申请以下信息至少之一:与空间需求对应的内核态虚拟地址空间,与虚拟地址空间对应的物理内存页面;基于信息确定内核态虚拟地址范围。在本实施例中,内核态虚拟地址范围存在对应的物理内存页面;内核态虚拟地址范围对应的物理内存页面是网络协议栈定义的逻辑大小和顺序约束,它与CPU无关,但是它们之间可以转换和处理。可以利用TCP、UDP、IP等互联网协议、网络传输链路,处理器内存管理等方面的因素,实现内核态虚拟地址范围的大小和对齐。
可选地,网络协议栈可以对待发送数据进行逻辑大小和发送顺序的约束;
网络传输链路对待发送数据进行物理大小的约束;
处理器内存管理和网络传输硬件对待发送数据进行在访问内存的模式、对齐和连续性约束;
基于这些关键约束,进行空间分配、划分和数据拷贝等初步准备工作;
基于这些关键约束,可以预估此内核态虚拟地址范围在后续协议栈和网络硬件处理的耗时,并将此预估的耗时记录在缓存的信息头中。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,可以通过以下方式确定待发送数据的缓存:将待发送数据中的数据块按照预设规则进行分片,得到多个数据分片,其中,预设规则包括以下至少之一:协议栈,最大传输单元MTU;将多个数据分片按照协议栈的顺序分别拷贝至内核态虚拟地址范围中的各个物理内存页面中,以确定待发送数据的缓存,其中,各个物理内存页面用于表示内核态虚拟地址范围中的数据占用的物理内存。在本实施例中,上述中对待发送数据的处理即是在第一次发送待发送数据时,将待发送数据拷贝至内核态虚拟地址范围中的过程。分片的大小可以由协议栈和链路MTU同时决定;例如TCP/IP在Ethernet的环境里典型大小是1500-Bytes。
可选地,可以通过以下方式确定内核态虚拟地址范围的空间需求,将多个数据分片的大小、网络链路MTU的大小、逐层协议栈头部空间的大小,以及维护此次发送的总体描述和状态信息的大小进行合并对齐之后,计算出总空间需求,然后,向操作系统申请分配相应大小内核态虚拟地址空间,以及虚拟地址对应的物理内存页面。在本实施例中,每个协议栈,网络设备,都会定义MTU。
在一个可选的实施例中,在将多个数据分片分别拷贝至内核态虚拟地址范围中的各个物理内存页面中,以确定待发送数据的缓存之后,可以在各个物理内存页面中设置报文头,其中,报文头用于标识物理内存页面中的协议栈头部空间,例如TCP/IP的协议栈的每个报文头部信息,协议栈头部空间和业务数据分片成组,一般它们之间无缝隙。在各个物理内存页面中的数据分片中设置信息头,其中,信息头用于标识数据分片的状态信息和描述信息。可以在信息头中记录预计发送待发送数据的耗时。
在一个可选的实施例中,可以锁定内核态虚拟地址范围,以启动发送待发送数据的缓存,其中,启动发送待发送数据的缓存的时间戳记录在信息头中;对待发送数据的缓存进行网络协议栈处理和硬件发送。
硬件发送完毕后,释放内核态虚拟地址范围;记录发送待发送数据的缓存所用的时间,使得缓存可以在后续过程里再次被使用。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存之前,在第一物理内存页面的属性为只读,且存在请求写入用户态虚拟地址范围数据的情况下,终止待发送数据的缓存的发送;
在发送待发送数据的缓存时,且存在请求写入用户态虚拟地址范围数据的情况下,解除用户态虚拟地址范围与内核态虚拟地址范围之间的关联。
在一个可选的实施例中,在内核态虚拟地址范围中发送待发送数据的缓存包括以下之一:在内核态虚拟地址范围处于空闲状态的情况下,发送待发送数据的缓存;在内核态虚拟地址范围不处于空闲状态,且待发送数据在内核态虚拟地址范围内的排队被唤醒的情况下,发送待发送数据的缓存,其中,内核态虚拟地址范围内的数据缓存利用先进先出FIFO的方式进行排队。此处之所以需要缓存存在与否的判断,是因为系统可能在内存紧缺的时候,已经提前回收内核态虚拟地址范围占用的资源,或者,用户态虚拟地址范围已经修改“Ro”属性的设定,以及解除与内核态虚拟地址的关联。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;
其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
可选地,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在内核态虚拟地址范围中发送待发送数据的缓存;
其中,待发送数据存储在用户态虚拟地址范围内,内核态虚拟地址范围与用户态虚拟地址范围之间通过一预设变量关联。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1.一种数据发送方法,其特征在于,包括:
在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在所述内核态虚拟地址范围中发送所述待发送数据的缓存;
其中,所述待发送数据存储在用户态虚拟地址范围内,所述内核态虚拟地址范围与所述用户态虚拟地址范围之间通过一预设变量关联。
2.根据权利要求1所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存之前,所述方法还包括:
设置与所述用户态虚拟地址范围对应的第一物理内存页面的属性为只读;
其中,所述第一物理内存页面用于表示所述待发送数据占用的物理内存,所述用户态虚拟地址范围的起始地址与所述第一物理内存页面对齐。
3.根据权利要求1所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存之前,所述方法还包括:确定所述内核态虚拟地址范围,其中,通过以下方式确定所述内核态虚拟地址范围:
利用以下信息至少之一确定所述内核态虚拟地址范围的空间需求:所述待发送数据中所包括的数据块的大小,内存管理单元MTU的大小,逐层协议栈头部空间的大小,发送所述待发送数据的维护信息,所述待发送数据的状态信息;
基于所述空间需求申请以下信息至少之一:与所述空间需求对应的内核态虚拟地址空间,与所述虚拟地址空间对应的物理内存页面;
基于申请的信息确定所述内核态虚拟地址范围。
4.根据权利要求1所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存之前,所述方法还包括:通过以下方式确定所述待发送数据的缓存:
将所述待发送数据中的数据块按照预设规则进行分片,得到多个数据分片,其中,所述预设规则包括以下至少之一:协议栈,最大传输单元MTU;
将所述多个数据分片按照协议栈的顺序分别拷贝至所述内核态虚拟地址范围中的各个物理内存页面中,以确定所述待发送数据的缓存,其中,所述各个物理内存页面用于表示所述内核态虚拟地址范围中的数据占用的物理内存。
5.根据权利要求4所述的方法,其特征在于,在将所述多个数据分片按照协议栈的顺序分别拷贝至所述内核态虚拟地址范围中的各个物理内存页面中,以确定所述待发送数据的缓存之后,所述方法还包括以下至少之一:
在所述各个物理内存页面中设置报文头,其中,所述报文头用于标识物理内存页面中的协议栈头部空间;
在所述各个物理内存页面中的数据分片中设置信息头,其中,所述信息头用于标识所述数据分片的状态信息和描述信息。
6.根据权利要求5所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存包括:
锁定所述内核态虚拟地址范围,以启动发送所述待发送数据的缓存,其中,启动发送所述待发送数据的缓存的时间戳记录在所述信息头中;
对所述待发送数据的缓存进行网络协议栈处理和硬件发送。
7.根据权利要求6所述的方法,其特征在于,对所述待发送数据的缓存进行网络协议栈处理和硬件发送之后,所述方法还包括:
释放所述内核态虚拟地址范围;
记录发送所述待发送数据的缓存所用的时间。
8.根据权利要求2所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存之前,所述方法还包括以下之一:
在所述第一物理内存页面的属性为只读,且存在请求写入所述用户态虚拟地址范围数据的情况下,终止所述待发送数据的缓存的发送;
在发送所述待发送数据的缓存时,且存在请求写入所述用户态虚拟地址范围数据的情况下,解除所述用户态虚拟地址范围与所述内核态虚拟地址范围之间的关联。
9.根据权利要求1所述的方法,其特征在于,在所述内核态虚拟地址范围中发送所述待发送数据的缓存包括以下之一:
在所述内核态虚拟地址范围处于空闲状态的情况下,发送所述待发送数据的缓存;
在所述内核态虚拟地址范围不处于空闲状态,且所述待发送数据在所述内核态虚拟地址范围内的排队被唤醒的情况下,发送所述待发送数据的缓存,其中,所述内核态虚拟地址范围内的数据缓存利用先进先出FIFO的方式进行排队。
10.一种数据发送装置,其特征在于,包括:
发送模块,用于在确定的内核态虚拟地址范围中存在待发送数据的缓存的情况下,在所述内核态虚拟地址范围中发送所述待发送数据的缓存;
其中,所述待发送数据存储在用户态虚拟地址范围内,所述内核态虚拟地址范围与所述用户态虚拟地址范围之间通过一预设变量关联。
11.一种存储介质,其特征在于,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述权利要求1至9任一项中所述的方法。
12.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行所述权利要求1至9任一项中所述的方法。
CN201910736438.9A 2019-08-09 2019-08-09 数据发送方法及装置、存储介质、电子装置 Active CN110445580B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910736438.9A CN110445580B (zh) 2019-08-09 2019-08-09 数据发送方法及装置、存储介质、电子装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910736438.9A CN110445580B (zh) 2019-08-09 2019-08-09 数据发送方法及装置、存储介质、电子装置

Publications (2)

Publication Number Publication Date
CN110445580A true CN110445580A (zh) 2019-11-12
CN110445580B CN110445580B (zh) 2022-04-19

Family

ID=68434512

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910736438.9A Active CN110445580B (zh) 2019-08-09 2019-08-09 数据发送方法及装置、存储介质、电子装置

Country Status (1)

Country Link
CN (1) CN110445580B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110932890A (zh) * 2019-11-20 2020-03-27 厦门网宿有限公司 一种数据传输方法、服务器及计算机可读存储介质
CN112860617A (zh) * 2021-02-02 2021-05-28 浙江大华技术股份有限公司 数据传输方法和装置、存储介质及电子设备
CN115826885A (zh) * 2023-02-21 2023-03-21 浪潮电子信息产业股份有限公司 一种数据迁移方法、装置及电子设备和存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101340574A (zh) * 2008-08-04 2009-01-07 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及系统
CN101827072A (zh) * 2008-06-09 2010-09-08 飞塔公司 虚拟内存协议分段卸载
CN101841470A (zh) * 2010-03-29 2010-09-22 东南大学 一种基于Linux的底层数据包的高速捕获方法
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN102938035A (zh) * 2012-11-08 2013-02-20 西安交通大学 一种在虚拟机内部的驱动隔离系统与方法
CN103544324A (zh) * 2013-11-11 2014-01-29 北京搜狐新媒体信息技术有限公司 一种内核态的数据访问方法、装置及系统
CN104796337A (zh) * 2015-04-10 2015-07-22 京信通信系统(广州)有限公司 一种转发报文的方法及装置
CN109558211A (zh) * 2018-11-27 2019-04-02 上海瓶钵信息科技有限公司 保护可信应用与普通应用的交互完整性和保密性的方法
CN109688058A (zh) * 2018-12-19 2019-04-26 迈普通信技术股份有限公司 报文处理方法、装置及网络设备

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101827072A (zh) * 2008-06-09 2010-09-08 飞塔公司 虚拟内存协议分段卸载
CN101340574A (zh) * 2008-08-04 2009-01-07 中兴通讯股份有限公司 一种实现零拷贝发送流媒体数据的方法及系统
CN101841470A (zh) * 2010-03-29 2010-09-22 东南大学 一种基于Linux的底层数据包的高速捕获方法
CN101917350A (zh) * 2010-09-13 2010-12-15 南京中兴特种软件有限责任公司 一种Linux下基于网卡驱动的零拷贝以太网报文捕获及发送的实现方法
CN102938035A (zh) * 2012-11-08 2013-02-20 西安交通大学 一种在虚拟机内部的驱动隔离系统与方法
CN103544324A (zh) * 2013-11-11 2014-01-29 北京搜狐新媒体信息技术有限公司 一种内核态的数据访问方法、装置及系统
CN104796337A (zh) * 2015-04-10 2015-07-22 京信通信系统(广州)有限公司 一种转发报文的方法及装置
CN109558211A (zh) * 2018-11-27 2019-04-02 上海瓶钵信息科技有限公司 保护可信应用与普通应用的交互完整性和保密性的方法
CN109688058A (zh) * 2018-12-19 2019-04-26 迈普通信技术股份有限公司 报文处理方法、装置及网络设备

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110932890A (zh) * 2019-11-20 2020-03-27 厦门网宿有限公司 一种数据传输方法、服务器及计算机可读存储介质
CN110932890B (zh) * 2019-11-20 2022-09-09 厦门网宿有限公司 一种数据传输方法、服务器及计算机可读存储介质
CN112860617A (zh) * 2021-02-02 2021-05-28 浙江大华技术股份有限公司 数据传输方法和装置、存储介质及电子设备
CN115826885A (zh) * 2023-02-21 2023-03-21 浪潮电子信息产业股份有限公司 一种数据迁移方法、装置及电子设备和存储介质

Also Published As

Publication number Publication date
CN110445580B (zh) 2022-04-19

Similar Documents

Publication Publication Date Title
US10506434B2 (en) System for accelerated network route update through exclusive access to routing tables
US8249072B2 (en) Scalable interface for connecting multiple computer systems which performs parallel MPI header matching
EP0343820B1 (en) Temporary state preservation for a distributed file service
US20070041383A1 (en) Third party node initiated remote direct memory access
CN105511954A (zh) 一种报文处理方法及装置
CN110445580A (zh) 数据发送方法及装置、存储介质、电子装置
JP2015532073A (ja) 使用要求の小バッチ処理のためのシステムおよび方法
US8539089B2 (en) System and method for vertical perimeter protection
CN113127139B (zh) 一种基于数据面开发套件dpdk的内存分配方法和装置
EP1589424A2 (en) Vertical perimeter framework for providing application services in multi-CPU environments
CN101447931B (zh) 一种排他操作的实现方法和装置
CN105373563B (zh) 数据库切换方法及装置
US7466716B2 (en) Reducing latency in a channel adapter by accelerated I/O control block processing
WO2024156239A1 (zh) 视频流传输方法、装置、电子设备及存储介质
CN114172916A (zh) 一种Spark集群中的数据传输方法、系统及相关装置
US20170034267A1 (en) Methods for transferring data in a storage cluster and devices thereof
KR102303424B1 (ko) 랜덤 액세스 메모리를 포함하는 하나 이상의 처리 유닛을 위한 직접 메모리 액세스 제어 장치
CN111404986B (zh) 数据传输处理方法、设备和存储介质
WO2024001411A1 (zh) 多线程调度方法及装置
US9665519B2 (en) Using a credits available value in determining whether to issue a PPI allocation request to a packet engine
CN100391200C (zh) 一种数据传送方法
US9548947B2 (en) PPI de-allocate CPP bus command
CN115567459B (zh) 一种基于缓冲区的流量控制系统与方法
JP3644158B2 (ja) 並列計算機におけるデータ送受信方法
US20200379798A1 (en) Apparatus for transmitting packets using timer interrupt service routine

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