CN113094173B - 一种基于dpdk的大页内存动态迁移的方法与装置 - Google Patents

一种基于dpdk的大页内存动态迁移的方法与装置 Download PDF

Info

Publication number
CN113094173B
CN113094173B CN202110362272.6A CN202110362272A CN113094173B CN 113094173 B CN113094173 B CN 113094173B CN 202110362272 A CN202110362272 A CN 202110362272A CN 113094173 B CN113094173 B CN 113094173B
Authority
CN
China
Prior art keywords
buffer
page memory
memory
space
pool
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
CN202110362272.6A
Other languages
English (en)
Other versions
CN113094173A (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.)
Chengdu Fenghuo Cloud Information Technology Co ltd
Fiberhome Telecommunication Technologies Co Ltd
Original Assignee
Chengdu Fenghuo Cloud Information Technology Co ltd
Fiberhome Telecommunication 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 Chengdu Fenghuo Cloud Information Technology Co ltd, Fiberhome Telecommunication Technologies Co Ltd filed Critical Chengdu Fenghuo Cloud Information Technology Co ltd
Priority to CN202110362272.6A priority Critical patent/CN113094173B/zh
Publication of CN113094173A publication Critical patent/CN113094173A/zh
Application granted granted Critical
Publication of CN113094173B publication Critical patent/CN113094173B/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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

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

Abstract

本发明公开了一种基于DPDK的大页内存动态迁移的方法与装置,当从大页内存池中申请大页内存失败时,从存在足够空闲大页内存的buffer池中借调所需的大页内存空间;将借调的该大页内存空间的归属信息注册到恢复线程,同时将归属信息同步到对应的控制信息中;动态监控大页内存池中的内存变化,当存在大页内存富余时,根据恢复线程中注册的归属信息申请新的大页内存空间并填充到对应buffer池中;当大页内存使用者主动释放已申请的大页内存空间时,将借调的大页内存空间释放回对应buffer池。本申请可实现大页内存的二次灵活使用,避免内存申请失败造成的业务中断、设备异常等问题,提高大页内存利用率。

Description

