CN107145399B - 一种共享内存管理方法及共享内存管理设备 - Google Patents

一种共享内存管理方法及共享内存管理设备 Download PDF

Info

Publication number
CN107145399B
CN107145399B CN201710268053.5A CN201710268053A CN107145399B CN 107145399 B CN107145399 B CN 107145399B CN 201710268053 A CN201710268053 A CN 201710268053A CN 107145399 B CN107145399 B CN 107145399B
Authority
CN
China
Prior art keywords
memory
pbuf
app
read
write operation
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
Application number
CN201710268053.5A
Other languages
English (en)
Other versions
CN107145399A (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.)
XFusion Digital Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201710268053.5A priority Critical patent/CN107145399B/zh
Publication of CN107145399A publication Critical patent/CN107145399A/zh
Application granted granted Critical
Publication of CN107145399B publication Critical patent/CN107145399B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明实施例公开了一种共享内存管理方法及共享内存管理设备,该方法应用于报文零拷贝***中,该报文零拷贝***运行于操作***,该报文零拷贝***包括至少两个应用程序APPs,APPs共享第一包缓存pbuf内存,该方法包括:APPs中的任一应用程序APP设置所述APP对所述第一pbuf内存的读写操作保护属性在当前时刻为只读;若所述APP接收到所述操作***发送的pbuf内存误操作通知消息,则获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息;基于所述pbuf内存误操作现场信息确定内存误操作现场。从而在APP对共享pbuf内存进行误操作时,准确定位产生误操作的问题现场,保障***可靠性。

Description

