CN111796901A - 切换共享内存区的方法和装置、存储介质和电子设备 - Google Patents
切换共享内存区的方法和装置、存储介质和电子设备 Download PDFInfo
- Publication number
- CN111796901A CN111796901A CN201910277300.7A CN201910277300A CN111796901A CN 111796901 A CN111796901 A CN 111796901A CN 201910277300 A CN201910277300 A CN 201910277300A CN 111796901 A CN111796901 A CN 111796901A
- Authority
- CN
- China
- Prior art keywords
- length
- shared memory
- memory area
- data
- storage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 79
- 238000004891 communication Methods 0.000 claims abstract description 180
- 238000007667 floating Methods 0.000 claims description 34
- 238000004364 calculation method Methods 0.000 claims description 15
- 238000004590 computer program Methods 0.000 claims description 12
- 238000001514 detection method Methods 0.000 claims description 3
- 230000004044 response Effects 0.000 claims description 3
- 230000005540 biological transmission Effects 0.000 description 43
- 238000010586 diagram Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 10
- 230000000694 effects Effects 0.000 description 7
- 230000001960 triggered effect Effects 0.000 description 7
- 230000005236 sound signal Effects 0.000 description 4
- 238000013459 approach Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开的目的是提供一种切换共享内存区的方法和装置、存储介质和电子设备,以解决现有技术中虚拟的发送端和虚拟的接收端基于主机共享内存进行通讯的性能较低的问题。包括:发送端发送在需要发送通讯数据的数据长度大于当前使用的第一共享内存区的存储长度时,先基于第一共享内存区发送通讯数据中的第一子数据段;发送端响应于表征接收端完成接收第一子数据段的事件,检测第一标识是否为真;其中,第一标识在主机为发送端和接收端分配了新的第二共享内存区被设置为真;发送端若检测到第一标识为真,执行切换至第二共享内存区的操作,并基于第二共享内存区向接收端发送通讯数据中除第一子数据段以外的数据段。
Description
技术领域
本公开涉及数据处理领域,具体地,涉及一种切换共享内存区的方法和装置、存储介质和电子设备。
背景技术
随着计算机技术的发展,虚拟机到虚拟机(VM-VM),虚拟机到主机(VM-Host)之间进行通信场景日渐增加。常见的方法是通过TCP/IP网络来进行VM-VM通信,或者,VM-Host通信。然而,这种方法的具有通信的延迟高,带宽低等缺点。相关技术中,为了降低通信的延迟,提高通信的带宽,提出了通过读写共享内存来进行虚拟机到虚拟机,虚拟机到主机之间的通信的方案。
具体的,虚拟机1中的进程a和虚拟机2中的进程b需要建立共享内存区来进行通信,虚拟机1或虚拟机2向主机请求建立共享内存区。主机根据虚拟机的请求为进程a和进程b分配一块共享内存区1。进一步的,主机在虚拟机1和虚拟机2中分别***一个新设备,例如/dev/shm1a和/dev/shm2b,其中,对这两个设备的读写操作等同于对共享内存区1的读写操作。主机将这两个设备(/dev/shm1a和/dev/shm2b)告知虚拟机1的进程a和虚拟机2的进程b,虚拟机1的进程a和虚拟机2的进程b即可分别通过对这两个设备(/dev/shm1a和/dev/shm2b)的读写操作来通信。
值得说明的是,共享内存区的长度会影响到VM-VM,VM-Host之间通信的性能。这是因为,当被传输数据的长度大于共享内存区的长度时,被传输数据需要被切分成多块,分多次来传输,每块数据的传输都需要发送端和接收端至少一次交互。交互的操作过程可以包括如下:发送端通知接收端取走数据,接收端取走数据后通知发送端数据已被取走。然而,这种发送端和接收端之间的交互会引入额外的时间成本,从而降低数据传输的性能。
发明内容
本公开的目的是提供一种切换共享内存区的方法和装置、存储介质和电子设备,以解决现有技术中虚拟的发送端和虚拟的接收端基于主机共享内存区进行通讯的性能较低的问题。
为了实现上述目的,本公开提供一种切换共享内存区的方法,所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述方法包括:
所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假;
所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
可选地,所述方法还包括:
所述发送端若切换至所述第二共享内存区,将第二标识修改为真;
所述主机在检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件,包括:
所述主机检测到所述第二标识为真。
可选地,所述方法还包括:
所述第二标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
可选地,所述方法还包括:
获取所述发送端历史发送的通讯数据的数据参数信息;
判断所述数据参数信息是否符合预设的参数条件;
若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
可选地,所述方法还包括:
计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
可选地,所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述判断所述数据参数信息是否符合预设的参数条件,包括:
确定计算得到的所述长度比值中的最大长度比值;
若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
可选地,所述判断所述数据参数信息是否符合预设的参数条件,还包括:
从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;
若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
可选地,所述方法还包括:根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
可选地,所述根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;包括:根据所述参数信息确定一目标系数;根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
可选地,所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述根据所述参数信息确定一目标系数,包括:
确定计算得到的所述长度比值中的最大长度比值;
从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;
若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
可选地,所述根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度,包括:
确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
本公开提供一种切换共享内存区的装置,所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述装置包括:
发送模块,用于在所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
检测模块,用于所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假;
切换模块,用于所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
可选地,所述切换模块,用于:所述发送端若切换至所述第二共享内存区,将第二标识修改为真;所述主机在检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件,包括所述主机检测到所述第二标识为真。
可选地,所述切换模块,用于:所述第二标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
可选地,所述装置还包括:
获取模块,用于获取所述发送端历史发送的通讯数据的数据参数信息;
判断模块,用于判断所述数据参数信息是否符合预设的参数条件;
触发模块,用于若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
可选地,所述装置还包括时间模块,用于:
计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取模块,用于:若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
可选地,所述获取模块,用于:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述判断模块,用于:确定计算得到的所述长度比值中的最大长度比值;若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
可选地,所述判断模块,用于:从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
可选地,所述装置还包括:长度确定模块,用于根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
长度设置模块,用于:若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
可选地,所述长度确定模块,用于:根据所述参数信息确定一目标系数;根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
可选地,所述获取模块,用于:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述长度确定模块,用于:确定计算得到的所述长度比值中的最大长度比值;从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
可选地,所述长度确定模块,用于确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一项所述切换共享内存区的方法的步骤。
一种电子设备,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现任一项所述切换共享内存区的方法的步骤。
上述方案至少能够达到以下技术效果:
若发送端基于共享内存区传输至接收端的通讯数据的数据长度大于共享内存区的存储长度,发送端可基于共享内存区发送部分子数据段至接收端,继而检测第一标识的真/假状态,若第一标识已被主机设置为真,表明主机已完成设置新的共享内存区的操作,发送端和接收端可以切换至新分配的共享内存区完成发送剩下的通讯数据的操作。这样,可以在保证发送端不暂停发送通讯数据的同时,通过切换至新的共享内存区,提升通讯数据传输性能。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图2是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图3是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图4是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图5是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图6是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图7是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图8是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图9是根据一示例性实施例示出的一种切换共享内存区的方法流程图。
图10是根据一示例性实施例示出的一种切换共享内存区的装置框图。
图11是根据一示例性实施例示出的一种切换共享内存区的装置框图。
图12是根据一示例性实施例示出的一种切换共享内存区的装置框图。
图13是根据一示例性实施例示出的一种电子设备框图。
图14是根据一示例性实施例示出的一种电子设备框图。
具体实施方式
以下结合附图对本公开的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本公开,并不用于限制本公开。
相关技术中提出一些方案用以减少一次数据发送时,主机内运行的虚拟发送端与虚拟接收端之间的交互频次。比如,在主机内分配一较大的共享内存区。这样做的缺点是,当主机上有很多需要通过共享内存来通讯的VM-VM对,或者VM-Host对时,为每一个VM-VM对,或VM-Host对都分配一块很大的内存会造成主机内存不足,继而严重影响主机的性能。而且,当VM-VM对,或VM-Host对传输数据长度小于分配的共享内存区的长度时,这样的分配策略会非常浪费内存。
另外一种方法是为每一次数据传输都分配一次长度和被传输数据长度相同的共享内存区。这样的做法也会引入新的技术问题。每次重新分配共享内存区都会引入如下的步骤:释放旧共享内存区,删除虚拟机1中的设备/dev/shm1a,和虚拟机2中的设备/dev/shm2b,分配新共享内存区,为虚拟机1和虚拟机2分别***新的设备(例如/dev/shm1a_new和/dev/shm2b_new)。如此看来,如果每次通讯都分配新的共享内存区,那么高频次的重复执行上述步骤的成本(overhead)是非常高的。
对此,本公开实施例提出一种切换共享内存区的方法,用以更加灵活的切换共享内存区,提升虚拟的发送端和虚拟的接收端基于主机共享内存区进行通讯时的性能。
图1是根据一示例性实施例示出的一种切换共享内存区的方法流程图。如图1所示,所述方法包括:
所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
S11,所述发送端比对通讯数据的数据长度和第一共享内存区的第一存储长度;
S12,若所述数据长度大于所述第一存储长度,所述发送端将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度。
值得说明的是,若所述数据长度不大于所述第一存储长度,则将上述通讯数据全部写入所述第一共享内存区,并通知接收端从所述第一共享内存区接收所述通讯数据。
示例的,第一共享内存区的第一存储长度用s表示,发送端本次需要发送至接收端的通讯数据的数据长度用n表示。第一共享内存区的地址为shm。为了充分利用共享内存区,可以设置本次发送的第一子数据段的数据长度与第一共享内存区的存储长度相等,也就是说,本次发送的第一子数据段的数据长度为s。具体操作时,i=0,发送端将buf[i,i+s-1]的数据拷贝至共享内存区的地址shm[0,s-1]中。
S13,所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
具体的,表征所述接收端完成接收所述第一子数据段的事件可以是:发送端周期性的检测接收端是否接收完所述第一子数据段,并得到确定所述接收端完成接收所述第一子数据的检测结果。
可选的,所述接收端可以通过控制信道检查是否有数据等待接收,若检测到所述第一共享内存区有数据写入,则将上述第一共享内存区内shm[0,s-1]的数据拷贝到自身的缓存区buf[0,s-1]中。进一步的,接收端通过控制信道通知发送端数据已经完成接收。
具体的,由于第一子数据段已发送,上述通讯数据中未传输的数据长度为n-s。发送端将i更新为i+s,(i=i+s,n=n-s)。
具体的,上述第一标识可以是主机设置的。若主机完成分配新的共享内存区的操作,则将第一标识由假设置为真。值得说明的是,上述第一标识的真/假仅为一种示例性说明。在具体实施时,可以通过其他同等的替换来实现上述第一标识的功能。比如,将第一标识设置为不同的序列号等等。
S14,所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
上述方案至少能够达到以下技术效果:
若发送端基于共享内存区传输至接收端的通讯数据的数据长度大于共享内存区的存储长度,发送端可基于共享内存区发送部分子数据段至接收端,继而检测第一标识的真/假状态,若第一标识已被主机设置为真,表明主机已完成设置新的共享内存区的操作,发送端和接收端可以切换至新分配的共享内存区完成发送剩下的通讯数据的操作。这样,可以在保证发送端不暂停发送通讯数据的同时,通过切换至新的共享内存区,提升通讯数据传输性能。
一般情况下,新分配的共享内存区往往更能适应发送端与接收端的数据传输需求,在原使用的共享内存区存储长度较短,而通讯数据的数据长度较长时,与等待通讯数据传输完成再切换共享内存区的离线切换方案相比,本方案能够缩短切换至新的共享内存区的等待时间,从而基于新的共享内存区传输剩余的数据段,提升数据传输的效率。
在一种可选的实施方式中,所述方法还包括:所述发送端若切换至所述第二共享内存区,将第二标识修改为真;所述主机在检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件,包括:所述主机检测到所述第二标识为真。
进一步的,所述方法还包括:所述第二标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
此外,在确定第一标识和第二标识均被设置为假时,释放所述第一共享内存区。
为了更加清晰的展现上述技术方案,下面分别从主机、发送端、接收端三侧执行的步骤作以示例性说明。
如图2所示,主机可以执行以下步骤:
初始状态下,设置第一标识为假(flag1=假),设置第二标识为假(flag2=假);
判断是否切换用于发送端和接收端进行数据通讯的共享内存区;
若切换,申请分配新的共享内存区shm_new;
若完成分配新的共享内存区shm_new,将第一标识设置为真(flag1=真);
检测第二标识是否为真(flag2=真?);
若第二标识为真(flag2=真),将第一标识设置为假(flag1=假),将第二标识设置为假(flag2=假);
释放原共享内存区。
其中,第一标识可用于表示共享内存区已完成分配;第二标识可用于表示发送端和接收端完成切换至新的共享内存区的操作。
如图3所示,所述发送端基于共享内存区向所述接收端发送通讯数据时,发送端可以执行以下操作:
其中,shm为当前使用的共享内存区的起始地址;s为当前使用的共享内存区的存储长度;n为需要传输的通讯数据的数据长度;
比对n是否小于s,即,比对所述通讯数据的数据长度和当前使用的共享内存区的存储长度;
若n不小于s,执行以下操作:
将buf[i,i+s-1]的数据拷贝至共享内存区的地址shm[0,s-1]中,其中,buf[i,i+s-1]可解释为一数据长度为s的子数据段;
通知接收端从shm中接收长度为s的数据;
循环检测接收端是否完成数据接收;
若接收端完成数据接收,设置剩余需要传输的通讯数据的地址,即,i=i+s,n=n-s;
检测第一标识是否为真,即,flag1是否为真;
若所述第一标识为真,执行切换至新的共享内存区的操作,即,设置shm为新的共享内存区的地址shm_new,设置s为新的共享内存区的存储长度;
将第二标识修改为真;
若所述第一标识为假,则进一步判断剩余需要传输的通讯数据的长度是否小于共享内存区的长度,即,重复执行比对n是否小于s的步骤;
若n小于s,且n大于0,执行以下操作:
将buf[i,i+s-1]的数据拷贝至共享内存区的地址shm[0,s-1]中,其中,buf[i,i+s-1]可解释为一数据长度为s的子数据段;
通知接收端从从shm中接收长度为s的数据;
循环检测接收端是否完成数据接收;
若接收端完成数据接收,流程结束。
如图4所示,接收端可以执行以下操作:
通过控制信道循环检查是否存在数据等待接收;
若存在,则将共享内存区内shm[0,s-1]的数据拷贝到自身的缓存区buf[0,s-1]中;
通过控制信道通知发送端数据已经完成接收。
值得说明的是,上述为了示意每一端执行的步骤将流程图分别示意,在具体实施时,上述图2、图3和图4中的流程可以互相配合使用,以在保证发送端不暂停发送通讯数据的同时,通过切换至新的共享内存区,提升通讯数据传输性能。
值得说明的是,若高频次地触发切换共享内存区,会导致发送端和接收端高频次的重复执行相应的切换共享内存区的操作,运行成本较高。而若低频次地触发切换共享内存区,有可能在当前共享内存区存储长度较小,有较大通讯数据需要传输时,不能及时切换至适宜的大小的共享内存区,导致数据传输效率较低;还有可能在当前共享内存区存储长度较大,而长时间仅传输较小通讯数据时,出现浪费主机内存资源,降低主机性能等不良应影响。
对此,本公开实施例提出另一种切换共享内存区的方法,以更加灵活的触发共享内存区的切换。如图5所示,所述方法包括:
S51,获取发送端历史发送的通讯数据的数据参数信息。
其中,数据参数可以包括发送通讯数据的时间t,该通讯数据的数据长度n,用于传输该通讯数据的共享内存区的存储长度s。
除此之外,数据参数信息,还可以包括每次发送的通讯数据的数据长度与共享内存区的存储长度之间的长度比值x。这一长度比值可被理解为一浮点数,即,基于存储长度为s的共享内存区,传输数据长度为n的通讯数据,需要x=n/s次的有效传输,才能完成传输该通讯数据。
在一种可选的实施方式中,每一次发送端可以将本次发送的通讯数据的数据参数信息发送至主机。具体的,可以以传输日志的形式发送上述表格。例如,如表1所示的日志格式。
表1
具体来讲,在时刻16:00,需传输的通讯数据长度为10,当前共享内存区的存储长度为100,长度比值为0.1,那么,通过0.1(向上取整为1)次传输操作可完成传输通讯数据。再比如,若在时刻16:20,需传输的通讯数长度为220,当前共享内存区的存储长度为100,长度比值为2.2,那么,通过2.2(向上取整为3)次传输操作可完成传输通讯数据。
值得说明的是,上述日志格式仅为示例性说明。具体实施时,可使用任意格式的日志格式传输上述数据参数。
另外,上述长度比值并非为必要的传输参数,例如,主机可通过发送端的日志获知数据长度n和存储长度s,继而计算得到长度比值x。也就是说,无论是发送端还是主机自身,在获知数据长度n和存储长度s均可执行以下操作:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值。
S52,判断所述数据参数信息是否符合预设的参数条件。
值得说明的是,当x远小于1时,例如,n=100,s=1000000,x=0.0001时,说明当前共享内存区的使用效率很低,有降低共享内存区的存储长度的需求。当x远大于1时,例如n=1000000,s=100,x=10000时,说明当前共享内存区的使用过于频繁,有增加共享内存区长度的需求。无论是增加还是降低存储长度,都需要触发切换共享内存区的操作。
在一种可选的实施方式中,所述判断所述数据参数信息是否符合预设的参数条件,包括:确定计算得到的所述长度比值中的最大长度比值;若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
其中,最大长度比值表征上一次切换共享内存区之后,在传输通讯数据时遇到的最大传输次数(浮点数)。所述最大比值阈值可以根据用户的实际使用情况设定,比如说,针对一通讯数据的传输,将通讯数据分为5次依次写入共享内存进行传输用时5s,而这一时间为用户忍耐极限,那么可以将最大比值阈值设为4,从而避免超时传输通讯数据的问题。
在另一种可选的实施方式中个,所述判断所述数据参数信息是否符合预设的参数条件,还包括:从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
其中,百分位数表示:一组n个值按数值大小排列,处于p%位置的值称第p百分位数。例如,50百分位点就是中位数。
在这一可选实施方式中,使用百分位数更具有统计学上的代表性,能够更加客观地反应是否有切换共享内存区的需求。下面从以具体数值的示例与其他计算方式做一比较。
考虑针对历史发送的通讯数据,计算得到有如下4个长度比例x,按照从小到大的顺序排列,分别是:0.01,0.01,0.01,1000000。
算术平均(0.01,0.01,0.01,1000000)=250000.0075;
几何平均(0.01,0.01,0.01,1000000)=1;
75百分位数(0.01,0.01,0.01,1000000)=0.01;
其中75百分位数表示75%的数都小于等于0.01。由此可见,指定的百分位数更具有对样本的代表性。基于百分位数来做决策能够顾全大多数数值,而并非向平均算法一样易受到某一个巨大的数值对整体的影响。
在上述可选实施方式中,通过选取具有代表性的参数来进行比对判定,能够让后续触发切换共享内存区更加符合实际的使用需求,进而提升基于共享内存区的通讯的性能。
S53,若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
上述技术方案至少能够实现以下技术效果:
通过判断历史发送的通讯数据的数据参数信息是否满足预设的参数条件,进而决定是否切换用于发送端与接收端通讯的共享内存区,这样,能够根据数据参数信息灵活的触发切换共享内存区的操作,使触发切换共享内存区更加符合实际运行需求,进而更加合理的实现运行成本、主机资源利用以及用户使用体检之间的平衡。
为了更加清晰的展现上述技术方案,下面分别从主机和发送端两侧执行的步骤作以示例性说明。
如图6所示,可由发送端执行的步骤包括:
获取当前时间t,待传输的通讯数据的数据长度n,当前共享内存区的存储长度s,以及长度比值x=n/s;
将上述数据参数t,n,s和x写入传输日志记录;
执行发送上述通讯数据的操作,即,将通讯数据写入共享内存区,并通知接收端从共享内存区接收通讯数据的操作。
也就是说,可以借助在发送流程中***的生成传输日志的步骤来记录历史上所有传输过的数据长度,共享内存区的存储长度,以及长度比值(有效传输次数)。
如图7所示,可由主机执行的步骤包括:
计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻t1距离当前时刻t0之间的目标时长(t1-t0);
判断目标时长(t1-t0)是否大于预设时长阈值;
若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息,其中,所述预设时长阈值可以由用户根据实际实施需求设定,所述数据参数信息包括所述通讯数据的数据长度n与存储长度s的长度比值x;
确定计算得到的所述长度比值中的最大长度比值ymax;从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值y;
若所述最大长度比值ymax大于预设的最大比值阈值TXmax,则确定符合预设的参数条件;
若所述的最大长度比值ymax不大于预设的最大比值阈值TXmax,且所述第一长度比值y未处于预设的百分位比值范围(a<y<b),则确定符合预设的参数条件;
若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
值得说明的是,在这一实施例中,通过判断(t0-t1)是否大于预设时长阈值,来阻止过于频繁的共享内存区长度调整。预设时长阈值可由用户自由调整,这样根据自己的需求来决定共享内存区长度调整的频率。
TXmax为由用户预设的最大传输次数,例如10000次,这个判断的主要目的是避免待传输通讯数据太长时导致需要传输太多次的情况。用户可以通过设定TXmax来调整可以容忍的最大传输次数。
其中,a<y<b(a和b分别为由用户预设的有效传输次数的下界和上界),这个判断可避免对共享内存区长度过于频繁的小幅度调整,a和b分别是由用户预设的可容忍的有效传输次数的下界和上界。用户可以通过调整a和b来控制共享内存区长度调整的频率。
值得说明的是,确定需要切换共享内存区,还需要为共享内存区分配一个合适的存储长度,避免因分配过大的共享内存区占用主机资源。
如图8所示,是本公开实施例示出的另一种切换共享内存区的方法,所述方法包括:
S81,获取发送端历史发送的通讯数据的数据参数信息。
其中,数据参数可以包括发送通讯数据的时间t,该通讯数据的数据长度n,用于传输该通讯数据的共享内存区的存储长度s。
除此之外,数据参数信息,还可以包括每次发送的通讯数据的数据长度与共享内存区的存储长度之间的长度比值x。这一长度比值可被理解为一浮点数,即,基于存储长度为s的共享内存区,传输数据长度为n的通讯数据,需要x=n/s次的有效传输,才能完成传输该通讯数据。
在一种可选的实施方式中,每一次发送端可以将本次发送的通讯数据的数据参数信息发送至主机。具体的,可以以传输日志的形式发送上述表格。
具体来讲,就是时刻16:00,需传输的通讯数据长度为10,当前共享内存区的存储长度为100,长度比值为0.1,那么,通过0.2(向上取整为1)次传输操作可完成传输通讯数据。再比如,若16:20,需传输的通讯数长度为220,当前共享内存区的存储长度为100,长度比值为2.2,那么,通过2.2(向上取整为3)次传输操作可完成传输通讯数据。
值得说明的是,上述日志格式仅为示例性说明。具体实施时,可使用任意格式的日志格式传输上述数据参数。
另外,上述长度比值并非为必要的传输参数,例如,主机可通过发送端的日志获知数据长度n和存储长度s,继而计算得到长度比值x。也就是说,无论是发送端还是主机自身,在获知数据长度n和存储长度s均可执行以下操作:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值。
S82,根据所述参数信息,以及发送端和接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度。
S83,若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度。
也就是说,如果得到的待选存储长度比当前正在使用的共享内存区小,那么新分配的共享内存区的长度为所述待选存储长度。这样,可以在保证发送端和接收端数据通讯效率的同时,适当减少对主机的占用。
S84,若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度。
S85,若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
其中,如图中虚线所示的箭头根据满足的条件表示选择性执行。也就是说,根据待选存储长度实际所处的数值范围,确定执行上述S83、S84、S85中任一步骤。
具体实施时,可以先判断待选存储长度未小于所述第一存储长度时,再进而判断所述待选存储长度是否大于预设的存储阈值长度。如果未大于预设的存储阈值长度,则按照上述的待选存储长度分配新的共享内存区即可。如果大于存储阈值长度,则仅将新分配的所述第二共享内存区设置为所述存储阈值长度。这样,可以保证共享内存区的长度不会超过用户设定的最大值,从而保证共享内存区对主机内存的占用是可控的,不会对主机性能产生很大的影响。
如图9所示,是本公开一示例性实施例示出的另一种切换共享内存区的方法,所述方法包括:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值。
确定计算得到的所述长度比值中的最大长度比值;从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值。
分别判断最大长度比值和所述第二长度比值与预设的浮点阈值的大小关系。
若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值。
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度。
若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度。
若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
具体的,向上取整可通过ceil函数表示。例如:ceil(0.9)=1,ceil(100.1)=101,ceil(100)=100。
假设前述第二预设百分位为p%。若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值成立,即(y<=TXmax)并且(ymax<=TXmax)。意味着在上一次共享内存区的长度调整之后,没有任何一次数据传输的次数超过预设的浮点阈值TXmax,也就意味着上一次的共享内存区的长度调整不需要考虑传输次数过大的情况。在这种情况下,将目标系数设k置为所述第二长度比值y,将新的共享内存区的长度设定为s_new=ceil(s*k)可以使得p%的数据传输能够一次完成。
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,即(y<=TXmax)并且(ymax<=TXmax)不成立,而(y>TXmax)或者(ymax>TXmax)成立时。因为(ymax>=y)一定成立,所以(ymax>TXmax)一定成立。这意味着在上一次共享内存区的长度调整之后,至少有一次数据传输的次数超过了TXmax,也就意味着这一次的共享内存区的长度调整需要考虑传输次数过大的情况。在这种情况下,将目标系数设k置为所述第二长度比值ymax/TXmax,将新的共享内存区的长度设定为s_new=ceil(s*ymax/TXmax),可以使得在要传输的通讯数据最大情况下,数据传输的次数也不会超过TXmax。
此外,可以保证共享内存区的长度不会超过用户设定的最大值,从而保证共享内存区对主机内存的占用是可控的,不会对主机性能产生很大的影响。
本公开一示例性实施例示出的另一种切换共享内存区的方法。所述方法包括:
获取所述发送端历史发送的通讯数据的数据参数信息;
判断所述数据参数信息是否符合预设的参数条件;
若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
进一步的,基于如下步骤设置新分配的共享内存区的存储长度:
根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
若所述待选存储长度小于所述第一存储长度,则将新分配的第二共享内存区设置为所述待选存储长度;
若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值;
将用于指示完成分配新的第二共享内存区的第一标识设置为真。
进一步的,所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
在上述方案中,可以通过发送端历史发送通讯数据的数据参数决定是否切换至新的共享内存区,并在决定分配新的共享内存区时基于数据参数灵活的设置新的共享内存区的大小,并通过设置第一标识,使发送端在基于前一共享内存区发送通讯数据期间实现不暂停的切换至新分配的共享内存区,从而从整体上提升了基于主机共享内存区的数据通讯的性能。
本公开一示例性实施例示出的另一种切换共享内存区的方法。所述方法包括:
获取所述发送端历史发送的通讯数据的数据参数信息;
判断所述数据参数信息是否符合预设的参数条件;
若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
进一步的,基于如下步骤设置新分配的共享内存区的存储长度:
根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
若所述待选存储长度小于所述第一存储长度,则将新分配的第二共享内存区设置为所述待选存储长度;
若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
在上述方案中,可以通过发送端历史发送通讯数据的数据参数决定是否切换至新的共享内存区,并在决定分配新的共享内存区时基于数据参数灵活的设置新的共享内存区的大小,从而从整体上提升了基于主机共享内存区的数据通讯的性能。
图10是本公开提供一种切换共享内存区的装置1000。所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述装置1000包括:
发送模块1010,用于在所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
检测模块1020,用于所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假;
切换模块1030,用于所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
上述方案至少能够达到以下技术效果:
若发送端基于共享内存区传输至接收端的通讯数据的数据长度大于共享内存区的存储长度,发送端可基于共享内存区发送部分子数据段至接收端,继而检测第一标识的真/假状态,若第一标识已被主机设置为真,表明主机已完成设置新的共享内存区的操作,发送端和接收端可以切换至新分配的共享内存区完成发送剩下的通讯数据的操作。这样,可以在保证发送端不暂停发送通讯数据的同时,通过切换至新的共享内存区,提升通讯数据传输性能。
可选地,所述切换模块,用于:所述发送端若切换至所述第二共享内存区,将第二标识修改为真;所述主机在检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件,包括所述主机检测到所述第二标识为真。
可选地,所述切换模块,用于:所述第二标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
可选地,所述装置还包括:
获取模块,用于获取所述发送端历史发送的通讯数据的数据参数信息;
判断模块,用于判断所述数据参数信息是否符合预设的参数条件;
触发模块,用于若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
可选地,所述装置还包括时间模块,用于:计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取模块,用于:若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
可选地,所述获取模块,用于:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述判断模块,用于:确定计算得到的所述长度比值中的最大长度比值;若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
可选地,所述判断模块,用于:从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
可选地,所述装置还包括:长度确定模块,用于根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
长度设置模块,用于:若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
可选地,所述长度确定模块,用于:根据所述参数信息确定一目标系数;根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
可选地,所述获取模块,用于:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述长度确定模块,用于:确定计算得到的所述长度比值中的最大长度比值;从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
可选地,所述长度确定模块,用于确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
图11是本公开提供一种切换共享内存区的装置1100。所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述装置1100包括:
获取模块1110,用于获取所述发送端历史发送的通讯数据的数据参数信息;
判断模块1120,用于判断所述数据参数信息是否符合预设的参数条件;
触发模块1130,用于若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
上述技术方案至少能够实现以下技术效果:
通过判断历史发送的通讯数据的数据参数信息是否满足预设的参数条件,进而决定是否切换用于发送端与接收端通讯的共享内存区,这样,能够根据数据参数信息灵活的触发切换共享内存区的操作,使触发切换共享内存区更加符合实际运行需求,进而更加合理的实现运行成本、主机资源利用以及用户使用体检之间的平衡。
可选地,所述装置还包括时间模块,用于:计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取模块,用于:若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
可选地,所述获取模块,用于:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述判断模块,用于:确定计算得到的所述长度比值中的最大长度比值;若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
可选地,所述判断模块,用于:从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
可选地,所述装置还包括:长度确定模块,用于根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
长度设置模块,用于:若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
可选地,所述长度确定模块,用于:根据所述参数信息确定一目标系数;根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
可选地,所述获取模块,用于:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述长度确定模块,用于:确定计算得到的所述长度比值中的最大长度比值;从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
可选地,所述长度确定模块,用于确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
可选地,所述装置还包括时间模块,用于:计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取模块,用于:
若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
图12是本公开提供一种切换共享内存区的装置1200。所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述装置1200包括:
获取模块1210,用于获取所述发送端历史发送的通讯数据的数据参数信息;
长度确定模块1220,用于根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
长度设置模块1230,用于:若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
上述技术方案至少能够达到以下技术效果:
如果得到的待选存储长度比当前正在使用的共享内存区小,那么新分配的共享内存区的长度为所述待选存储长度。这样,可以在保证发送端和接收端数据通讯效率的同时,适当减少对主机的占用。
通过判断待选存储长度未小于所述第一存储长度时,进而判断所述待选存储长度是否大于预设的存储阈值长度。如果未大于预设的存储阈值长度,则按照上述的待选存储长度分配新的共享内存区即可。如果大于存储阈值长度,则仅将新分配的所述第二共享内存区设置为所述存储阈值长度。这样,可以保证共享内存区的长度不会超过用户设定的最大值,从而保证共享内存区对主机内存的占用是可控的,不会对主机性能产生很大的影响。
可选地,所述长度确定模块,用于:根据所述参数信息确定一目标系数;根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
可选地,所述获取模块,用于:针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述长度确定模块,用于:确定计算得到的所述长度比值中的最大长度比值;从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
可选地,所述长度确定模块,用于确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现任一项所述切换共享内存区的方法的步骤。
一种电子设备,包括:存储器,其上存储有计算机程序;处理器,用于执行所述存储器中的所述计算机程序,以实现任一项所述切换共享内存区的方法的步骤。
图13是根据一示例性实施例示出的一种电子设备1300的框图。例如,电子设备1300可以被提供为一服务器。参照图13,电子设备1300包括处理器1322,其数量可以为一个或多个,以及存储器1332,用于存储可由处理器1322执行的计算机程序。存储器1332中存储的计算机程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理器1322可以被配置为执行该计算机程序,以执行上述的切换共享内存区的方法。
另外,电子设备1300还可以包括电源组件1326和通信组件1350,该电源组件1326可以被配置为执行电子设备1300的电源管理,该通信组件1350可以被配置为实现电子设备1300的通信,例如,有线或无线通信。此外,该电子设备1300还可以包括输入/输出(I/O)接口1358。电子设备1300可以操作基于存储在存储器1332的操作***,例如WindowsServerTM,Mac OS XTM,UnixTM,LinuxTM等等。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的切换共享内存区的方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1332,上述程序指令可由电子设备1300的处理器1322执行以完成上述的切换共享内存区的方法。
图14是根据一示例性实施例示出的一种电子设备1400的框图。如图14所示,该电子设备1400可以包括:处理器1401,存储器1402。该电子设备1400还可以包括多媒体组件1403,输入/输出(I/O)接口1404,以及通信组件1405中的一者或多者。
其中,处理器1401用于控制该电子设备1400的整体操作,以完成上述的切换共享内存区的方法中的全部或部分步骤。存储器1402用于存储各种类型的数据以支持在该电子设备1400的操作,这些数据例如可以包括用于在该电子设备1400上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器1402可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(Static Random Access Memory,简称SRAM),电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,简称EPROM),可编程只读存储器(Programmable Read-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。多媒体组件1403可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器1402或通过通信组件1405发送。音频组件还包括至少一个扬声器,用于输出音频信号。I/O接口1404为处理器1401和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件1405用于该电子设备1400与其他设备之间进行有线或无线通信。无线通信,例如Wi-Fi,蓝牙,近场通信(Near FieldCommunication,简称NFC),2G、3G、4G、NB-IOT、eMTC、或其他5G等等,或它们中的一种或几种的组合,在此不做限定。因此相应的该通信组件14014可以包括:Wi-Fi模块,蓝牙模块,NFC模块等等。
在一示例性实施例中,电子设备1400可以被一个或多个应用专用集成电路(Application Specific Integrated Circuit,简称ASIC)、数字信号处理器(DigitalSignal Processor,简称DSP)、数字信号处理设备(Digital Signal Processing Device,简称DSPD)、可编程逻辑器件(Programmable Logic Device,简称PLD)、现场可编程门阵列(Field Programmable Gate Array,简称FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的切换共享内存区的方法。
在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述的切换共享内存区的方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器1402,上述程序指令可由电子设备1400的处理器1401执行以完成上述的切换共享内存区的方法。
以上结合附图详细描述了本公开的优选实施方式,但是,本公开并不限于上述实施方式中的具体细节,在本公开的技术构思范围内,可以对本公开的技术方案进行多种简单变型,这些简单变型均属于本公开的保护范围。
另外需要说明的是,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本公开对各种可能的组合方式不再另行说明。
此外,本公开的各种不同的实施方式之间也可以进行任意组合,只要其不违背本公开的思想,其同样应当视为本公开所公开的内容。
Claims (14)
1.一种切换共享内存区的方法,其特征在于,所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述方法包括:
所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假;
所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述发送端若切换至所述第二共享内存区,将第二标识修改为真;
所述主机在检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件,包括所述主机检测到所述第二标识为真。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
所述第二标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
获取所述发送端历史发送的通讯数据的数据参数信息;
判断所述数据参数信息是否符合预设的参数条件;
若符合预设的参数条件,则生成用于指示切换所述发送端和所述接收端使用的共享内存区的指令。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
计算上一次执行切换所述发送端和所述接收端使用的共享内存区的时刻距离当前时刻之间的目标时长;
所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
若所述目标时长大于预设时长阈值,获取所述目标时长内所述发送端历史发送的通讯数据的数据参数信息。
6.根据权利要求4所述的方法,其特征在于,所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述判断所述数据参数信息是否符合预设的参数条件,包括:
确定计算得到的所述长度比值中的最大长度比值;
若所述最大长度比值大于预设的最大比值阈值,则确定符合预设的参数条件。
7.根据权利要求6所述的方法,其特征在于,所述判断所述数据参数信息是否符合预设的参数条件,还包括:
从小到大排列计算得到的所述长度比值,确定位于第一预设百分位数的第一长度比值;
若所述的最大长度比值不大于预设的最大比值阈值,且所述第一长度比值未处于预设的百分位比值范围,则确定符合预设的参数条件。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;
若所述待选存储长度小于所述第一存储长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;
若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度未大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述待选存储长度;
若所述待选存储长度未小于所述第一存储长度,且所述待选存储长度大于预设的存储阈值长度,则将新分配的所述第二共享内存区设置为所述存储阈值长度。
9.根据权利要求8所述的方法,其特征在于,所述根据所述参数信息,以及所述发送端和所述接收端当前使用的第一共享内存区的第一存储长度,确定待选存储长度;包括:
根据所述参数信息确定一目标系数;
根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度。
10.根据权利要求9所述的方法,其特征在于,所述获取所述发送端历史发送的通讯数据的数据参数信息,包括:
针对每一所述通讯数据,计算所述通讯数据的数据长度与存储长度的长度比值,其中,所述数据参数信息包括所述长度比值;
所述根据所述参数信息确定一目标系数,包括:
确定计算得到的所述长度比值中的最大长度比值;
从小到大排列计算得到的所述长度比值,确定位于第二预设百分位数的第二长度比值;
若所述最大长度比值和所述第二长度比值均未大于预设的浮点阈值,将目标系数设置为所述第二长度比值;
若所述最大长度比值和所述第二长度比值中任一大于所述预设的浮点阈值,将所述目标系数设置为所述最大长度比值与所述浮点阈值的比值。
11.根据权利要求9所述的方法,其特征在于,所述根据所述目标系数与所述第一存储长度的乘积确定所述待选存储长度,包括:
确定所述待选存储长度为所述目标系数与所述第一存储长度的乘积向上取整的值。
12.一种切换共享内存区的装置,其特征在于,所述共享内存区位于主机,所述主机上运行有虚拟的发送端和虚拟的接收端;所述方法包括:
发送模块,用于在所述发送端基于第一共享内存区向所述接收端发送通讯数据时,执行以下操作:
比对所述通讯数据的数据长度和所述第一共享内存区的第一存储长度;
若所述数据长度大于所述第一存储长度,将所述通讯数据的第一子数据段写入所述第一共享内存区,并通知所述接收端从所述第一共享内存区接收所述第一子数据段,其中,所述第一子数据段的数据长度不大于所述第一存储长度;
检测模块,用于所述发送端响应于表征所述接收端完成接收所述第一子数据段的事件,检测第一标识是否为真;其中,所述第一标识在所述主机为所述发送端和所述接收端分配了新的第二共享内存区时被设置为真,所述第一标识在所述主机检测到用于表征所述发送端和所述接收端切换至所述第二共享内存区的事件时被设置为假;
切换模块,用于所述发送端若检测到所述第一标识为真,执行切换至所述第二共享内存区的操作,并基于所述第二共享内存区向所述接收端发送所述通讯数据中除所述第一子数据段以外的数据段。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-11中任一项所述方法的步骤。
14.一种电子设备,其特征在于,包括:
存储器,其上存储有计算机程序;
处理器,用于执行所述存储器中的所述计算机程序,以实现权利要求1-11中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910277300.7A CN111796901A (zh) | 2019-04-08 | 2019-04-08 | 切换共享内存区的方法和装置、存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910277300.7A CN111796901A (zh) | 2019-04-08 | 2019-04-08 | 切换共享内存区的方法和装置、存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111796901A true CN111796901A (zh) | 2020-10-20 |
Family
ID=72805653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910277300.7A Pending CN111796901A (zh) | 2019-04-08 | 2019-04-08 | 切换共享内存区的方法和装置、存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111796901A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256457A (zh) * | 2020-11-06 | 2021-01-22 | 开普云信息科技股份有限公司 | 一种基于共享内存的数据载入加速方法、装置、电子设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853238A (zh) * | 2010-06-01 | 2010-10-06 | 华为技术有限公司 | 通信处理器间消息通信方法和*** |
WO2013110816A2 (fr) * | 2012-01-27 | 2013-08-01 | Tymis | Procédé d'utilisation d'une mémoire partagée |
CN103559075A (zh) * | 2013-10-30 | 2014-02-05 | 华为技术有限公司 | 一种数据传输方法、装置和***及内存装置 |
EP2985718A1 (en) * | 2014-08-15 | 2016-02-17 | Intel Corporation | Technologies for secure inter-virtual-machine shared memory communication |
US20160055107A1 (en) * | 2014-08-19 | 2016-02-25 | International Business Machines Corporation | Data processing apparatus and method |
CN107491354A (zh) * | 2017-07-03 | 2017-12-19 | 北京东土科技股份有限公司 | 一种基于共享内存的虚拟机间通信方法及装置 |
CN108829529A (zh) * | 2018-06-14 | 2018-11-16 | 中国平安人寿保险股份有限公司 | 虚拟机内存共享方法、装置、计算机设备及存储介质 |
CN109508246A (zh) * | 2018-06-25 | 2019-03-22 | 广州多益网络股份有限公司 | 日志记录方法、***和计算机可读存储介质 |
-
2019
- 2019-04-08 CN CN201910277300.7A patent/CN111796901A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853238A (zh) * | 2010-06-01 | 2010-10-06 | 华为技术有限公司 | 通信处理器间消息通信方法和*** |
WO2013110816A2 (fr) * | 2012-01-27 | 2013-08-01 | Tymis | Procédé d'utilisation d'une mémoire partagée |
CN103559075A (zh) * | 2013-10-30 | 2014-02-05 | 华为技术有限公司 | 一种数据传输方法、装置和***及内存装置 |
EP2985718A1 (en) * | 2014-08-15 | 2016-02-17 | Intel Corporation | Technologies for secure inter-virtual-machine shared memory communication |
US20160055107A1 (en) * | 2014-08-19 | 2016-02-25 | International Business Machines Corporation | Data processing apparatus and method |
CN107491354A (zh) * | 2017-07-03 | 2017-12-19 | 北京东土科技股份有限公司 | 一种基于共享内存的虚拟机间通信方法及装置 |
CN108829529A (zh) * | 2018-06-14 | 2018-11-16 | 中国平安人寿保险股份有限公司 | 虚拟机内存共享方法、装置、计算机设备及存储介质 |
CN109508246A (zh) * | 2018-06-25 | 2019-03-22 | 广州多益网络股份有限公司 | 日志记录方法、***和计算机可读存储介质 |
Non-Patent Citations (2)
Title |
---|
刘仁仕: "基于共享内存连接的虚拟机间通信优化机制研究", 中国优秀硕士学位论文全文数据库 信息科技辑, no. 04 * |
孙瑞辰;孙磊;: "PAMM:一种面向基于内存共享的域间通信的优化模型", 计算机科学, vol. 42, no. 2 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256457A (zh) * | 2020-11-06 | 2021-01-22 | 开普云信息科技股份有限公司 | 一种基于共享内存的数据载入加速方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10169089B2 (en) | Computer and quality of service control method and apparatus | |
EP3385835B1 (en) | Method and apparatus for configuring accelerator | |
CN107832100B (zh) | 一种apk插件的加载方法及其终端 | |
US11150949B2 (en) | Resource release method, resource allocation method, devices, and computer program products | |
US11768706B2 (en) | Method, storage medium storing instructions, and apparatus for implementing hardware resource allocation according to user-requested resource quantity | |
EP3879875A1 (en) | Resource change method and device, apparatus, and storage medium | |
US8954702B2 (en) | Extended address volume (EAV) allocation verification | |
JP2020025210A (ja) | リソース割当装置およびリソース割当方法 | |
CN108234551B (zh) | 一种数据处理方法及装置 | |
US10877790B2 (en) | Information processing apparatus, control method and storage medium | |
CN111796901A (zh) | 切换共享内存区的方法和装置、存储介质和电子设备 | |
US10552318B2 (en) | Working set adjustment in a managed environment | |
EP3188026B1 (en) | Memory resource management method and apparatus | |
CN116467235B (zh) | 一种基于dma的数据处理方法、装置、电子设备及介质 | |
CN110489356B (zh) | 信息处理方法、装置、电子设备及存储介质 | |
CN112631994A (zh) | 数据迁移方法及*** | |
CN111796902B (zh) | 切换共享内存区的方法和装置、存储介质和电子设备 | |
CN111796944A (zh) | 切换共享内存区的方法和装置、存储介质和电子设备 | |
CN111857546A (zh) | 用于处理数据的方法、网络适配器和计算机程序产品 | |
CN108874560B (zh) | 进行通信的方法和通信设备 | |
US10992531B2 (en) | Reactive non-blocking input and output for target device communication | |
CN109302353B (zh) | 一种分配报文缓存空间的方法及装置 | |
CN114531351A (zh) | 传输报文的方法、装置、设备及计算机可读存储介质 | |
JP6349786B2 (ja) | 仮想計算機管理装置、仮想計算機管理方法、及び仮想計算機管理プログラム | |
JPWO2014087654A1 (ja) | データ送信装置、データ送信方法、及び記録媒体 |
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 |