一种基于DPDK的大页内存动态迁移的方法与装置
技术领域
本发明属于数据通信技术领域,更具体地,涉及一种基于DPDK的大页内存动态迁移的方法与装置。
背景技术
传统网络设备的转发平台是基于专用的网络芯片搭建的,如cavium的cn78xx网络处理器。基于专用的网络芯片的技术方案,导致硬件依赖程度高,业务开发的灵活性受硬件限制,进一步造成业务开发周期变长,市场交付周期延迟,产品开发成本被进一步增加。DPDK(Intel Data Plane Development Kit,即英特尔数据平面开发工具包)技术,是基于通用处理器(如x86和arm)进行多核软转发平台的搭建。该技术方案即保证了数据处理性能和吞吐量,又提供了灵活的业务开发模式,可以加速业务特性开发和产品市场交付。
当前技术潮流则是DPDK和NFV(Network Functions Virtualization,即网络功能虚拟化)的融合,即在服务器硬件平台上,通过虚拟化技术,使用DPDK转发框架来实现报文转发。这种融合的技术方案,可以根据业务特性和用户需求,动态灵活地进行开发和部署;也正是因为此特性,该技术方案正在NFV、云计算、网络安全等领域被大量使用。作为数通领域的发展趋势,在通用芯片为载体的服务器上,利用虚拟化技术实现硬件资源的高效实用,同时使用DPDK完成报文的快速转发的技术方案,以其通用性、灵活性、高效性和性价比,正在实际网络环境中大量部署,且将持续增加市场占用率。而基于DPDK的软转发平台,其运行稳定性、转发高效性至关重要,直接决定了设备的可靠性。因此,基于DPDK的转转发领域的研究非常关键。
在当前DPDK框架下大页内存的使用方式如图1所示,系统中的mpls(Multi-Protocol Label Switching,即多协议标签交换)、ip(Internet Protocol,即TCP/IP体系中的网络层协议)、buffer(即承载报文的内存)以及tbl(table的缩写,即转发表项)等都使用大页内存来存储,具体是统一从大页内存池中申请大页内存使用并在使用完毕后释放到大页内存池。就大页内存的申请、释放方面,这些大页内存申请者之间处于平等地位,相互独立同时又相互竞争空闲的大页内存。由于大页内存常驻内存,无法换入换出,为了支持多DPDK实例的运行,需要对每个DPDK实例可以占用的大页内存规格进行限制,这种情况就加剧了大页内存合理分配、使用的难度。
buffer作为报文转发的承载体,其所需的大页内存需提前静态分配,且内存占用量大。当大页内存池中的空闲大页内存不足,无法满足大页内存申请者新的内存申请时,就会导致新的业务功能的失败;这时buffer池中的大页内存可能处于富余状态,但却不能够被新的大页内存申请者使用,这种情况造成了大页内存的有效利用率降低,系统的稳定性也得不到保障。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于DPDK的大页内存动态迁移的方法与装置,其目的在于大页内存紧张时通过对buffer池中初始化分配的大量大页内存进行借调,实现大页内存的成功申请,由此解决传统方案中大页内存的有效利用率低、系统稳定性差的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种基于DPDK的大页内存动态迁移的方法,包括:
当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间;
将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中;
动态监控大页内存池中的内存变化,当存在大页内存富余时,根据恢复线程中注册的归属信息申请新的大页内存空间并填充到对应buffer池中,以替代对应buffer池中被借调的大页内存空间;
当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息将借调的大页内存空间释放回对应buffer池,完成借调恢复。
优选地,在所述当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间之前,所述方法还包括:
根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重;
分别将每个buffer池的内存空间分割为多个buffer,并根据对应借调权重确定每个buffer池的可借调buffer,以便后续将buffer作为内存借调的基本单位;其中,同一buffer池内各buffer的内存大小一致。
优选地,当大页内存使用者从大页内存池中申请大页内存失败时,所述根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间,具体为:
将所需内存大小分别与每个buffer池中的基本buffer内存大小进行比较,以便判断是否存在单个buffer即可满足借调需求的buffer池;
如果存在单个buffer即可满足借调需求的buffer池,则在这些buffer池中选择当前可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的单个buffer空间;
如果不存在单个buffer即可满足借调需求的buffer池,则选择当前存在连续可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的连续多个buffer空间。
优选地,所述将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中,具体为:
如果是单个buffer空间的借调,则将该单个buffer空间的归属信息注册到恢复线程,同时将该单个buffer空间的归属信息同步到对应的控制信息中;
如果是连续多个buffer空间的借调,则将该连续多个buffer空间的归属信息注册到恢复线程,同时将该连续多个buffer空间的归属信息同步到对应的控制信息中;
其中,所述归属信息包括对应buffer空间的buffer类型、buffer位置标识以及所在的buffer池。
优选地,所述当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息将借调的大页内存空间释放回对应buffer池,具体为:
当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据控制信息判断申请该大页内存空间时的来源;
如果是直接从所述大页内存池中申请的,则直接将申请的大页内存空间释放回所述大页内存池中;
如果是从某个buffer池中借调的,则根据控制信息中记录的buffer空间的归属信息,将借调的buffer空间释放回对应的buffer池中。
优选地,如果是单个buffer空间的借调,则所述将借调的buffer空间释放回对应的buffer池中具体为:
如果该buffer空间尚未被填充,则直接将借调的单个buffer释放回对应buffer池;如果该buffer空间已被填充但未被使用,则将填充的buffer空间释放后,再将借调的单个buffer释放回对应buffer池;如果该buffer空间已被填充且正在被使用,则等待buffer使用完归还到对应buffer池后,将填充的buffer空间释放,再将借调的单个buffer释放回对应buffer池;
如果是连续多个buffer空间的借调,则所述将借调的buffer空间释放回对应的buffer池中具体为:
如果该buffer空间尚未被填充,则直接将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池;如果该buffer空间已被填充但未被使用,则将填充的buffer空间释放后,再将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池;如果该buffer空间已被填充且正在被使用,则等待buffer使用完归还到对应buffer池后,将填充的buffer空间释放,再将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池。
优选地,在所述当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间之前,所述方法还包括:
根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重;
根据对应借调权重计算每个buffer池预分配的内存空间,并将这部分内存空间分割为多个buffer,将剩余的连续大页内存空间作为可借调内存。
优选地,当大页内存使用者从大页内存池中申请大页内存失败时,所述所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间,具体为:
将所需内存大小分别与每个buffer池中的当前可借调内存大小进行比较,以便判断是否存在当前可借调内存大小满足借调需求的buffer池;
如果存在当前可借调内存大小满足借调需求的buffer池,则在这些buffer池中选择借调优先级最高的buffer池,从该buffer池中返回要借调的大页内存空间,并更新该buffer池的当前可借调内存大小;
如果不存在当前可借调内存大小满足借调需求的buffer池,表示无大页内存空间可借调,则返回错误。
优选地,所述将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中,具体为:
根据返回的大页内存空间,将该大页内存空间的归属信息注册到恢复线程,并利用恢复线程维护对应buffer池中可借调内存的使用状态链表,同时将该大页内存空间的归属信息同步到对应的控制信息中;
其中,可借调内存的使用状态链表包括空闲内存链表、借调内存链表和填充内存链表;所述空闲内存链表的每个节点表示一段连续空闲的内存空间,所述借调内存链表的每个节点表示一段被借调的内存空间,所述填充内存链表的每个节点表示一段被大页内存池填充的内存空间。
按照本发明的另一方面,提供了一种基于DPDK的大页内存动态迁移的装置,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成第一方面所述的基于DPDK的大页内存动态迁移的方法。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:本发明提供的大页内存动态迁移方法中,在系统大页内存紧张的情况下可以从buffer池中进行大页内存借调,让buffer池占用但空闲的大页内存在系统间流转,按照借用、补充、恢复的大页内存迁移闭环流程,实现大页内存的二次灵活使用,使大页内存成功申请,避免内存申请失败造成的业务中断、设备异常等问题,提高大页内存的利用率,有效保证了同一系统中多DPDK实例的正常运行,增强业务的可靠性和设备的稳定性;而且确保了原始大页内存分配的不变特性,使大页内存的分配、管理机制不感知大页内存的迁移过程。
附图说明
图1是当前的一种基于DPDK的大页内存使用方式框架示意图;
图2是本发明实施例提供的一种基于DPDK的大页内存迁移框架图;
图3是本发明实施例提供的一种基于DPDK的大页内存动态迁移的方法流程图;
图4是本发明实施例提供的一种buffer分配和buffer借调的示意图;
图5是本发明实施例提供的一种buffer对应控制信息的示意图;
图6是本发明实施例提供的一种buffer预分配时的分割示意图;
图7是本发明实施例提供的一种可借调内存的使用状态链表示意图;
图8是本发明实施例提供的一种基于DPDK的大页内存动态迁移的装置架构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
实施例1
为解决传统方案中大页内存的有效利用率低、系统稳定性差的技术问题,本发明实施例提供了一种基于DPDK的大页内存动态迁移的方法,其大页内存迁移框架可参考图2。
结合图2可知,系统中往往存在多个类型的buffer池,例如,Jumbo buffer pool为用于收发大报文的大报文buffer池,software buffer pool为用于设备主动发送报文时使用的软件buffer池,protocol buffer pool为用于收发协议报文的协议buffer池,pktbuffer pool为用于收发普通报文的报文buffer池。user则表示除buffer池以外的大页内存使用者,user与buffer池之间为平等地位,都可以从大页内存池中申请大页内存使用,且buffer池中通常提前静态分配有大量的大页内存。
当某个大页内存使用者user需要进行大页内存申请时,首先走常规大页内存申请流程,从所述大页内存池中申请,如果申请成功,则直接从所述大页内存池中返回分配的大页内存即可,对应图2中步骤①。如果申请失败,证明所述大页内存池中内存不足,则需要走大页内存借调,从buffer池中借调所需的大页内存空间,对应图2中步骤②-步骤⑥。如图3所示,主要包括以下步骤:
步骤101,当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间。
该步骤对应图2中步骤②,user从大页内存池中申请内存失败时从某个buffer池中借调大页内存。结合图2可知,系统中往往存在多个buffer池,但仅从一个buffer池中借调,为选择合适的buffer池完成借调,可根据实际情况预先定义每个buffer池的借调优先级和借调权重,根据借调权重可确定每个buffer池内的可借调内存大小。当需要从buffer池借调时,可从多个buffer池中选择当前可借调内存满足所需内存大小且借调优先级最高的buffer池,从该buffer池中返回借调的大页内存空间;如果没有当前可借调内存满足所需内存大小的buffer池,则返回错误,无法实现借调。具体实施过程可参考实施例2和实施例3,在此不做赘述。
步骤102,将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中。
该步骤对应图2中步骤③,如果上一步骤成功返回借调的大页内存空间,则将该大页内存空间的归属信息注册到恢复线程,用于后续进行大页内存填充时使用;同时,将该大页内存空间的归属信息同步到内存分配的对应的控制信息(即ctrl信息)中,用于后续进行大页内存归还时使用。其中,所述归属信息中记录了该大页内存空间所在的buffer池以及在该buffer池中的位置,根据所述归属信息即可确定该大页内存空间原始的归属。具体实施过程可参考实施例2和实施例3,在此不做赘述。
步骤103,动态监控大页内存池中的内存变化,当存在大页内存富余时,根据恢复线程中注册的归属信息申请新的大页内存空间并填充到对应buffer池中,以替代对应buffer池中被借调的大页内存空间。
该步骤对应图2中步骤④,恢复线程动态监控所述大页内存池中的内存空间变化,当其中某个user使用完大页内存释放回所述大页内存池时,所述大页内存池中就可能会出现大页内存富余的情况,此时可根据恢复线程中注册的归属信息,从所述大页内存池中申请新的大页内存空间填充到被借调的buffer池中对应位置,以替代该buffer池中被借调的大页内存空间,确保该buffer池中内存资源的满足,避免内存借调影响该buffer池的使用。具体实施过程可参考实施例2和实施例3,在此不做赘述。
步骤104,当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息将借调的大页内存空间释放回对应buffer池,完成借调恢复。
该步骤对应图2中步骤⑤和步骤⑥。当大页内存使用者user主动释放已申请的大页内存空间时,需跟踪该大页内存空间的控制信息,以便判断该大页内存空间的来源。如果是直接从所述大页内存池中申请的,则直接将申请的该大页内存空间释放回所述大页内存池中,对应图2中步骤⑤。如果是从某个buffer池中借调的,则根据控制信息中记录的该大页内存空间的归属信息,将借调的该大页内存空间释放回对应buffer池中的相应位置,对应图2中步骤⑥,完成借调的大页内存空间的恢复。具体实施过程可参考实施例2和实施例3,在此不做赘述。
本发明提供的上述大页内存动态迁移方法中,在系统大页内存紧张的情况下可以从buffer池中进行大页内存借调,让buffer池占用但空闲的大页内存在系统间流转,按照借用、补充、恢复的大页内存迁移闭环流程,实现大页内存的二次灵活使用,使大页内存成功申请,避免内存申请失败造成的业务中断、设备异常等问题,提高大页内存的利用率,有效保证了同一系统中多DPDK实例的正常运行,增强业务的可靠性和设备的稳定性;而且确保了原始大页内存分配的不变特性,使大页内存的分配、管理机制不感知大页内存的迁移过程。
实施例2
在上述实施例1的基础上,本发明实施例进一步以buffer池全部分割为buffer进行管理为例,提供了一种基于DPDK的大页内存动态迁移的具体实施方式。在该实施例中,内存迁移之前的准备步骤具体如下:
1)根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重。
借调优先级的定义原则是尽量不影响被借调的buffer池本身的内存使用需求,可根据buffer池的使用场景和重要程度逆向定义:buffer池的使用场景越广泛、重要程度越高,越是要优先考虑该buffer池本身的内存使用需求,往外借调的可能性就越小,对应的借调优先级就会设置得越低;反之,buffer池的使用场景越小、重要程度越低,该buffer池本身的内存使用需求越小,可优先考虑往外借调,对应的借调优先级就会设置得越高。
借调权重可根据对应buffer池的借调优先级设置,借调优先级越高,对应的借调权重可设置越高;每类buffer池的借调权重可能不同,但借调权重的设置范围均为5%~25%。每个buffer池中的可借调内存大小可根据对应借调权重确定,假设某个buffer池总的内存空间大小为100M,借调权重为10%,则该buffer池的可借调内存大小为10M。
2)分别将每个buffer池的内存空间分割为多个buffer,并根据对应借调权重确定每个buffer池的可借调buffer,以便后续将buffer作为内存借调的基本单位;其中,同一buffer池内各buffer的内存大小一致。
为方便内存管理,本发明实施例将每个buffer池的内存空间均全部分割为buffer进行管理,同一buffer池内各buffer的内存大小一致,但不同buffer池内buffer的内存大小可能不同。如图4所示,该buffer池总共分割为n+1个buffer,每个buffer的内存大小一致;举例说明,假设某个buffer池总的内存空间大小为100M,每个buffer内存大小为1M,则这100M空间总共分割为100个buffer。在这种方案下,可借调的最小内存基本单位就是一个buffer的空间大小。根据借调权重可确定每个buffer池中的可借调内存大小,再结合buffer的内存大小即可确定每个buffer池中的可借调buffer数量。
基于上述准备过程,本发明实施例提供的一种基于DPDK的大页内存动态迁移的方法主要包括以下步骤:
步骤201,大页内存使用者user根据内存需求进行大页内存申请,首先走常规大页内存申请流程从所述大页内存池中申请;如果申请成功,则直接从所述大页内存池中返回分配的大页内存,对应图2中步骤①;如果申请失败,则跳转至步骤202,走大页内存借调。
步骤202,大页内存使用者user根据所需内存大小,从存在足够空闲大页内存且借调优先级最高的一个buffer池中借调所需的大页内存空间,对应图2中步骤②。具体过程如下:
首先,将所需内存大小分别与每个buffer池中的基本buffer内存大小进行比较,以便判断是否存在单个buffer即可满足借调需求的buffer池。例如,当前所需内存大小为50K,buffer池A1中每个buffer大小为1M,则该buffer池中单个buffer即可满足借调需求;buffer池A2中每个buffer大小为5K,则该buffer池中单个buffer并不能满足借调需求。
1)如果存在单个buffer即可满足借调需求的buffer池,则在这些buffer池中选择当前可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的单个buffer空间。具体地,先在满足借调需求的这些buffer池中选择最高借调优先级的buffer池,判断该buffer池中当前可借调buffer是否满足借调需求,如果满足则从该buffer池返回要借调的单个buffer空间即可;否则,继续判断下一借调优先级的buffer池中当前可借调buffer是否满足借调需求,以此类推;若均不满足,则返回错误。例如,buffer池A1中虽然单个buffer即可满足借调需求,但每个可借调buffer都已经都借调出去且未归还,导致当前可借调buffer为0,因此无法借调。
2)如果不存在单个buffer即可满足借调需求的buffer池,则选择当前存在连续可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的连续多个buffer空间。具体地,先查看最高借调优先级的buffer池中当前是否存在连续可借调buffer满足借调需求,如果满足则从该buffer池返回要借调的连续多个buffer空间即可;否则,继续判断下一借调优先级的buffer池中当前是否存在连续可借调buffer满足借调需求;若均不满足,则返回错误。
需要说明的是,在寻找满足借调需求的buffer池时,每个buffer池中对各buffer的遍历原则可参考图4:该buffer池总共分割为n+1个buffer,分别标记为buf_0、buf_1、...、buf_n,每个buffer的内存大小一致。当buffer池中的buffer用作报文转发时,即自身正常使用时,按照从前到后的顺序进行buffer正常分配;当buffer池中的buffer用作借调使用时,则按照从后到前的顺序进行buffer借调分配,即buffer正常分配方向和buffer借调分配方向相反。
其中,图中借调buffer截止线表示其右侧的buffer为可借调buffer,左侧的buffer为不可借调buffer,可借调buffer的个数根据该buffer池的借调权重和每个buffer的内存大小来计算。在buffer正常分配方向上,buffer分配不受所述借调buffer截止线限制,可以根据实际需求申请任何位置上的buffer;而在buffer借调分配方向上,最多只能分配到所述借调buffer截止线处的buffer,即图中buf_m,从而避免借调buffer过多影响该buffer池的buffer正常分配使用。
步骤203,如果上一步骤成功返回,则根据借调的buffer空间,将该buffer空间的归属信息注册到恢复线程,同时将该buffer空间的归属信息同步到对应的内存分配的控制信息中,对应图2中步骤③。具体如下:
1)如果是单个buffer空间的借调,则将该单个buffer空间的归属信息注册到恢复线程,以便后续进行内存填充时使用;同时将该单个buffer空间的归属信息同步到对应的控制信息中,以便后续进行内存归还时使用。其中,单个buffer空间的归属信息主要包括该buffer所在的buffer池(以buf_pool表示)、buffer类型(即对应buffer池的类型,以buf_type表示)以及buffer位置标识(即在对应buffer池中的位置,以buf_id表示)。
2)如果是连续多个buffer空间的借调,则将该连续多个buffer空间的归属信息注册到恢复线程,以便后续进行内存填充时使用;同时将该连续多个buffer空间的归属信息同步到对应的控制信息中,以便后续进行内存归还时使用。其中,连续多个buffer空间的归属信息主要包括该连续多个buffer空间所在的buffer池(以buf_pool表示)、buffer类型(即对应buffer池的类型,以buf_type表示)、buffer位置标识(即在对应buffer池中的位置,以buf_id_case表示)以及buffer数量(以buf_num表示)。
步骤204,恢复线程动态监控大页内存池中的内存变化,当存在大页内存富余时,根据恢复线程中注册的buffer空间的归属信息,从所述大页内存池中申请新的大页内存并填充到对应buffer池中,以替代对应buffer池中被借调的buffer空间,对应图2中步骤④。例如,如果是从buffer池A1中借调了buffer_m,则将申请的大页内存直接填充到buffer池A1中原buffer_m所在的位置。需要说明的是,虽然原始的buffer_m可借调,但填充进来的buffer空间是不可被借调的,只能用作该buffer池自身正常分配使用。
步骤205,当大页内存使用者user主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息判断申请该大页内存空间时的来源。分以下两种情况:
第一种,如果是直接从所述大页内存池中申请的,则直接将申请的大页内存空间释放回所述大页内存池中,对应图2中步骤⑤。
第二种,如果是从某个buffer池中借调的,则根据控制信息中记录的buffer空间的归属信息,将借调的buffer空间释放回对应的buffer池中进行恢复,对应图2中步骤⑥。具体恢复机制如下:
1)如果是单个buffer空间的借调,则恢复过程具体为:
如果该buffer空间尚未被填充,则直接将借调的单个buffer释放回对应buffer池中的对应位置,实现buffer空间恢复;
如果该buffer空间已被填充但未被使用,则先将填充的buffer空间释放回所述大页内存池,再将借调的单个buffer释放回对应buffer池中的对应位置,实现buffer空间恢复;
如果该buffer空间已被填充且正在被使用,则先标记对应位置的buffer待释放,并记录该单个buffer,等待填充的buffer使用完并归还到对应buffer池后,先将填充的buffer空间释放回所述大页内存池,再将已记录的单个buffer(即借调的单个buffer)释放回对应buffer池中的对应位置,实现buffer空间恢复。
2)如果是连续多个buffer空间的借调,则恢复过程具体为:
如果该buffer空间尚未被填充,则直接将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池中的对应位置,实现buffer空间恢复;
如果该buffer空间已被填充但未被使用,则先将填充的buffer空间释放回所述大页内存池,再将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池中的对应位置,实现buffer空间恢复;
如果该buffer空间已被填充且正在被使用,则先标记对应范围的buffer待释放,并记录该连续多个buffer,等待填充的buffer使用完归还到对应buffer池后,先将填充的buffer空间释放回所述大页内存池,再将已记录的连续多个buffer拆分为独立的buffer释放回对应buffer池中的对应位置,实现buffer空间恢复。
其中,buffer的借调情况、填充情况、归还恢复情况均记录在buffer的控制信息中并实时更新。如图5所示,对于每个buffer,控制信息包括buffer信息和位置信息,所述buffer信息中就主要包括了前面同步进来的buffer空间的归属信息,例如buf_pool、buf_type、buf_id等;所述位置信息中包括多个关键字段。具体地,图5中各关键字段的含义如下:
buf_id:一个buffer的位置标识;
buf_addr:一个buffer的起始地址;
org_buf_info:记录原始buffer的信息;
Shift_buf_info:记录迁移buffer的信息;其中,迁移buffer就是指从所述大页内存池中申请内存后填充进来的buffer,也可称为填充buffer;
org_buf_flag:标识当前位置上的buffer是否为原始buffer;
first_shift_flag:当前位置上的buffer为迁移buffer时,是否为连续多个buffer空间的迁移;
first_shift_base:当前位置上的buffer为迁移buffer,且是连续多个buffer空间的迁移时,记录第一个buffer的位置信息;
shift_buf_num:当前位置上的buffer为迁移buffer,且是连续多个buffer空间的迁移时,记录记录连续buffer的个数;
Shift_returned_num:当前位置上的buffer为迁移buffer,且是连续多个buffer空间的迁移时,记录已经恢复原始buffer的个数。
在本发明实施例中,将每个buffer池的内存空间都全部分割为buffer进行管理,可借调的最小内存基本单位就是一个buffer,如此一来可方便内存管理和借调。在系统大页内存紧张的情况下可以从buffer池中进行buffer借调,让buffer池占用但空闲的buffer在系统间流转,按照借用、补充、恢复的buffer迁移闭环流程,使大页内存成功申请,避免内存申请失败造成的业务中断、设备异常等问题,提高大页内存的利用率,有效保证了同一系统中多DPDK实例的正常运行,增强业务的可靠性和设备的稳定性;而且确保了原始大页内存分配的不变特性,使大页内存的分配、管理机制不感知大页内存的迁移过程。
实施例3
在上述实施例1和实施例2的基础上,本发明实施例进一步以buffer池的内存部分分割为buffer进行管理为例,提供了一种基于DPDK的大页内存动态迁移的具体实施方式。在该实施例中,内存迁移之前的准备步骤具体如下:
1)根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重。其中,借调优先级和借调权重的具体设置原则可参考实施例2,在此不做赘述。
2)根据对应借调权重计算每个buffer池预分配的内存空间,并将这部分内存空间分割为多个buffer,将剩余连续大页内存空间作为可借调内存。
与实施例2不同,本发明实施例并未将buffer池的全部内存空间分割为buffer,而是根据借调权重进行部分分割。具体地,先根据借调权重计算buffer池预分配的内存空间(也就是不可借调内存部分),得到预分配的buffer个数,将这部分内存空间进行buffer分割;剩余的可借调内存则不进行buffer分割,暂用作连续的普通大页内存进行管理。
如图6所示,图中“buffer申请的大页内存”即为该buffer池总的内存空间,根据借调权重计算预分配的内存空间为图中借调内存截止线之前的内存空间,因此将这部分不可借调的内存空间分割为buffer进行存储管理,即图中的buf 0~buf n的空间。借调内存截止线之后的内存空间为可借调内存,暂时不进行buffer分割,而是作为连续的普通大页内存进行管理。当预分配的buffer空间使用完毕时,则利用剩余未分割的内存空间来动态扩展buffer空间,将新增的内存空间切割为buffer进行存储管理,即图中的buf_n+1~buf_n+i的空间。每次动态增加buffer空间时,将可借调内存中当前空闲内存free_mem_len的预设比例(例如50%)用来扩展buffer。
这种方案中,可借调内存是连续的大页内存空间,未进行buffer切割,可适应于任何大小的内存空间的借调,进一步增加对可借调内存的有效利用率。
基于上述准备过程,本发明实施例提供的一种基于DPDK的大页内存动态迁移的方法主要包括以下步骤:
步骤301,大页内存使用者user根据内存需求进行大页内存申请,首先走常规大页内存申请流程从所述大页内存池中申请;如果申请成功,则直接从所述大页内存池中返回分配的大页内存,对应图2中步骤①;如果申请失败,则跳转至步骤202,走大页内存借调。
步骤302,大页内存使用者user根据所需内存大小,从存在足够空闲大页内存且借调优先级最高的一个buffer池中借调所需的大页内存空间,对应图2中步骤②。具体过程如下:
首先,将所需内存大小分别与每个buffer池中的当前可借调内存大小进行比较,以便判断是否存在当前可借调内存大小满足借调需求的buffer池。例如,当前所需内存大小为50K,buffer池B1中当前可借调内存为1M,buffer池B2中当前可借调内存为5M,buffer池B3中当前可借调内存为30K,则buffer池B1、B2可满足借调需求,buffer池B3不能满足借调需求。
1)如果存在当前可借调内存大小满足借调需求的buffer池,则在这些buffer池中选择借调优先级最高的buffer池,从该buffer池中返回要借调的大页内存空间,记录本次借调的大页内存空间的信息,例如大页内存空间的地址mem_addr和大页内存空间的内存长度mem_len,并更新该buffer池的当前可借调内存大小。
2)如果不存在当前可借调内存大小满足借调需求的buffer池,表示无大页内存空间可借调,则返回错误。
步骤303,如果上一步骤成功返回,则根据借调的大页内存空间,将该大页内存空间的归属信息注册到恢复线程,并利用恢复线程维护对应buffer池中可借调内存的使用状态链表,同时将该大页内存空间的归属信息同步到对应的控制信息中,对应图2中步骤③。
其中,大页内存空间的归属信息主要包括该大页内存空间所在的buffer池(以buf_pool表示)、buffer类型(即对应buffer池的类型,以buf_type表示)、地址(即在对应buffer池中的地址,以mem_addr表示)以及占用内存长度(以mem_len)表示。
进一步结合图7,可借调内存的使用状态链表包括空闲内存链表、借调内存链表和填充内存链表三个链表,具体如下:
1)空闲内存链表
所述空闲内存链表的每个节点表示一段连续空闲的内存空间,,按照内存空间地址增长的趋势排序。每个节点记录的内存信息字段如下:
mem_free_addr:空闲内存的起始地址;
mem_free_len:空闲内存的长度;
shift_mem_list:空闲内存包含的填充内存块信息;例如,两个连续的借调内存链表均被填充后,变为两个连续的填充内存链表,而这两个连续的填充内存链表就会重新整合形成一个新的空闲内存链表。
2)借调内存链表
所述借调内存链表的每个节点表示一段被借调的内存空间,按照内存空间地址增长的趋势排序。每个节点记录的内存信息字段如下:
ori_mem_addr:原始内存的起始地址;
ori_mem_len:原始内存的长度;
shift_mem_addr:填充内存的起始地址;
shift_mem_len:填充内存的长度;
shift_mem_flag:该节点内存当前是否为填充内存
结合图8,所述使用状态链表中原本有连续的借调内存1~借调内存5共五个借调内存链表,后来借调内存3和借调内存4均被填充,填充后这两块内存均处于空闲状态未被使用,就整合为一个新的空闲内存。
3)填充内存链表
所述填充内存链表的每个节点表示一段被从大页内存池中新申请的大页内存填充的内存空间,按照内存空间地址增长的趋势排序。每个节点记录的内存信息字段如下:
shift_mem_addr:填充内存的起始地址
shift_mem_len:填充内存的长度
free_mem_flag:该填充内存是否空闲的标识
free_mem_addr:该填充内存被空闲内存整合时,所在的空闲内存的起始地址。
每当一块内存被借调时,都会根据注册到恢复线程的大页内存空间的归属信息,调整所述空闲内存链表和所述借调内存链表的节点信息,并将该大页内存空间的归属信息同步到对应内存块的控制信息中,标识借调内存属性。
步骤304,恢复线程动态监控大页内存池中的内存变化,当存在大页内存富余时,根据所述借调内存链表上的节点信息,从所述大页内存池中申请新的大页内存并填充到对应buffer池中,以替代对应buffer池中被借调的大页内存空间,对应图2中步骤④。同时,根据替代的大页内存空间信息,调整所述填充内存链表和所述空闲内存链表的节点信息,确保替代后出现的新的连续空闲内存被管理。
步骤306,当buffer池中预分配的buffer空间不足时,利用对应buffer池中的空闲可借调内存来动态扩展buffer空间。具体如下:
当buffer池中预分配的buffer空间不足时,根据对应buffer池的可借调内存中当前空闲内存free_mem_len值,取其预设比例(例如50%)的内存用作buffer扩展,并遍历所述空闲内存链表,找到所需的大页内存分割为buffer放入buffer池管理。对于被使用的内存空间,如果包含了填充内存空间,则需要同步设置所述填充内存链表中对应节点的free_mem_flag,标识该填充内存被使用。
步骤307,当buffer池中预分配的buffer空间富余时,若存在扩展buffer则进行内存释放。具体如下:
当buffer池中预分配的buffer空闲量超过预分配总量的某一预设比例(例如25%)时,如果此时存在扩展buffer,则将扩展buffer所使用的内存释放回对应可借调内存中,保证可借调内存的对外借调的使用。其中,在进行释放时,需要同步更新所述空闲内存链表和所述填充内存链表,如果释放的内存中包含了填充内存空间,需要同步设置所述填充内存链表中对应节点的free_mem_flag,标识该填充内存未被使用。
步骤307,当大页内存使用者user主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息判断申请该大页内存空间时的来源。分以下两种情况:
第一种,如果是直接从所述大页内存池中申请的,则直接将申请的大页内存空间释放回所述大页内存池中,对应图2中步骤⑤。
第二种,如果是从某个buffer池中借调的,则根据控制信息中记录的大页内存空间的归属信息,将借调的大页内存空间释放回对应的buffer池中进行恢复,对应图2中步骤⑥。具体恢复机制如下:
如果该大页内存空间尚未被填充,则直接将借调的大页内存释放回对应buffer池中的可借调内存空间中,实现大页内存空间恢复;
如果该大页内存空间已被填充但未被使用,则先将填充的大页内存空间释放回所述大页内存池,再将借调的大页内存释放回对应buffer池中的可借调内存空间中,实现大页内存空间恢复;
如果该大页内存空间已被填充且正在被使用,则先标记对应位置的大页内存空间待释放,并记录到所述借调内存链表的对应节点中;等待对应buffer池中buffer扩展空间使用完毕并归还到可借调内存空间后,先将填充的大页内存空间释放回所述大页内存池,释放恢复空间,再将已记录的原始大页内存空间释放回对应buffer池中的可借调内存空间中,实现大页内存空间恢复。
在本发明实施例中,仅将每个buffer池预分配的内存分割为buffer进行管理,剩余的可借调内存则不进行buffer分割,暂用作连续的普通大页内存进行管理,因此可借调内存是连续的大页内存空间,未进行buffer切割,可适应于任何大小的内存空间的借调,进一步增加对可借调内存的有效利用率。
实施例4
在上述实施例1-实施例3提供的基于DPDK的大页内存动态迁移的方法的基础上,本发明还提供了一种可用于实现上述方法的基于DPDK的大页内存动态迁移的装置,如图8所示,是本发明实施例的装置架构示意图。本实施例的基于DPDK的大页内存动态迁移的装置包括一个或多个处理器21以及存储器22。其中,图8中以一个处理器21为例。
所述处理器21和所述存储器22可以通过总线或者其他方式连接,图8中以通过总线连接为例。
所述存储器22作为一种基于DPDK的大页内存动态迁移的方法非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如实施例1中的基于DPDK的大页内存动态迁移的方法。所述处理器21通过运行存储在所述存储器22中的非易失性软件程序、指令以及模块,从而执行基于DPDK的大页内存动态迁移的装置的各种功能应用以及数据处理,即实现实施例1-实施例3的基于DPDK的大页内存动态迁移的方法。
所述存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,所述存储器22可选包括相对于所述处理器21远程设置的存储器,这些远程存储器可以通过网络连接至所述处理器21。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
所述程序指令/模块存储在所述存储器22中,当被所述一个或者多个处理器21执行时,执行上述实施例1中的基于DPDK的大页内存动态迁移的方法,例如,执行以上描述的图1所示的各个步骤。
本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,Random AccessMemory)、磁盘或光盘等。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种基于DPDK的大页内存动态迁移的方法,其特征在于,包括:
当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间;
将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中;
动态监控大页内存池中的内存变化,当存在大页内存富余时,根据恢复线程中注册的归属信息申请新的大页内存空间并填充到对应buffer池中,以替代对应buffer池中被借调的大页内存空间;
当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息将借调的大页内存空间释放回对应buffer池,完成借调恢复。
2.如权利要求1所述的基于DPDK的大页内存动态迁移的方法,其特征在于,在所述当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间之前,所述方法还包括:
根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重;
分别将每个buffer池的内存空间分割为多个buffer,并根据对应借调权重确定每个buffer池的可借调buffer,以便后续将buffer作为内存借调的基本单位;其中,同一buffer池内各buffer的内存大小一致。
3.如权利要求2所述的基于DPDK的大页内存动态迁移的方法,其特征在于,当大页内存使用者从大页内存池中申请大页内存失败时,所述根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间,具体为:
将所需内存大小分别与每个buffer池中的基本buffer内存大小进行比较,以便判断是否存在单个buffer即可满足借调需求的buffer池;
如果存在单个buffer即可满足借调需求的buffer池,则在这些buffer池中选择当前可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的单个buffer空间;
如果不存在单个buffer即可满足借调需求的buffer池,则选择当前存在连续可借调buffer满足借调需求且借调优先级最高的buffer池,并从该buffer池中返回要借调的连续多个buffer空间。
4.如权利要求3所述的基于DPDK的大页内存动态迁移的方法,其特征在于,所述将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中,具体为:
如果是单个buffer空间的借调,则将该单个buffer空间的归属信息注册到恢复线程,同时将该单个buffer空间的归属信息同步到对应的控制信息中;
如果是连续多个buffer空间的借调,则将该连续多个buffer空间的归属信息注册到恢复线程,同时将该连续多个buffer空间的归属信息同步到对应的控制信息中;
其中,所述归属信息包括对应buffer空间的buffer类型、buffer位置标识以及所在的buffer池。
5.如权利要求4所述的基于DPDK的大页内存动态迁移的方法,其特征在于,所述当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据该控制信息将借调的大页内存空间释放回对应buffer池,具体为:
当大页内存使用者主动释放已申请的大页内存空间时,跟踪该大页内存空间的控制信息,并根据控制信息判断申请该大页内存空间时的来源;
如果是直接从所述大页内存池中申请的,则直接将申请的大页内存空间释放回所述大页内存池中;
如果是从某个buffer池中借调的,则根据控制信息中记录的buffer空间的归属信息,将借调的buffer空间释放回对应的buffer池中。
6.如权利要求5所述的基于DPDK的大页内存动态迁移的方法,其特征在于,如果是单个buffer空间的借调,则所述将借调的buffer空间释放回对应的buffer池中具体为:
如果该buffer空间尚未被填充,则直接将借调的单个buffer释放回对应buffer池;如果该buffer空间已被填充但未被使用,则将填充的buffer空间释放后,再将借调的单个buffer释放回对应buffer池;如果该buffer空间已被填充且正在被使用,则等待buffer使用完归还到对应buffer池后,将填充的buffer空间释放,再将借调的单个buffer释放回对应buffer池;
如果是连续多个buffer空间的借调,则所述将借调的buffer空间释放回对应的buffer池中具体为:
如果该buffer空间尚未被填充,则直接将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池;如果该buffer空间已被填充但未被使用,则将填充的buffer空间释放后,再将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池;如果该buffer空间已被填充且正在被使用,则等待buffer使用完归还到对应buffer池后,将填充的buffer空间释放,再将借调的连续多个buffer拆分为独立的buffer释放回对应buffer池。
7.如权利要求1所述的基于DPDK的大页内存动态迁移的方法,其特征在于,在所述当大页内存使用者从大页内存池中申请大页内存失败时,根据所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间之前,所述方法还包括:
根据buffer池的使用场景和重要程度逆向定义每个buffer池的借调优先级,并根据对应借调优先级设置每个buffer池的借调权重;
根据对应借调权重计算每个buffer池预分配的内存空间,并将这部分内存空间分割为多个buffer,将剩余的连续大页内存空间作为可借调内存。
8.如权利要求7所述的基于DPDK的大页内存动态迁移的方法,其特征在于,当大页内存使用者从大页内存池中申请大页内存失败时,所述所需内存大小从存在足够空闲大页内存的buffer池中借调所需的大页内存空间,具体为:
将所需内存大小分别与每个buffer池中的当前可借调内存大小进行比较,以便判断是否存在当前可借调内存大小满足借调需求的buffer池;
如果存在当前可借调内存大小满足借调需求的buffer池,则在这些buffer池中选择借调优先级最高的buffer池,从该buffer池中返回要借调的大页内存空间,并更新该buffer池的当前可借调内存大小;
如果不存在当前可借调内存大小满足借调需求的buffer池,表示无大页内存空间可借调,则返回错误。
9.如权利要求8所述的基于DPDK的大页内存动态迁移的方法,其特征在于,所述将借调的该大页内存空间的归属信息注册到恢复线程,同时将该大页内存空间的归属信息同步到对应的控制信息中,具体为:
根据返回的大页内存空间,将该大页内存空间的归属信息注册到恢复线程,并利用恢复线程维护对应buffer池中可借调内存的使用状态链表,同时将该大页内存空间的归属信息同步到对应的控制信息中;
其中,可借调内存的使用状态链表包括空闲内存链表、借调内存链表和填充内存链表;所述空闲内存链表的每个节点表示一段连续空闲的内存空间,所述借调内存链表的每个节点表示一段被借调的内存空间,所述填充内存链表的每个节点表示一段被大页内存池填充的内存空间。
10.一种基于DPDK的大页内存动态迁移的装置,其特征在于,包括至少一个处理器和存储器,所述至少一个处理器和存储器之间通过数据总线连接,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令在被所述处理器执行后,用于完成权利要求1-9任一所述的基于DPDK的大页内存动态迁移的方法。
CN202110362272.6A 2021-04-02 2021-04-02 一种基于dpdk的大页内存动态迁移的方法与装置 Active CN113094173B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110362272.6A CN113094173B (zh) 2021-04-02 2021-04-02 一种基于dpdk的大页内存动态迁移的方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110362272.6A CN113094173B (zh) 2021-04-02 2021-04-02 一种基于dpdk的大页内存动态迁移的方法与装置