一种共享内存管理方法及共享内存管理设备
技术领域
本发明涉及通信领域,具体涉及一种共享内存管理方法及共享内存管理设备。
背景技术
网络功能虚拟化(英文:Network Function Virtualization,NFV)***通过软硬件解耦及功能抽象,使网络设备功能不再依赖于专用硬件,资源可以充分灵活共享,实现新业务的快速开发和部署。NFV技术的基础包含云计算技术和虚拟化技术,通用的计算、存储、网络等硬件设备通过虚拟化技术可以分解为多种虚拟资源,以供上层各种应用程序使用。
当在NFV***上运行多个应用程序(英文:Application,APP)时,为了实现在不同的应用进程之间进行报文转发,可以采用共享内存机制的零拷贝技术,也即不同的应用程序共享同一包缓存(英文:packet buffer,pbuf)内存,从而可以避免在不同应用程序之间进行拷贝操作,提升***的性能。但同时使用共享内存机制时,由于各应用程序共享同一pbuf内存,所以破坏了应用程序间的隔离性,导致当出现pbuf内存误操作问题时,无法准确定位内存问题现场。
发明内容
本发明实施例提供了一种共享内存管理方法及共享内存管理设备,以在APP对共享pbuf内存进行误操作时,准确定位产生误操作的问题现场。
第一方面,本发明实施例提供一种共享内存管理方法,该方法应用于报文零拷贝***中,该报文零拷贝***运行于操作***上,该报文零拷贝***包括至少两个应用程序APPs,该APPs的共享内存第一pbuf内存,该方法通过以下步骤进行共享内存管理。首先APPs中的任一应用程序APP设置该APP对第一pbuf内存的读写操作保护属性在当前时刻为只读;然后在APP接收到操作***发送的pbuf内存误操作通知消息时,获取pbuf内存误操作通知消息中的pbuf内存误操作现场信息,该pbuf内存误操作通知消息用于提醒APP对第一pbuf内存进行写操作以及该写操作的具***置;最后APP基于pbuf内存误操作现场信息确定APP对第一pbuf内存进行写操作的内存误操作现场。从而实现在多个APP共享同一pbuf内存的情况下,当该共享pbuf内存出现内存误操作时,能快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性。
在一个可能的设计中,该操作***包括Linux操作***,该Linux操作***包括mprotect内存管理接口,该mprotect内存管理接口用于被调用以设置第一pbuf内存的读写操作属性;从而APP通过调用该mprotect内存管理接口设置APP对第一pbuf内存的读写操作属性在当前时刻为只读。从而通过调用Linux操作***的mprotect内存管理接口可以方便地在Linux操作***下对第一pbuf内存的读写操作属性进行设置。
在一个可能的设计中,mprotect内存管理接口用于被APP调用以基于一个或多个页表设置APP对第一pbuf内存的读写操作属性。从而使得基于页表管理的mprotect内存读写操作管理机制可独立对该第一pbuf内存进行控制。
在一个可能的设计中,该报文零拷贝***还包括第二pbuf内存,APPs的共享内存还包括该第二pbuf内存,其中,该第一pbuf内存为小页内存,该第二pbuf内存为大页内存,该第一pbuf内存与一个或多个页表存在唯一对应关系。APP在预设时刻确定第一pbuf内存为APPs的共享内存,APP在预设时刻之外确定第二pbuf内存为APPs的共享内存。当该预设时刻的频率越小时,则说明进行pbuf内存监控的频率越小,所以此时***可靠性相对较小,而此时使用大页内存第二pbuf内存进行填充的相对次数多,***的性能提升较大;而预设时刻的频率越大,则说明进行pbuf内存监控的频率越大,所以此时***的可靠性相对较大,而此时使用大页内存第二pbuf内存进行填充的相对次数小,***的性能提升较小。故可以根据需求,权衡***的性能提升与可靠性设置该预设时刻。
在一个可能的设计中,该第一pbuf内存还用于缓存轨迹标识,APP还通过该轨迹标识记录第一pbuf内存的轨迹点信息,该轨迹点信息包括所应用程序标识、应用程序当前进程标识以及当前时刻。通过在第一pbuf的轨迹点信息确定的第一pbuf的轨迹,来进一步确定该第一pbuf所经过的上游APP,从而在确定APP对第一pbuf内存进行写操作的内存误操作现场后,可进一步通过该APP的上游APP来进行pbuf内存问题排查,以进一步提高***可靠性。
第一方面,本发明实施例提供一种共享内存管理方法,该方法应用于操作***,该操作***上运行有报文零拷贝***,该报文零拷贝***包括至少两个应用程序APPs,APPs包括第一报文缓存pbuf内存,该方法通过以下步骤实现共享内存管理。首先操作***根据APPs中的任一应用程序APP对第一pbuf内存的读写操作属性设置指示记录APP对第一pbuf内存的读写操作属性为只读;从而当操作***监控到APP对第一pbuf内存进行写操作,操作***向APP发送pbuf内存误操作通知消息,该pbuf内存误操作通知消息用于提醒APP对第一pbuf内存进行写操作以及该写操作的具***置。从而实现在多个APP共享同一pbuf内存的情况下,当该共享pbuf内存出现内存误操作时,能快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性的同时能提高***性能。
在一个可能的设计中,该操作***包括Linux操作***,该Linux操作***包括mprotect内存管理接口,该mprotect内存管理接口用于被APP调用以设置该APP对第一pbuf内存的读写操作属性;在APP通过调用mprotect内存管理接口设置APP对第一pbuf内存的读写操作属性在当前时刻为只读时,Linux操作***记录APP对第一pbuf内存的读写操作属性。从而通过调用Linux操作***的mprotect内存管理接口可以方便地在Linux操作***下对第一pbuf内存的读写操作属性进行设置。
在一个可能的设计中,所述mprotect内存管理接口用于被APP调用以基于一个或多个页表设置APP对第一pbuf内存的读写操作属性。从而使得基于页表管理的mprotect内存读写操作管理机制可独立对该第一pbuf内存进行控制。
在一个可能的设计中,该页表包括读写操作属性标识,操作***通过该页表上的读写操作属性标识记录APP对第一pbuf内存的读写操作属性为只读。从而使得基于页表管理的mprotect内存读写操作管理机制可独立对该第一pbuf内存进行控制。
第三方面,本发明实施例提供一种应用程序APP,该应用程序APP具有实现上述第一方面的方法的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
第四方面,本发明实施例提供一种计算机存储介质,用于储存为上述用于第三方面所述的应用程序APP所用的计算机软件指令,其包含用于执行上述第一方面的方法的程序。
第五方面,本发明实施例提供一种操作***,该操作***具有实现上述第二方面的方法的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。
第六方面,本发明实施例提供一种计算机存储介质,用于储存为上述用于第五方面所述的操作***所用的计算机软件指令,其包含用于执行上述第二方面的方法的程序。
第七方面,本发明实施例提供一种共享内存管理装置,该共享内存管理装置包括存储有可执行程序代码的存储器,以及与所述存储器耦合的处理器;所述处理器上运行有应用程序APP与操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APP为所述APPs中的任一APP,所述APP用于执行本发明第一方面的方法流程。
第八方面,本发明实施例提供一种共享内存管理装置,该共享内存管理装置包括存储有可执行程序代码的存储器,以及与所述存储器耦合的处理器;所述处理器上运行有应用程序APP和操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一报文缓存pbuf内存,所述APP为所述APPs中的任一APP,所述操作***用于执行本发明第二方面的方法流程。
第九方面,本发明实施例提供一种共享内存管理设备,该共享内存管理设备包括处理器和存储器。该处理器上运行第三方面的应用程序APP和第五方面的操作***,该处理器被配置为支持应用程序APP以及操作***执行本发明实施例所提供的共享内存管理方法。该存储器用于与处理器耦合,用于存储应用程序APP必要的程序代码和数据,以及用于存储操作***必要的程序代码和数据。
相较于现有技术,本发明实施例的方案中在多个APP共享同一pbuf内存的情况下,通过设置APP对第一pbuf内存的读写操作属性为只读,从而在操作***监控到APP对第一pbuf进行写操作时,操作***向APP发送pbuf内存误操作通知消息,以使APP基于该pbuf内存误操作通知消息快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1是本发明实施例提供的一种网络功能虚拟化***的架构示意图;
图2是本发明实施例提供的另一种NFV***的架构示意图;
图3是本发明实施例提供的又一种NFV***的架构示意图;
图4是本发明实施例提供的一种报文零拷贝***的架构示意图;
图5是本发明实施例提供的一种共享内存管理方法的流程示意图;
图6是本发明实施例提供的一种APP进程间第一pbuf内存管理流程示意图;
图7是本发明实施例提供的一种报文零拷贝流程以及第一pbuf内存管理流程示意图;
图8-a是本发明实施例提供的另一种报文零拷贝***的架构示意图;
图8-b是本发明实施例提供的另一种报文零拷贝流程以及pbuf内存管理流程示意图;
图9是本发明实施例提供的一种应用程序APP的结构示意图;
图10是本发明实施例提供的一种操作***的结构示意图;
图11为本发明实施例提供的一种共享内存管理装置的结构示意图;
图12为本发明实施例提供的另一种共享内存管理装置的结构示意图;
图13为本发明实施例提供的一种共享内存管理设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
为了更好地理解本发明技术方案,下面首先对本发明实施例所基于的应用场景进行说明。
首先参见图1,图1是本发明实施例提供的一种网络功能虚拟化***NFV100的架构示意图。如图1所示,该NFV***包括硬件层110,管理程序(英文:Hyperviser)层120,操作***(英文:OperSystem,OS)层130、应用程序(英文:application,APP)层140,其中,操作***层130和各个应用程序构成虚拟机(英文:Virtual Machine,VM)。
其中,硬件层110为虚拟化环境运行的硬件平台,该硬件层110可以由一台或多台服务器组成;管理程序120直接安装在硬件计算资源上,用于管理和调用硬件资源,不需要底层操作***,也即可以理解管理程序为一个很薄的操作***;操作***层130包括一个或多个操作***,是运行在管理程序上的访问操作***(英文:Guest OS),在本发明实施例中,该操作***可以为Linux操作***或其它操作***;应用程序层140包括一个或多个应用程序模块,是运行在访问操作***上的应用,为客户提供服务。
参见图2,图2是本发明实施例提供的另一种NFV***的架构示意图。如图2所示,该NFV***包括硬件层210,宿主机(英文:host)层220,管理程序层230,访问操作***(英文:guest)240、APP层250。其中,图2所示的NFV***架构与图1所示的网络功能虚拟化***架构不同之处在于,在图2所示的网络功能虚拟化***架构中,通过增加host层220,该host层可用于安装基础操作***,从而使管理程序层230运行在基础操作***上,构建出一整套虚拟硬件平台,使用者根据需要在guest层上安装新的操作***和应用软件,host层和guest层上的操作***可以完全无关。在本发明实施例中,该host层的操作***可以为Windos操作,该guest层上的操作***可以为Linux操作***。
参见图3,图3是本发明实施例提供的又一种NFV***的架构示意图。在图3所示的网络功能虚拟化***中,包括网络功能虚拟化基础设施层(英文:NFV Infrastructure,NFVI)310、虚拟网络功能(英文:Virtual Network Functions,VNFS)320、操作/业务支持***(英文:Operation Support System/Business Support System,OSS/BSS)330以及网络功能虚拟化管理和编排***(英文:NFV Management and Orchestration,NFV MANO)340。
其中,虚拟化基础设施层310包括硬件资源层,虚拟化层以及虚拟资源层,VNFS320包括多个VNF以及多个网元管理器(英文:Element Manager,EM),可以为用户提供不同的虚拟网络功能。相对于图1或图2所示的架构,可以认为图1或图2中的APP部署于图3中的VNF。
其中,NFV MANO包括网络功能虚拟化编排器(英文:NFV Orchestrator,NFVO)、一个或多个虚拟化网络功能管理器(英文:VNF Manager,VNFM)和虚拟化基础设施管理器(英文:Virtualized Infrastructure Manager,VIM),网络服务目录(英文:Network ServiceCatalogue,NS Catalogue),用于负责对整个NFVI资源的管理和编排,负责业务网络和NFVI资源的映射和关联,负责OSS业务资源流程的实施等,MANO通过解析产品提供的虚拟网络功能描述符(英文:VNF Descriptor,VNFD)文件实现虚拟机的创建、网元的安装、亲和及反亲和的配置、***扩缩容等操作。
参见图4,图4是本发明实施例提供的一种报文零拷贝***400的架构示意图,如图4所示,该报文零拷贝***400包括N个APP,也即包括APPs,分别为APP1,APP2,···APPn,第一网卡和第一网卡队列,第二网卡和第二网卡队列,以及一个报文缓存pbuf内存。其中,不同的APP属于不同的业务进程,该pbuf内存由N个APP共享。
在本发明实施例中,该N个APP可以为上述图1和图2中运行于同一个VM的APP,也可以为图3中的VNF,也可以为运行于物理计算机中的不同应用程序。
在本发明实施例中,该报文零拷贝***可运行于物理计算机上的操作***上,也可以运行于NFV***中的操作***上。
值得说明的是,该APP可以为一个独立的功能模块,用于执行特征的功能,例如,可以为用于执行传输层处理功能的APP、或用于执行应用层处理功能的APP,或也可以为一个独立函数编写的功能模块。
可选地,在本发明的一个实施例中,该多个APP可以为不同的进程;也可以为同一个进程中的不同线程。不管该多个APP处于不同的进程,还是处于同一个进程中的不同线程,只要该多个APP共享同一pbuf内存,并利用该pbuf内存在该多个APP之间进行报文转发的场景均为本发明实施例所提供的应用场景。
在本发明实施例中,上述第一网卡和第二网卡可以为虚拟网卡(英文:virtualnetwork card,VNIC),也可以为物理网卡。
在本发明实施例中,当利用该报文零拷贝***进行零拷贝报文转发时,首先APP1进程往第一网卡队列中填充pbuf内存的直接内存存储(英文:Direct Memory Access,DMA)地址后,第一网卡往该pbuf内存地址中填充报文,然后APP1从第一网卡队列中收包该报文至pbuf内存,并将该报文依次经过多个APP进程进行处理,最后APPn处理完毕后,第二网卡再往第二网卡队列中填充该pbuf内存地址,APPn将该报文填充至第二网卡队列的pbuf内存地址,然后第二网卡从该第二网卡队列中回收该报文并发送出去。当第二网卡发送报文后,APPn收回该pbuf内存至内存池。可以看出,该报文零拷贝***通过pbuf内存共享内存,实现在不同的APP之间的报文转发,从而实现报文零拷贝。
但同时,基于该报文零拷贝***,由于不同的APP共享同一个pbuf内存,所以破坏了不同的APP进程间的隔离性,当跨进程操作时出现pbuf内存问题时,无法找到出现pbuf内存问题所在的APP与具***置(例如,当pbuf内存出现问题时,无法确定是n个APP中具体哪个APP发生误操作问题),也即无法定位问题第一现场,导致业务恢复周期长。
为了解决上述问题,本发明实施例提出了一种共享内存管理方法,通过设置pbuf内存的读写操作属性,以在pbuf内存发生误操作时,获取到产生该pbuf内存误操作的内存误操作现场,增强报文零拷贝***可靠性。
下面对本发明实施例进行详细说明。参见图5,图5是本发明实施例提供的一种共享内存管理方法的流程示意图,该共享内存管理方法应用于图4所示的零拷贝***,该报文零拷贝***运行于操作***,如图5所示,该方法可以包括以下步骤:
S501、APPs中的任一应用程序APP设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读,所述操作***记录所述APP对所述第一pbuf内存的读写操作属性。
在本发明实施例中,该至少两个应用程序为图4所示的APPs,该至少两个应用程序中的任一应用程序APP可以为APP1至APPn间的任一应用程序,例如,APP1,APP2,APPn。
其中,第一pbuf内存的读写操作属性是指为了对共享内存第一pbuf进行管理,防止多个应用程序同时对第一pbuf进行写操作而产生内存问题,由各APP所设置的该APP对第一pbuf在某时刻所应当执行的读写操作,从而当APP对第一pbuf内存执行了读写操作属性以外的操作时,操作***则认为是内存误操作。
在本发明实施例中,该读写操作属性包括只读、读写、以及只写。当设置APP对第一pbuf内存的读写操作属性为只读时,而此时APP对第一pbuf内存执行了写操作,此时操作***认为APP对第一pbuf内存误操作;当设置APP对第一pbuf内存为读写时,也即此时APP对第一pbuf内存执行读操作或者写操作,操作***均不会监控为内存误操作;当设置APP对第一pbuf内存为只写时,从而此时当APP对第一pbuf内存执行了读操作,操作***认为APP对第一pbuf内存误操作。值得说明的是,对于读写操作属性为读写时,也可进一步在APP对第一pbuf内存执行读操作的情况下,确定此时的读写操作属性为只读,在APP对第一pbuf内存执行写操作的情况下,确定此时的读写操作属性为只写。
可选地,在本发明的一个实施例中,当APP通过第一pbuf内存接收到报文并进行处理时,此时该APP设置对第一pbuf内存的读写操作属性为读写,而在其它时刻APP对该第一pbuf内存的读写操作属性为只读,例如,当APP未接收到报文时,或者当APP将报文处理完毕并发送至其它APP后,APP对该第一pbuf内存的读写操作属性均为只读。
具体地,在本发明的一个实施例中,当APP通过第一pbuf内存接收到预设报文并处理时,此时该APP将对该第一pbuf内存的读写操作属性设置为读写,而其它APP对该第一pbuf内存的读写操作属性为只读,当APP将该预设报文发送给其它APP后,此时将收回该写操作属性,也即此时APP对该预设报文的读写操作属性将重设置为只读。当各APP设置好对第一pbuf内存的读写操作属性后,后续该零拷贝***所运行的操作***监控到存在APP对第一pbuf内存的误操作时,将发出pbuf内存误用通知消息,以提示用户第一pbuf内存出现问题,从而通过该方式可以实现对第一pbuf内存的管理。
举例说明,在本发明的一个示例中,具体参见图6,图6是本发明实施例提供的一种APP进程间第一pbuf内存管理流程示意图。在报文在APP1、APP2以及APP3之间进行转发的情况下,当APP1在时刻1通过第一pbuf内存接收到报文并进行处理,此时APP1对第一pbuf内存的读写操作属性设置为读写;当APP1将报文发送至APP2进程后,APP2在时刻2接收到该报文,此时APP2对第一pbuf内存的读写操作属性将设置为读写,而此时APP1将收回第一pbuf内存的写操作,也即此时APP1对第一pbuf内存的读写操作属性将为只读。在这两个时刻,APP3未对报文进行处理,所以APP3对该第一pbuf内存的读写操作属性一直设置为只读。
更进一步地,参见图7,图7是本发明实施例提供的一种报文零拷贝流程以及第一pbuf内存管理流程示意图。当利用该报文零拷贝***进行零拷贝报文转发时,首先APP1、APP2和APP3将对第一pbuf内存的读写操作属性均设置为只读。APP1往第一网卡队列填充DMA地址,也即第一pbuf内存地址,第一网卡将报文收包之后将该报文写入第一网卡队列中,然后APP1使用第一pbuf内存从第一网卡队列中收包该报文,此时APP1将对该第一pbuf内存的读写操作属性设置为读写;当APP1对第一pbuf内存中的报文处理完毕后,将该报文发送至APP2,此时APP1收回该第一pbuf内存的写操作属性,也即此时APP1进程对该第一pbuf内存的读写操作属性为只读,而此时APP2将设置对该第一pbuf内存的读写操作属性为读写;当APP2对该报文处理完毕后,再依次发往下一个APP,各APP的第一pbuf内存的读写操作属性设置方式同上步骤。当报文转发到APPn后,APPn对第一pbuf内存的读写操作属性为读写,当APPn对报文进行处理后,APPn将该报文发送给APP1,并收回写操作属性。此时APP1接收到该报文后,APP1重新设置对第一pbuf内存的读写操作属性为读写,最后APP1将报文发送至第二网卡队列,然后第二网卡将报文第二网卡队列中取出,完成整个网卡收发包流程。需要说明的是,在图7所示的流程中,由APP1统一管理网卡的收发包。
具体地,在本发明的一个实施例中,当各APP运行在Linux操作***时,Linux操作***包括mprotect内存管理接口,该mprotect内存管理接口用于设置所述第一pbuf内存的读写操作属性,也即当APP在处理第一pbuf内存报文时,APP通过调用mprotect内存管理接口设置APP对该第一pbuf内存的读写操作属性为读写,其它APP则通过调用mprotect内存管理接口设置对该第一pbuf的读写操作属性为只读,此时Linux操作***将记录APP对第一pbuf内存的读写操作属性。一旦读写操作属性为只读的APP对第一pbuf内存进行写操作时,Linux***可以立即侦听到该内存误操作,然后Linux操作***产生段错误信号segmentfault,用于提示APP对第一pbuf的内存进行了误操作了,然后该APP即可通过该错误信息提示打印出调用栈信息来确定异常的上下文第一现场。可以理解,通过调用Linux操作***的mprotect内存管理接口可以方便地在Linux操作***下对第一pbuf内存的读写操作属性进行设置。
可选地,在本发明的一个实施例中,由于mprotect内存管理接口是基于页表进行管理的,也即同一页表上所对应内存的读写操作属性将同时进行设置,具体地,各页表包括读写操作属性标识,从而操作***记录APP对第一pbuf内存的读写操作属性为只读时,可以通过在该页表上的读写操作属性标识上记录APP对第一pbuf内存的读写操作属性为只读。由于各页表对应一个读写操作属性标识,也即各页表通过该读写操作属性标识来统一设置该页表所对应pbuf内存的读写操作属性。故当基于mprotect内存读写操作管理机制进行内存读写操作管理时,为了使在由mprotect内存读写操作管理机制对第一pbuf内存的读写操作属性进行设置时,不至于干扰到该页表上的其它内存的读写操作属性,所以需要使该页表与第一pbuf内存存在唯一的对应关系,也即该第一pbuf内存对应的一个页表或多个页表由mprotect内存读写操作管理机制独立进行控制,此时与该第一pbuf内存对应的一个或多个页表的读写操作属性标识将同时进行设置为只读或者读写。
可选地,在本发明的一个实施例中,该页表可以为普通的4K比特的页表,例如第一pbuf内存大小为4K比特以内大小时,该第一pbuf内存对应一个页表,此时mprotect内存读写操作管理机制通过独立设置控制该页表以对第一pbuf内存的读写操作属性进行独立控制,具体地,可以通过设置该页表的读写操作属性标识来设置各APP对该第一pbuf的读写操作属性,或者如果第一pbuf内存大小为8K比特时,该第一pbuf内存对应连续两个页表,此时mprotect内存读写操作管理机制可通过同时控制该两个页表以对第一pbuf内存的读写操作属性进行独立控制,具体地,可以通过同时设置该2个页表的读写操作属性标识为相同(同时为只读或者同时为读写)来独立控制第一pbuf内存的读写操作属性。可以理解,通过使得第一pbuf内存独立于其它pbuf内存与页表唯一对应,使得基于页表管理的mprotect内存读写操作管理机制可独立对该第一pbuf内存进行控制。
可选地,在本发明的一个实施例中,所述报文零拷贝***还包括第二pbuf内存,所述APPs的共享内存还包括第二pbuf内存,报文零拷贝***在使用共享内存进行零拷贝时,APP可在预设时刻确定所述第一pbuf内存为所述APPs的所述共享内存,所述APP在预设时刻之外确定所述第二pbuf内存为所述APPs的共享内存,所述第一pbuf内存为小页内存,所述第二pbuf内存为大页内存,所述第一pbuf内存与所述一个或多个页表存在唯一对应关系。
其中,大页内存是指通过增加页表大小来减少页表数量,提高***性能,在大页内存下,每个页表大小可以1G比特或更大,而如果APPs的共享内存大小仅4K比特时,此时每个页表将对应多个pbuf内存。小页内存是与大页内存相对的概念,小页内存下,每个页表的大小可为普通4K比特大小的页表或8K比特大小的页表。
可选地,在本发明的一个实施例中,预设时刻是指APP基于预设规则确定的,例如,可以是基于预设采样周期确定的,从而APP在预设采样周期对应的预设时刻使用第一pbuf内存,在预设采样周期之外的时刻使用第二pbuf内存;又例如,也可以是在报文零拷贝***即将处理的报文的类型是预设类型时,使用第一pbuf内存保存该报文(即确定当前时刻为预设时刻),在报文零拷贝***即将处理的报文的类型是其它类型时,使用第二pbuf内存保存该报文(即确定当前时刻为预设时刻之外),从而可基于报文零拷贝***当前将处理的报文类型确定预设时刻。
具体地,在本发明的一个实施例中,由于在4K比特页表下,***性能比较低,而如果将该pbuf内存设置为大页内存,此时将存在多个pbuf内存对应同一个页表的情况,如果对当前的pbuf内存的读写操作进行管理时,将错误地管理到同一页表的其它pbuf内存,造成***功能异常。所以,在保证***性能与防止***功能异常的情况下,可以通过增加第二pbuf内存,设置该第二pbuf内存为大页内存,从而APP可通过第一pbuf内存或第二pbuf内存接收并处理预设报文,提升***性能。例如可参见图8-a,图8-a是本发明实施例提供的另一种报文零拷贝***的架构示意图。但由于第二pbuf内存为大页内存,Linux操作***并不对该第二pbuf内存进行读写操作管理,只对第一pbuf内存进行读写操作管理。可设置第一pbuf内存的预设采样周期,APP进程在预设采样周期对应的采样时刻填充第一pbuf内存,然后通过对该第一pbuf内存进行读写操作管理,保证***可靠性。例如,在设置第一pbuf内存的预设采样周期为1000的情况下,每填充999个第二pbuf内存,填充一个第一pbuf内存,Linux对该第一pbuf内存进行读写操作管理以保证***可靠性,同时由于在1000个pbuf内存中有999个采用的是大页内存的第二pbuf内存,所以可保证***的高性能。
值得说明的是,通过设置APP使用第一pbuf内存的预设时刻,当该预设时刻的频率越小时,则说明进行pbuf内存监控的频率越小,所以此时***可靠性相对较小,而此时使用大页内存第二pbuf内存进行填充的相对次数多,***的性能提升较大;而预设时刻的频率越大,则说明进行pbuf内存监控的频率越大,所以此时***的可靠性相对较大,而此时使用大页内存第二pbuf内存进行填充的相对次数小,***的性能提升较小。故可以根据需求,权衡***的性能提升与可靠性设置该预设时刻。
更进一步地,参见图8-b,图8-b是本发明实施例提供的另一种报文零拷贝流程以及pbuf内存管理流程示意图。图8-b所示的流程为基于图8-a所示的零报文拷贝***执行的,也即包括两个pbuf内存:第一pbuf内存与第二pbuf内存。由于第一pbuf内存与页表一一对应,第二pbuf内存为大页内存,所以设置预设采样周期对第一pbuf内存进行采样填充,并仅使用mprotect内存读写操作管理机制对第一pbuf内存进行读写操作管理,对于第二pbuf内存则不进行内存读写操作管理。并且图8-b所示的流程由APP1统一管理网卡的收发包。如图8-b所示,首先APP1、APP2和APP3将第一pbuf内存的读写操作属性均设置为只读。APP1往第一网卡队列中填充DAM地址时,当不为预设采样周期时,使用第二pbuf内存的DMA地址填充第一网卡队列,从而后续APP1通过第二pbuf内存从第一网卡队列读取报文并处理;当为预设采样周期时,使用第一pbuf内存的DMA地址填充第一网卡队列,从而当APP1通过第一pbuf内存从第一网卡队列读取报文后,由于第一pbuf内存为需要进行读写操作属性设置的采样pbuf内存,所以APP1设置第一pbuf内存的读写操作属性为读写,并处理报文,当处理完报文后,APP1收回第一pbuf内存的写操作属性,并将该报文发往APP2。
APP2收到APP1发送的报文时,判断该pbuf内存是否为采样第一pbuf内存,在判断为否的情况下,不进行读写操作属性设置直接处理,在判断为是的情况下,设置该第一pbuf内存的读写操作属性为读写,并处理报文,当处理完报文后,APP2收回第一pbuf内存的写操作属性,并将该报文发往APP3。
APP3收到APP2发送的报文时,判断该pbuf内存是否为采样第一pbuf内存,在判断为否的情况下,不进行读写操作属性设置直接处理,在判断为是的情况下,设置该第一pbuf内存的读写操作属性为读写,并处理报文,当处理完报文后,APP3收回第一pbuf内存的读操作属性,并将该报文发往APP1。
APP1收到该报文后,在判断为第二pbuf内存的情况下,此时不进行读写操作属性设置,处理完报文后将报文发送至第二网卡队列并回收该第二pbuf内存至pbuf内存池。在判断为第一pbuf内存的情况下,此时设置该第一pbuf内存的读写操作属性为读写,并处理报文,然后再将报文发送到第二网卡队列,以及从第二网卡队列中回收该第一pbuf内存至pbuf内存池,同时收回第一pbuf内存的写操作属性。从而完成整个报文零拷贝过程。
S502、在操作***监控到APP对第一pbuf内存进行写操作的情况下,操作***向APP发送pbuf内存误操作通知消息,此时APP接收到操作***发送的pbuf内存误操作通知消息,并获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息,所述pbuf内存误操作通知消息用于指示所述APP对所述第一pbuf内存进行写操作以及所述写操作的具***置。
可选地,在本发明的一个实施例中,该pbuf内存误操作现场信息包括调用栈信息。
具体地,在本发明的一个实施例中,当操作***监测到第一pbuf内存为只读时,APP对该第一pbuf内存进行了写操作,然后操作***将向该APP发送pbuf内存误操作通知消息,例如,该pbuf内存误操作通知消息可为段错误信号segment fault,然后APP通过该段错误信号segmentfault打印出来调用栈信息,从而进一步地,该APP可以根据该调用栈信息确定导致内存错误的具***置,以及使得APP可以根据该具***置修复导致内存错误的问题。
可选地,在本发明的一个实施例中,所述第一pbuf内存还用于缓存轨迹标识,所述APP接收到pbuf内存误操作通知消息后,APP还可以通过该第一pbuf内存的轨迹标识记录第一pbuf内存的轨迹点信息,该轨迹点信息包括应用程序APP标识、应用程序当前进程标识以及当前时刻,其中,APP标识用于指示在某个时刻使用该第一pbuf内存的APP,应用程序当前进程标识指示在某个时刻使用该第一pbuf内存的APP进程。
在本发明实施例中,轨迹点信息是指使用该第一pbuf内存的APP的相关信息,从而将使用该第一pbuf的APP的相关信息按时间顺序衔接则构成第一pbuf内存的轨迹点信息。
具体地,在本发明实施例中,可以通过轨迹标识来记录轨迹点信息,其中,该轨迹标识可以是指第一pbuf内存中用于保存报文的内存空间,从而可以利用该剩余内存空间来记录第一pbuf的轨迹点信息。
举例说明,在本发明的一个示例中,参见图4。当APP1进程在第一时刻接收并处理第一pbuf内存报文时,APP1进程在第一pbuf内存的剩余内存空间中记录此时的轨迹点信息,也即APP1标识、APP2进程标识以及第一时刻;然后当APP1将第一内存报文发送至APP2后,APP2进程在第二时刻接收并处理第一pbuf内存报文时,APP2进程再更一步在该第一pbuf内存的剩余空间中记录此时的轨迹点信息,也即APP2标识、APP2进程标识以及第二时刻;依次记录第一pbuf内存所经过的所有的轨迹点信息,从而在APPn当中将包括第一pbuf内存从APP1到APPn的所有轨迹点信息,将该所有轨迹点信息根据时间先后即可得到第一pbuf内存所经过的轨迹。更进一步地,还可以记录零拷贝***中的第一pbuf内存经过第一网卡队列以及第二网卡队列的轨迹。
可以理解,当记录到第一pbuf的轨迹点信息后,则可以当在某个APP发生误用写操作时,可以通过在第一pbuf的轨迹点信息确定的第一pbuf的轨迹,来进一步确定该第一pbuf所经过的上游APP,以进一步提高***可靠性。
S503、APP基于所述pbuf内存误操作现场信息确定所述APP对所述pbuf内存进行写操作的内存误操作现场。
更进一步地,在本发明的一个实施例中,可以基于该内存误操作现场进行业务恢复。
举例说明,在本发明的一个示例中,在报文零拷贝***工作时,并且第一pbuf内存发送至APP3,此时APP2通过调用mprotect内存管理接口设置APP2对第一pbuf内存的读写操作属性为只读,APP2将接收到***发送的pbuf内存误操作通知消息,例如段错误信号,然后APP2基于该段错误信号打印调用栈信息,并由APP2基于该调用栈信息确定产生对第一pbuf进行写操作的位置,也即产生误写操作的代码位置,从而可使得APP基于该位置修复该问题,防止后续APP2对第一pbuf内存进行误写操作。通过设置各APP对第一pbuf内存的读写操作属性,从而在第一pbuf内存运行至APP3时,在APP2对该第一pbuf内存进行了写操作的情况下,***能通过pbuf内存误操作通知消息提醒APP2,以使得APP2可以及时定位并修改该第一pbuf内存问题,保证***可靠性,并且也使得此刻正操作第一pbuf内存的APP3不至于浪费资源去进行pbuf内存问题排查,也进一步提高了***性能。
更进一步地,APP可在对第一pbuf内存进行误写操作时,记录下APP对第一pbuf内存进行写操作之前该第一pbuf内存相应位置所存储的数值,从而当APP对第一pbuf内存进行误写时,可将该第一pbuf内存相应位置的数值恢复至误写之前的数值,以进一步提高***可靠性与***性能,也提高了***鲁棒性。
更进一步地,通过记录第一pbuf内存的轨迹点信息,在确定APP对第一pbuf内存进行写操作的内存误操作现场后,可进一步通过该APP的上游APP来进行pbuf内存问题排查,进一步提高***可靠性。
值得说明的是,上述方法实施例不仅可用于当APP对第一pbuf内存的读写操作属性设置为只读时,对第一pbuf内存进行内存误操作的监控。当APP对第一pbuf内存的读写操作属性设置为只写,以及当APP对第一pbuf内存的读写操作属性设置为读写时的读状态以及写状态时,同样可使用上述方式对第一pbuf内存进行内存误操作的监控,具体地,可根据读写操作属性所对应的操作范围对上述方法的使用进行适应调整。
值得说明的是,上述步骤S501、步骤S502和步骤S503在实际执行时也可以同步并行执行,本发明实施例并不对其执行顺序进行严格限制。
可以看出,本发明实施例的方案中,当运行于操作***的零拷贝***中由APPs共享第一pbuf内存时,该APPs中的任一APP设置该APP对第一pbuf内存的读写操作属性在当前时刻为只读时,操作***记录该APP对第一pbuf内存的读写操作属性;然后在操作***监控到该APP对第一pbuf内存进行写操作时,操作***向该APP发送pbuf内存误操作通知消息,该APP接收到操作***发送的pbuf内存误操作通知消息后,获取该pbuf内存误操作通知消息中的pbuf内存误操作现场信息,该pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作以及该写操作的具***置;最后该APP再基于该pbuf内存误操作现场信息确定APP对第一pbuf内存进行写操作的内存误操作现场。从而实现在多个APP共享同一pbuf内存的情况下,当该共享pbuf内存出现内存误操作时,能快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性的同时能提高***性能。
更进一步地,可以基于该pbuf内存误操作现场进行业务恢复,更一步保障***可靠性。
参见图9,图9是本发明实施例提供的一种应用程序APP的结构示意图,用于实现本发明实施例公开的共享内存管理方法。其中,该APP应用于报文零拷贝***中,所述报文零拷贝***运行于操作***上,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APP为所述APPs中的任一APP。如图9所示,本发明实施例提供的一种APP包括:
设置模块910、获取模块920以及确定模块930。
设置模块910,用于设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读。
获取模块920,用于在接收到所述操作***发送的pbuf内存误操作通知消息的情况下,获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息,所述pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作的具***置。
确定模块930,用于基于所述pbuf内存误操作现场信息确定所述APP对所述第一pbuf内存进行写操作的内存误操作现场。
可选地,在本发明的一个实施例中,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被调用以设置所述第一pbuf内存的读写操作属性;所述设置模块910具体用于:
通过调用所述mprotect内存管理接口设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读。
可选地,在本发明的一个实施例中,所述mprotect内存管理接口用于被所述APP调用以基于一个或多个页表设置所述APP对所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,所述报文零拷贝***还包括第二pbuf内存,所述APPs共享所述第二pbuf内存,所述APP配置为在预设采样周期对应的采样时刻采样所述第一pbuf内存,所述APP配置为在所述采样时刻之外采样所述第二pbuf内存。
可选地,在本发明的一个实施例中,所述报文零拷贝***还包括第二pbuf内存,所述APPs的共享内存包括所述第二pbuf内存,所述确定模块930还用于所述APPs中的任一应用程序APP设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读息之前,在预设时刻确定所述第一pbuf内存为所述APPs的所述共享内存,所述APP在预设时刻之外确定所述第二pbuf内存为所述APPs的共享内存,所述第一pbuf内存为小页内存,所述第二pbuf内存为大页内存,所述第一pbuf内存与所述一个或多个页表存在唯一对应关系。
可选地,在本发明的一个实施例中,APP900还包括记录模块940,用于通过所述轨迹标识记录所述第一pbuf内存的轨迹点信息,所述轨迹点信息包括所述应用程序标识、所述应用程序当前进程标识以及所述当前时刻。
可以看出,本发明实施例的方案中,当运行于操作***的零拷贝***中由APPs共享第一pbuf内存时,该APPs中的任一APP设置该APP对第一pbuf内存的读写操作属性在当前时刻为只读时,操作***记录该APP对第一pbuf内存的读写操作属性;然后在操作***监控到该APP对第一pbuf内存进行写操作时,操作***向该APP发送pbuf内存误操作通知消息,该APP接收到操作***发送的pbuf内存误操作通知消息后,获取该pbuf内存误操作通知消息中的pbuf内存误操作现场信息,该pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作以及该写操作的具***置;最后该APP再基于该pbuf内存误操作现场信息确定APP对第一pbuf内存进行写操作的内存误操作现场。从而实现在多个APP共享同一pbuf内存的情况下,当该共享pbuf内存出现内存误操作时,能快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性的同时能提高***性能。
更进一步地,可以基于该pbuf内存误操作现场进行业务恢复,更一步保障***可靠性。
在本实施例中,应用程序APP900是以模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。
可以理解的是,本实施例的应用程序APP900的各功能单元的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
参见图10,图10是本发明实施例提供的一种操作***的结构示意图,用于实现本发明实施例公开的共享内存管理方法。其中,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一报文缓存pbuf内存,如图10所示,本发明实施例提供的一种操作***1000包括:
记录模块1010以及发送模块1020。
其中,记录模块1010,用于根据所述APPs中的任一应用程序APP对所述第一pbuf内存的读写操作属性设置指示记录所述APP对所述第一pbuf内存的读写操作属性为只读;
发送模块1020,用于在所述操作***监控到所述APP对所述第一pbuf内存进行写操作的情况下,所述操作***向所述APP发送pbuf内存误操作通知消息,所述pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作的具***置。
可选地,在本发明的一个实施例中,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被所述APP调用以设置所述APP对所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,所述mprotect内存管理接口用于被所述APP调用以基于一个或多个页表设置所述APP对所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,所述页表包括读写操作属性标识,所述记录模块1010记录所述APP对所述第一pbuf内存的读写操作属性为只读包括:
通过所述读写操作属性标识记录所述APP对所述第一pbuf内存的读写操作属性只读。
可以看出,本发明实施例的方案中,当运行于操作***的零拷贝***中由APPs共享第一pbuf内存时,该APPs中的任一APP设置该APP对第一pbuf内存的读写操作属性在当前时刻为只读时,操作***记录该APP对第一pbuf内存的读写操作属性;然后在操作***监控到该APP对第一pbuf内存进行写操作时,操作***向该APP发送pbuf内存误操作通知消息,该APP接收到操作***发送的pbuf内存误操作通知消息后,获取该pbuf内存误操作通知消息中的pbuf内存误操作现场信息,该pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作以及该写操作的具***置;最后该APP再基于该pbuf内存误操作现场信息确定APP对第一pbuf内存进行写操作的内存误操作现场。从而实现在多个APP共享同一pbuf内存的情况下,当该共享pbuf内存出现内存误操作时,能快速并准确地定位产生该pbuf内存误操作的APP以及具***置,即确定pbuf内存误操作现场,保障***可靠性的同时能提高***性能。
更进一步地,可以基于该pbuf内存误操作现场进行业务恢复,更一步保障***可靠性。
在本实施例中,操作***1000是以模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。
可以理解的是,本实施例的操作***1000的各功能单元的功能可根据上述方法实施例中的方法具体实现,其具体实现过程可以参照上述方法实施例的相关描述,此处不再赘述。
参见图11,图11为本发明实施例提供的一种共享内存管理装置的结构示意图,如图11所示,该共享内存管理设备1100包括:
存储有可执行程序代码的存储器1101与所述存储器耦合的处理器1102。该存储器1101可以独立存在,通过总线与处理器1102相连接。存储器1101也可以和处理器1102集成在一起。其中,所述处理器1102可以为中央处理器(Central Processing Unit,CPU),所述处理器1102上运行有应用程序APP与操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APP为所述APPs中的任一APP。
所述APP用于:设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读;在所述APP接收到所述操作***发送的pbuf内存误操作通知消息的情况下,获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息,所述pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作的具***置;基于所述pbuf内存误操作现场信息确定所述APP对所述第一pbuf内存进行写操作的内存误操作现场。
可选地,在本发明的一个实施例中,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被调用以设置所述第一pbuf内存的读写操作属性;
所述设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读,包括:
通过调用所述mprotect内存管理接口设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读。
可选地,在本发明的一个实施例中,所述mprotect内存管理接口用于被所述APP调用以基于一个或多个页表设置所述APP对所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,在所述设置所述APP对所述第一pbuf内存的读写操作属性在当前时刻为只读之前,所述APP还用于:
在预设时刻确定所述第一pbuf内存为所述APPs的所述共享内存,在预设时刻之外确定所述第二pbuf内存为所述APPs的共享内存,所述第一pbuf内存为小页内存,所述第二pbuf内存为大页内存,所述第一pbuf内存与所述一个或多个页表存在唯一对应关系。
可选地,在本发明的一个实施例中,所述第一pbuf内存还用于缓存轨迹标识,所述APP还用于:通过所述轨迹标识记录所述第一pbuf内存的轨迹点信息,所述轨迹点信息包括所述应用程序标识、所述应用程序当前进程标识以及所述当前时刻。
值得说明的是,图11仅仅示出了共享内存管理设备1100的简化设计。在实际应用中,共享内存管理设备1100可以包含任意数量处理器和存储器等,而所有可以实现本发明实施例的共享内存管理设备都在本发明实施例的保护范围之内。
参见图12,图12为本发明实施例提供的另一种共享内存管理装置的结构示意图,如图12所示,该共享内存管理设备1200包括:
存储有可执行程序代码的存储器1201与所述存储器耦合的处理器1202。该存储器1201可以独立存在,通过总线与处理器1202相连接。存储器1201也可以和处理器1202集成在一起。其中,所述处理器1202可以为中央处理器CPU,所述处理器1202上运行有应用程序APP与操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APP为所述APPs中的任一APP。
所述操作***用于:根据所述APPs中的任一应用程序APP对所述第一pbuf内存的读写操作属性设置指示记录所述APP对所述第一pbuf内存的读写操作属性为只读;在所述操作***监控到所述APP对所述第一pbuf内存进行写操作的情况下,向所述APP发送pbuf内存误操作通知消息,所述pbuf内存误操作通知消息用于提醒所述APP对所述第一pbuf内存进行写操作以及所述写操作的具***置。
可选地,在本发明的一个实施例中,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被所述APP调用以设置所述APP对所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,所述mprotect内存管理接口用于被所述APP调用以基于一个或多个页表设置所述第一pbuf内存的读写操作属性。
可选地,在本发明的一个实施例中,所述页表包括读写操作属性标识,所述记录模块记录所述APP对所述第一pbuf内存的读写操作属性为只读包括:
通过所述读写操作属性标识记录所述APP对所述第一pbuf内存的读写操作属性为只读。
值得说明的是,图12仅仅示出了共享内存管理设备1200的简化设计。在实际应用中,共享内存管理设备1200可以包含任意数量处理器和存储器等,而所有可以实现本发明实施例的共享内存管理设备都在本发明实施例的保护范围之内。
参见图13,图13为本发明实施例提供的一种共享内存管理设备的结构示意图,如图13所示,该共享内存管理设备1300包括:
存储有可执行程序代码的存储器1301与所述存储器耦合的处理器1302。其中,处理器1101可以为中央处理器(Central Processing Unit,CPU),该处理器上可以运行如图5所示方法实施例中的APP和操作***、或者如图9所示装置实施例中的APP和如图10所示装置实施例中的操作***、或者如图11所示装置实施例中的APP和图12所示装置实施例中的操作***,以用于执行本发明实施例所提供的共享内存管理方法。其中,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APP为所述APPs中的任一APP。该存储器1301用于存储APP的程序代码和数据,以及用于存储操作***的程序代码和数据。该存储器1301可以独立存在,通过总线与处理器1302相连接。存储器1301也可以和处理器1302集成在一起。
可以理解的是,图13仅仅示出了共享内存管理设备1300的简化设计。在实际应用中,共享内存管理设备1300可以包含任意数量处理器和存储器等,而所有可以实现本发明实施例的共享内存管理设备都在本发明实施例的保护范围之内。
本发明实施例还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可以实现包括上述方法实施例中记载的任何共享内存管理方法的部分或全部步骤。前述的存储介质包括:U盘、只读存储器(英文:read-only memory)、随机存取存储器(英文:random access memory,RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (17)

1.一种共享内存管理方法,其特征在于,所述方法应用于报文零拷贝***中,所述报文零拷贝***运行于操作***上,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs的共享内存包括第一包缓存pbuf内存,所述方法包括:
当所述APPs中的任一应用程序APP未接收到报文时,或者当所述任一应用程序APP将报文处理完毕并发送至其它APP后,所述任一应用程序APP设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读;
在所述任一应用程序APP接收到所述操作***发送的pbuf内存误操作通知消息的情况下,获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息,所述pbuf内存误操作通知消息用于提醒所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作以及所述写操作的具***置;
基于所述pbuf内存误操作现场信息确定所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作的内存误操作现场;
所述第一包缓存pbuf内存还用于缓存轨迹标识,所述方法还包括:
所述任一应用程序APP通过所述轨迹标识记录所述第一包缓存pbuf内存的轨迹点信息,所述轨迹点信息包括所述任一应用程序APP的标识、所述任一应用程序APP的当前进程标识以及所述当前时刻。
2.根据权利要求1所述的方法,其特征在于,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被调用以设置所述第一包缓存pbuf内存的读写操作属性;
所述APPs中的任一应用程序APP设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读,包括:
所述任一应用程序APP通过调用所述mprotect内存管理接口设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读。
3.根据权利要求2所述的方法,其特征在于,所述mprotect内存管理接口用于被所述任一应用程序APP调用以基于一个或多个页表设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性。
4.根据权利要求3所述的方法,其特征在于,所述报文零拷贝***还包括第二包缓存pbuf内存,所述APPs的共享内存包括所述第二包缓存pbuf内存,在所述APPs中的任一应用程序APP设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读之前,所述方法还包括:
所述任一应用程序APP在预设时刻确定所述第一包缓存pbuf内存为所述APPs的所述共享内存,所述任一应用程序APP在预设时刻之外确定所述第二包缓存pbuf内存为所述APPs的共享内存,所述第一包缓存pbuf内存为小页内存,所述第二包缓存pbuf内存为大页内存,所述第一包缓存pbuf内存与所述一个或多个页表存在唯一对应关系。
5.一种共享内存管理方法,其特征在于,所述方法应用于操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs的共享内存包括第一包缓存pbuf内存,所述方法包括:
所述操作***根据当所述APPs中的任一应用程序APP未接收到报文时,或者当所述任一应用程序APP将报文处理完毕并发送至其它APP后,所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性设置指示记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读;
在所述操作***监控到所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作的情况下,所述操作***向所述任一应用程序APP发送pbuf内存误操作通知消息,所述pbuf内存误操作通知消息用于提醒所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作以及所述写操作的具***置;
所述第一包缓存pbuf内存还用于缓存轨迹标识;所述轨迹标识用于所述任一应用程序APP记录所述第一包缓存pbuf内存的轨迹点信息,所述轨迹点信息包括所述任一应用程序APP的标识、所述任一应用程序APP的当前进程标识以及当前时刻。
6.根据权利要求5所述的方法,其特征在于,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被所述任一应用程序APP调用以设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性。
7.根据权利要求6所述的方法,其特征在于,所述mprotect内存管理接口用于被所述任一应用程序APP调用以基于一个或多个页表设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性。
8.根据权利要求7所述的方法,其特征在于,所述页表包括读写操作属性标识,所述操作***记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读包括:
所述操作***通过所述读写操作属性标识记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读。
9.一种共享内存管理设备,其特征在于,所述设备包括:
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器上运行有应用程序APP与操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一包缓存pbuf内存,所述APPs中的任一应用程序APP用于:
当未接收到报文时,或者将报文处理完毕并发送至其它APP后,设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读;
在所述任一应用程序APP接收到所述操作***发送的pbuf内存误操作通知消息的情况下,获取所述pbuf内存误操作通知消息中的pbuf内存误操作现场信息,所述pbuf内存误操作通知消息用于提醒所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作以及所述写操作的具***置;
基于所述pbuf内存误操作现场信息确定所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作的内存误操作现场;
所述第一包缓存pbuf内存还用于缓存轨迹标识,所述任一应用程序APP还用于:通过所述轨迹标识记录所述第一包缓存pbuf内存的轨迹点信息,所述轨迹点信息包括所述应用程序标识、所述应用程序当前进程标识以及当前时刻。
10.根据权利要求9所述的共享内存管理设备,其特征在于,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被调用以设置所述第一包缓存pbuf内存的读写操作属性;
所述设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读,包括:
通过调用所述mprotect内存管理接口设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读。
11.根据权利要求10所述的共享内存管理设备,其特征在于,所述mprotect内存管理接口用于被所述任一应用程序APP调用以基于一个或多个页表设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性。
12.根据权利要求11所述的共享内存管理设备,其特征在于,在所述设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性在当前时刻为只读之前,所述任一应用程序APP还用于:
在预设时刻确定所述第一包缓存pbuf内存为所述APPs的所述共享内存,在预设时刻之外确定第二包缓存pbuf内存为所述APPs的共享内存,所述第一包缓存pbuf内存为小页内存,所述第二包缓存pbuf内存为大页内存,所述第一包缓存pbuf内存与所述一个或多个页表存在唯一对应关系。
13.一种共享内存管理设备,其特征在于,所述设备包括:
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器上运行有应用程序APP和操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs的共享内存包括第一包缓存pbuf内存,所述操作***用于:
根据当所述APPs中的任一应用程序APP未接收到报文时,或者当所述任一应用程序APP将报文处理完毕并发送至其它APP后,所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性设置指示记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读;
在所述操作***监控到所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作的情况下,向所述任一应用程序APP发送pbuf内存误操作通知消息,所述pbuf内存误操作通知消息用于提醒所述任一应用程序APP对所述第一包缓存pbuf内存进行写操作以及所述写操作的具***置;
所述第一包缓存pbuf内存还用于缓存轨迹标识;所述轨迹标识用于所述任一应用程序APP记录所述第一包缓存pbuf内存的轨迹点信息,所述轨迹点信息包括所述任一应用程序APP的标识、所述任一应用程序APP的当前进程标识以及当前时刻。
14.根据权利要求13所述的共享内存管理设备,其特征在于,所述操作***包括Linux操作***,所述Linux操作***包括mprotect内存管理接口,所述mprotect内存管理接口用于被所述任一应用程序APP调用以设置所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性。
15.根据权利要求14所述的共享内存管理设备,其特征在于,所述mprotect内存管理接口用于被所述任一应用程序APP调用以基于一个或多个页表设置所述第一包缓存pbuf内存的读写操作属性。
16.根据权利要求15所述的共享内存管理设备,其特征在于,所述页表包括读写操作属性标识,所述记录模块记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读包括:
通过所述读写操作属性标识记录所述任一应用程序APP对所述第一包缓存pbuf内存的读写操作属性为只读。
17.一种共享内存管理设备,其特征在于,所述共享内存管理设备包括:
存储有可执行程序代码的存储器;
与所述存储器耦合的处理器;
所述处理器上运行有应用程序APP和操作***,所述操作***上运行有报文零拷贝***,所述报文零拷贝***包括至少两个应用程序APPs,所述APPs共享第一报文缓存pbuf内存;
所述APPs中的任一应用程序APP用于执行权利要求1至4任一项所述共享内存管理方法;
所述操作***用于执行权利要求5至8任一项所述的共享内存管理方法。
CN201710268053.5A 2017-04-22 2017-04-22 一种共享内存管理方法及共享内存管理设备 Active CN107145399B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710268053.5A CN107145399B (zh) 2017-04-22 2017-04-22 一种共享内存管理方法及共享内存管理设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710268053.5A CN107145399B (zh) 2017-04-22 2017-04-22 一种共享内存管理方法及共享内存管理设备

Publications (2)

Publication Number Publication Date
CN107145399A CN107145399A (zh) 2017-09-08
CN107145399B true CN107145399B (zh) 2021-03-02

Family

ID=59775251

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710268053.5A Active CN107145399B (zh) 2017-04-22 2017-04-22 一种共享内存管理方法及共享内存管理设备

Country Status (1)

Country Link
CN (1) CN107145399B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109361693B (zh) * 2018-11-21 2020-11-24 南京中孚信息技术有限公司 虚拟设备通信方法和装置
CN111488123B (zh) * 2020-04-07 2022-11-04 Tcl移动通信科技(宁波)有限公司 存储空间管理方法、装置、存储介质及移动终端
CN111736533B (zh) * 2020-06-04 2021-10-15 佛山冠湾智能科技有限公司 基于控驱一体机器人的数据同步方法及装置
CN115220936B (zh) * 2022-09-20 2023-01-10 之江实验室 一种多类传感器数据在控制器中零拷贝的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102006241A (zh) * 2010-12-17 2011-04-06 天津曙光计算机产业有限公司 一种多个应用共享一个缓冲区的报文接收方法
CN102164177A (zh) * 2011-03-11 2011-08-24 浪潮(北京)电子信息产业有限公司 一种集群共享存储池的方法、装置及***
CN102831069A (zh) * 2012-06-30 2012-12-19 华为技术有限公司 内存处理方法、内存管理设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102006241A (zh) * 2010-12-17 2011-04-06 天津曙光计算机产业有限公司 一种多个应用共享一个缓冲区的报文接收方法
CN102164177A (zh) * 2011-03-11 2011-08-24 浪潮(北京)电子信息产业有限公司 一种集群共享存储池的方法、装置及***
CN102831069A (zh) * 2012-06-30 2012-12-19 华为技术有限公司 内存处理方法、内存管理设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
浅析 Linux 中的共享内存机制;沈剑光;《中国科技信息》;20060801(第15期);第146-149页 *

Also Published As

Publication number Publication date
CN107145399A (zh) 2017-09-08

Similar Documents

Publication Publication Date Title
US11698759B2 (en) Resolving failed or hanging mount points in a clustered storage solution for containers
US10198377B2 (en) Virtual machine state replication using DMA write records
US8910172B2 (en) Application resource switchover systems and methods
US9652326B1 (en) Instance migration for rapid recovery from correlated failures
US8146082B2 (en) Migrating virtual machines configured with pass-through devices
US10656877B2 (en) Virtual storage controller
US10067692B2 (en) Method and apparatus for backing up and restoring cross-virtual machine application
CN107145399B (zh) 一种共享内存管理方法及共享内存管理设备
JP5536878B2 (ja) ファイバ・チャネル・ファブリックへのアクセスの変更
CN108509215B (zh) 一种***软件的更换方法、装置、终端设备及存储介质
US8990608B1 (en) Failover of applications between isolated user space instances on a single instance of an operating system
JP7483054B2 (ja) 致命的なメモリエラー時におけるターゲットホストへの仮想マシンのライブマイグレート
US9703651B2 (en) Providing availability of an agent virtual computing instance during a storage failure
US10514972B2 (en) Embedding forensic and triage data in memory dumps
US11579911B1 (en) Emulated edge locations in cloud-based networks for testing and migrating virtualized resources
US10990481B2 (en) Using alternate recovery actions for initial recovery actions in a computing system
US8225068B2 (en) Virtual real memory exportation for logical partitions
CN113535073A (zh) 管理存储单元的方法、电子设备和计算机程序产品
CN109656674B (zh) 一种计算机设备、虚拟化芯片及数据传输方法
US9223513B2 (en) Accessing data in a dual volume data storage system using virtual identifiers
US9009706B1 (en) Monitoring and updating state information of virtual devices to guest virtual machines based on guest virtual machine's probing policy
US10929250B2 (en) Method and system for reliably restoring virtual machines
CN118193280A (zh) 数据恢复方法、装置、存储设备及存储介质
CN116954633A (zh) 部署多个应用软件的方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20211223

Address after: 450046 Floor 9, building 1, Zhengshang Boya Plaza, Longzihu wisdom Island, Zhengdong New Area, Zhengzhou City, Henan Province

Patentee after: xFusion Digital Technologies Co., Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.