Publications (2)

Publication Number Publication Date
CN113094173A CN113094173A (zh) 2021-07-09
CN113094173B true CN113094173B (zh) 2022-05-17

Family

ID=76673833

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110362272.6A Active CN113094173B (zh) 2021-04-02 2021-04-02 一种基于dpdk的大页内存动态迁移的方法与装置

Country Status (1)

Country Link
CN (1) CN113094173B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115391032A (zh) * 2022-08-15 2022-11-25 上海慧程工程技术服务有限公司 一种用于工业物联网边缘设备的内存优化方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5133058A (en) * 1989-09-18 1992-07-21 Sun Microsystems, Inc. Page-tagging translation look-aside buffer for a computer memory system
CN104516826A (zh) * 2013-09-30 2015-04-15 华为技术有限公司 一种虚拟大页面与物理大页面的对应方法及装置
CN106970882A (zh) * 2017-03-10 2017-07-21 浙江大学 一种基于Linux大页内存的易扩展页面架构
CN108804350A (zh) * 2017-04-27 2018-11-13 华为技术有限公司 一种内存访问方法及计算机系统
CN111562975A (zh) * 2020-05-20 2020-08-21 苏州浪潮智能科技有限公司 一种虚拟机大页内存的开机调度方法、装置、设备和介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061712B2 (en) * 2016-05-10 2018-08-28 Oracle International Corporation Virtual memory page mapping overlays

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5133058A (en) * 1989-09-18 1992-07-21 Sun Microsystems, Inc. Page-tagging translation look-aside buffer for a computer memory system
CN104516826A (zh) * 2013-09-30 2015-04-15 华为技术有限公司 一种虚拟大页面与物理大页面的对应方法及装置
CN106970882A (zh) * 2017-03-10 2017-07-21 浙江大学 一种基于Linux大页内存的易扩展页面架构
CN108804350A (zh) * 2017-04-27 2018-11-13 华为技术有限公司 一种内存访问方法及计算机系统
CN111562975A (zh) * 2020-05-20 2020-08-21 苏州浪潮智能科技有限公司 一种虚拟机大页内存的开机调度方法、装置、设备和介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Dpdk框架介绍;TCH_world;《https://blog.csdn.net/city_of_skey/article/details/85038684》;20181216;全文 *

Also Published As

Publication number Publication date
CN113094173A (zh) 2021-07-09

Similar Documents

Publication Publication Date Title
US20220318064A1 (en) Technologies for batching requests in an edge infrastructure
CN108780386B (zh) 一种数据存储的方法、装置和系统
US8452819B1 (en) Methods and apparatus for optimizing resource utilization in distributed storage systems
KR102193012B1 (ko) 분산 처리 시스템 및 이의 동작 방법
TW202021328A (zh) 統一資源調度協調器及其創建虛擬機和/或容器的方法、統一資源調度系統
US20160330281A1 (en) Systems and methods to improve read/write performance in object storage applications
CN105549904A (zh) 一种应用于存储系统中的数据迁移方法及存储设备
CN105095094A (zh) 内存管理方法和设备
CN104750541A (zh) 一种虚拟机迁移方法
CN112799841B (zh) 一种数据对象存储管理的方法和装置
US11036535B2 (en) Data storage method and apparatus
WO2022062833A1 (zh) 内存分配方法及相关设备
CN102136993A (zh) 一种数据迁移的方法、装置和系统
CN113094173B (zh) 一种基于dpdk的大页内存动态迁移的方法与装置
CN110493060A (zh) 一种虚拟ip分配方法及相关装置
CN104793981A (zh) 一种虚拟机集群的在线快照管理方法及装置
CN104965793B (zh) 一种云存储数据节点装置
CN107920129A (zh) 一种数据存储的方法、装置、设备以及云存储系统
KR20170081977A (ko) 효율적으로 파일을 생성하기 위한 분산 파일 시스템 및 방법
CN105450679A (zh) 进行数据云存储的方法及系统
CN112104729A (zh) 一种存储系统及其缓存方法
CN106970830A (zh) 一种分布式虚拟机的存储控制方法、及虚拟机
CN113542013B (zh) 虚拟化网络功能管理消息分配方法、装置及设备
EP4020208A1 (en) Memory pool data placement technologies
WO2020215223A1 (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