CN103530241B - 一种用户态的双控内存镜像实现方法 - Google Patents

一种用户态的双控内存镜像实现方法 Download PDF

Info

Publication number
CN103530241B
CN103530241B CN201310449375.1A CN201310449375A CN103530241B CN 103530241 B CN103530241 B CN 103530241B CN 201310449375 A CN201310449375 A CN 201310449375A CN 103530241 B CN103530241 B CN 103530241B
Authority
CN
China
Prior art keywords
vphy
address
local terminal
user space
recorded
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
CN201310449375.1A
Other languages
English (en)
Other versions
CN103530241A (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.)
Innovation Technology Co., Ltd.
Shenzhen Innovation Technology Co., Ltd.
Original Assignee
Innovation And Technology Storage Technology Co Ltd
UIT STORAGE TECHNOLOGY (SHENZHEN) 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 Innovation And Technology Storage Technology Co Ltd, UIT STORAGE TECHNOLOGY (SHENZHEN) Co Ltd filed Critical Innovation And Technology Storage Technology Co Ltd
Priority to CN201310449375.1A priority Critical patent/CN103530241B/zh
Publication of CN103530241A publication Critical patent/CN103530241A/zh
Application granted granted Critical
Publication of CN103530241B publication Critical patent/CN103530241B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明公开了用户态的双控内存镜像实现方法:当每次进行内存申请时,确定所分配的内存段;针对每个内存段,分别将其物理地址映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中;各本端vphy地址组成一个连续的vphy地址段,将该vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中;获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中;对于任意两个物理地址,如果其对应的对端vphy地址是连续的,则对应的本端vphy地址也是连续的;分别将本端各连续的vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。应用本发明所述方案,能够提高用户态存储系统的稳定性。

Description

一种用户态的双控内存镜像实现方法
技术领域
本发明涉及存储技术,特别涉及一种用户态的双控内存镜像实现方法。
背景技术
现有双控内存(cache)镜像主要采用以下实现方式:系统上电时保留一定的内存,并将其中的一半内存作为对端镜像内存,双控之间通过快速外设部件互连(PCIE,PeripheralComponentInterconnectExpress)或其它高速总线来访问对端内存;当要对某一个物理地址进行写操作时,会同步的对对端相应的物理地址进行写操作。
但是,上述方式主要适用于内核态,随着用户态文件系统以及分布式文件系统的发展,用户态存储开发已经成为一种趋势,而现有技术中还没有一种适用于用户态的双控内存镜像实现方式。
发明内容
有鉴于此,本发明提供了一种用户态的双控内存镜像实现方法,能够提高用户态存储系统的稳定性。
为了达到上述目的,本发明的技术方案是这样实现的:
一种用户态的双控内存镜像实现方法,包括:
进行M次内存申请,M为正整数;其中,针对每次内存申请,分别进行如下处理:确定为本次申请所分配的N个内存段,N为正整数;针对每个内存段,分别将其物理地址映射到一个本端虚拟物理vphy地址,并将映射关系记录到本端的vphy表中;各本端vphy地址组成一个连续的vphy地址段,将该vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中;
获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中;其中,对于任意两个物理地址,如果其对应的对端vphy地址是连续的,则对应的本端vphy地址也是连续的;分别将本端未进行映射的、各连续的vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。
可见,采用本发明所述方案,通过vphy表和用户态地址映射表等,可实现用户态的双控内存镜像,从而能够极大地提高用户态存储系统的稳定性;而且,本发明所述方案实现起来简单方便,便于普及和推广。
附图说明
图1为本发明用户态的双控内存镜像实现方法实施例的流程图。
图2为本发明本端的vphy表中所包括的内容第一示意图。
图3为本发明用户态地址映射表中所包括的内容第一示意图。
图4为本发明本端的vphy表中所包括的内容第二示意图。
图5为本发明用户态地址映射表中所包括的内容第二示意图。
图6为本发明本端的vphy表中所包括的内容第三示意图。
图7为本发明用户态地址映射表中所包括的内容第三示意图。
具体实施方式
针对现有技术中存在的问题,本发明中提出一种用户态的双控内存镜像实现方案。
图1为本发明用户态的双控内存镜像实现方法实施例的流程图。如图1所示,包括步骤11~15。
步骤11:进行M次内存申请,M为正整数;其中,针对每次内存申请,分别执行步骤12~13。
步骤12:确定为本次申请所分配的N个内存段,N为正整数;针对每个内存段,分别将其物理地址映射到一个本端虚拟物理(vphy)地址,并将映射关系记录到本端的vphy表中;各本端vphy地址组成一个连续的vphy地址段。
步骤13:将该vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。
步骤14:获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中;其中,对于任意两个物理地址,如果其对应的对端vphy地址是连续的,则对应的本端vphy地址也是连续的。
步骤15:分别将本端未进行映射的、各连续的vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。
其中,所述针对每个内存段,分别将其物理地址映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中的具体实现方式可为:针对每个内存段,分别在本端的vphy表中创建一个本端vphy节点,用于记录该内存段的物理地址;该本端vphy节点所对应的vphy地址即为所映射到的本端vphy地址。
类似地,所述获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中的具体实现方式可为:针对其中的每个对端vphy节点,分别在本端的vphy表中创建一个本端vphy节点,用于记录对应的对端vphy节点中所记录的物理地址加上预定偏移量后的结果;该本端vphy节点所对应的vphy地址即为所映射到的本端vphy地址。
另外,在实际应用中,vphy表中还会进一步包括一个vphy0节点,用于记录所在vphy表的物理地址。
相应地,用户态地址映射表中还会进一步保存有:vphy0节点对应的vphy地址与映射到的用户态虚拟地址之间的映射关系。
以下结合示例,对本发明所述方案的具体实现作进一步的详细说明。
1)创建初始化vphy表
本发明所述方案中,在内核态,可利用一个内核内存管理模块,来管理vphy表。
当内核内存管理模块加载时,可创建初始化的vphy表,即本端的vphy表;图2为本发明本端的vphy表中所包括的内容第一示意图;如图2所示,其中包括一个vphy0节点,用于记录该vphy表的物理地址。
另外,通过内存文件映射(mmap)功能,可以将vphy0节点对应的vphy地址映射到一个用户态虚拟地址Addr0,并可将映射关系记录到用户态地址映射表中;图3为本发明用户态地址映射表中所包括的内容第一示意图。
mmap功能的具体实现为现有技术。
需要说明的是,以上之所以将vphy表称为本端的vphy表,是为了与后续出现的对端的vphy表进行区分,以避免发生混淆,由于和对端的用户态地址映射表不会发生混淆,因此将本端的用户态地址映射表直接称为用户态地址映射表。
2)进行内存申请
本发明所述方案中,可通过cache模块来进行内存申请以及用户态虚拟地址的访问等。
cache模块向内核内存管理模块进行内存申请,如申请2G内存,用于内存镜像;但通常来说,系统中是不会存在这样的大段连续内存的,为此,可分配相同或不同大小的一系列内存段,各内存段的大小之和为2G即可;比如,可分配2048个内存段,每个内存段的大小均为1M。
另外,在实际应用中,cache模块可以只向内核内存管理模块发送一次内存申请,一次即申请2G的内存,或者,也可以分多次进行申请,比如,分十次进行申请,每次申请200M的内存,具体实现方式不限,较佳地,可采用多次申请的方式。
相应地,针对每次内存申请,可分别进行如下处理:确定为本次申请所分配的N个内存段;针对每个内存段,分别在本端的vphy表中创建一个本端vphy节点,用于记录该内存段的物理地址,各本端vphy节点所对应的本端vphy地址(大小与对应的内存段的大小相同)组成一个连续的vphy地址段(大小与本次所申请的内存大小相同);将该vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。
举例说明:
图4为本发明本端的vphy表中所包括的内容第二示意图;如图4所示,假设某一次内存申请,共申请2G内存,针对本次申请,共分配了2048个内存段,即N的取值为2048,每个内存段的大小均为1M;那么,针对每个内存段,分别在本端的vphy表中创建一个本端vphy节点,即vphy1~vphy2048,每个vphy节点用于记录对应的内存段的物理地址;各本端vphy节点所对应的本端vphy地址组成一个连续的vphy地址段,如位于本端vphy地址中1G~3G的位置;
图5为本发明用户态地址映射表中所包括的内容第二示意图;如图5所示,通过mmap功能,将vphy1~vphy2048所对应的vphy地址段映射到一个用户态虚拟地址Addr1(连续的2G),从而完成本端地址映射的工作。
可以看出,通过采用上述方式,能够实现将不连续的物理地址,映射到连续的vphy地址。
cache模块每进行一次内存申请,则会按照上述方式进行一次处理,相应地,每次都会映射出一个连续的vphy地址段,并将该vphy地址段映射到一个用户态虚拟地址。
3)获取对端的vphy表
当获取到对端的vphy表之后,可针对其中的每个对端vphy节点,分别在本端的vphy表中创建一个本端vphy节点,用于记录对应的对端vphy节点中所记录的物理地址加上预定偏移量后的结果;其中,对于任意两个物理地址,如果其对应的对端vphy地址是连续的,则对应的本端vphy地址也是连续的;之后,分别将本端未进行映射的、各连续的vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中。
在双控内存镜像中,物理地址是对称分布的,如果需要访问对端的镜像地址,只需要简单地加上一个偏移量即可,所述偏移量的具体取值为预先设定。
由于vphy表中的vphy0字节用于保存vphy表本身的物理地址,且映射到一个用户态虚拟地址Addr0,因此,cache模块可以直接访问对端的vphy表。
cache模块获取到对端的vphy表后,可以通过与内核内存管理模块之间的设置(set)接口,将对端的vphy表中的相关信息加入到本端的vphy表;之后,可通过mmap功能,映射得到所需的用户态虚拟地址。
举例说明:
图6为本发明本端的vphy表中所包括的内容第三示意图;如图6所示,针对每个对端vphy节点,分别在本端的vphy表中创建一个本端vphy节点,即vphy2049~vphy4097,对应对端vphy节点vphy1~vphy2048;vphy2049~vphy4097所对应的本端vphy地址组成一个连续的vphy地址段,如位于本端vphy地址中3G~5G的位置;
图7为本发明用户态地址映射表中所包括的内容第三示意图;如图7所示,通过mmap功能,将vphy2049~vphy4097所对应的vphy地址段映射到一个用户态虚拟地址Addr2(连续的2G),从而完成对端地址映射的工作。
至此,即完成了用户态的双控内存镜像的搭建,访问Addr1,就可以访问本端内存,访问Addr2,就可以访问对端内存。
具体来说,当访问任一用户态虚拟地址时,可根据用户态地址映射表确定出该用户态虚拟地址对应的本端vphy地址;并可根据本端的vphy表,确定出该本端vphy地址对应的物理地址;进而,可通过调用直接内存读取(DMA,DirectMemoryAccess)引擎,访问该物理地址,避免通过中央处理单元(CPU,CentralProcessingUnit)进行内存拷贝,具体实现为现有技术。
另外,现有双控内存镜像的实现方式中,内存占用量是固定的,在系统上电时保留,后续无法根据系统负荷等进行动态调整,从而无法实现内存的合理利用。
针对该问题,本发明所述方案中提出,可根据实际需求,动态调整所申请的内存;所述调整包括:申请增加新的内存、释放已申请的部分内存。
另外,当每次对所申请的内存进行调整时,还需要根据所作调整,对本端的vphy表以及用户态地址映射表进行适应性调整。
比如,如果确定当前的内存不够用,则可再申请200M的内存,相应地,需要在本端的vphy表中新创建200(假设分配了200个内存段,每个内存段的大小为1M)个本端vphy节点,且这200个本端vphy节点所对应的本端vphy地址组成的一个连续的vphy地址段(200M),将该vphy地址段映射到一个用户态虚拟地址,如Addr3,并将映射关系加入到用户态地址映射表中。
再比如,如果确定当前的内存过剩,则可释放掉200M的内存,相应地,从本端的vphy表以及用户态地址映射表中删除与这200M内存相对应的vphy节点以及映射关系等。
如前所述,cache模块可以只向内核内存管理模块发送一次内存申请,一次即申请2G的内存,或者,也可以分多次进行申请,比如,分十次进行申请,每次申请200M,较佳地,可采用多次申请的方式。这是因为:如果采用前一种申请方式,后续当释放掉部分内存后,还需要根据剩下的内存重新进行用户态虚拟地址的映射等,而采用后一种方式,则可以一次申请的内存大小为单位进行释放,如释放200M或400M,从而可避免上述问题,进而简化了处理流程。
再有,当确定对端的vphy表每次发生调整时,也需要根据所作调整,对本端的vphy表以及用户态地址映射表进行适应性调整,具体实现不再赘述。
总之,采用本发明所述方案,能够实现用户态的双控内存镜像,从而能够极大地提高用户态存储系统的稳定性;而且,可对所申请的内存进行动态调整,从而使得所申请的内存能够得到更为合理的利用;另外,本发明所述方案实现起来简单方便,便于普及和推广。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (6)

1.一种用户态的双控内存镜像实现方法,其特征在于,包括:
进行M次内存申请,M为正整数;其中,针对每次内存申请,分别进行如下处理:确定为本次申请所分配的N个内存段,N为正整数;针对每个内存段,分别将其物理地址映射到一个本端虚拟物理vphy地址,并将映射关系记录到本端的vphy表中;各本端vphy地址组成一个连续的vphy地址段,将该vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中;
获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中;其中,对于任意两个物理地址,如果其对应的对端vphy地址是连续的,则对应的本端vphy地址也是连续的;分别将本端未进行映射的、各连续的vphy地址段映射到一个用户态虚拟地址,并将映射关系记录到用户态地址映射表中;
该方法进一步包括:
根据实际需求,动态调整所申请的内存;
所述调整包括:申请增加新的内存、释放已申请的部分内存。
2.根据权利要求1所述的方法,其特征在于,
所述针对每个内存段,分别将其物理地址映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中包括:
针对每个内存段,分别在本端的vphy表中创建一个本端vphy节点,用于记录该内存段的物理地址;该本端vphy节点所对应的vphy地址即为所映射到的本端vphy地址;
所述获取对端的vphy表,将其中的各物理地址分别映射到一个本端vphy地址,并将映射关系记录到本端的vphy表中包括:
针对每个对端vphy节点,分别在本端的vphy表中创建一个本端vphy节点,用于记录对应的对端vphy节点中所记录的物理地址加上预定偏移量后的结果;该本端vphy节点所对应的vphy地址即为所映射到的本端vphy地址。
3.根据权利要求2所述的方法,其特征在于,
所述vphy表中进一步包括一个vphy0节点,用于记录所在vphy表的物理地址;
所述用户态地址映射表中进一步保存有:vphy0节点对应的vphy地址与映射到的用户态虚拟地址之间的映射关系。
4.根据权利要求1所述的方法,其特征在于,该方法进一步包括:
当每次对所申请的内存进行调整时,根据所作调整,对本端的vphy表以及用户态地址映射表进行适应性调整。
5.根据权利要求1所述的方法,其特征在于,该方法进一步包括:
当确定对端的vphy表每次发生调整时,根据所作调整,对本端的vphy表以及用户态地址映射表进行适应性调整。
6.根据权利要求1~5中任一项所述的方法,其特征在于,该方法进一步包括:
当访问任一用户态虚拟地址时,根据用户态地址映射表确定出该用户态虚拟地址对应的本端vphy地址;
根据本端的vphy表,确定出该本端vphy地址对应的物理地址;通过调用直接内存读取DMA引擎,访问该物理地址。
CN201310449375.1A 2013-09-24 2013-09-24 一种用户态的双控内存镜像实现方法 Active CN103530241B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310449375.1A CN103530241B (zh) 2013-09-24 2013-09-24 一种用户态的双控内存镜像实现方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310449375.1A CN103530241B (zh) 2013-09-24 2013-09-24 一种用户态的双控内存镜像实现方法

Publications (2)

Publication Number Publication Date
CN103530241A CN103530241A (zh) 2014-01-22
CN103530241B true CN103530241B (zh) 2016-04-13

Family

ID=49932270

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310449375.1A Active CN103530241B (zh) 2013-09-24 2013-09-24 一种用户态的双控内存镜像实现方法

Country Status (1)

Country Link
CN (1) CN103530241B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103970680A (zh) * 2014-04-28 2014-08-06 上海华为技术有限公司 内存管理方法、装置及嵌入式系统
CN104252419B (zh) 2014-09-16 2017-09-19 华为技术有限公司 一种内存分配的方法及装置
CN106610878B (zh) * 2016-12-19 2020-02-07 北海市云盛科技有限公司 双控制器系统的故障调试方法
CN108874468B (zh) * 2018-06-20 2021-03-26 深圳市腾讯网络信息技术有限公司 应用程序的加载方法、装置、计算机设备及存储介质
CN118138558B (zh) * 2024-05-08 2024-08-06 珠海星云智联科技有限公司 基于直接内存访问的报文发包方法、计算机设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统
CN103034544A (zh) * 2012-12-04 2013-04-10 杭州迪普科技有限公司 一种用户态与内核态共享内存的管理方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8180996B2 (en) * 2008-05-15 2012-05-15 Calxeda, Inc. Distributed computing system with universal address system and method

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402487A (zh) * 2011-11-15 2012-04-04 北京天融信科技有限公司 一种零拷贝接收报文的方法和系统
CN103034544A (zh) * 2012-12-04 2013-04-10 杭州迪普科技有限公司 一种用户态与内核态共享内存的管理方法和装置

Also Published As

Publication number Publication date
CN103530241A (zh) 2014-01-22

Similar Documents

Publication Publication Date Title
CN103530241B (zh) 一种用户态的双控内存镜像实现方法
US11042297B2 (en) Techniques to configure a solid state drive to operate in a storage mode or a memory mode
CN103164278B (zh) 一种面向多核处理器的实时动态内存管理器实现方法
CN103914405B (zh) 包括存储管理单元的片上系统及其存储地址转换方法
US20080276035A1 (en) Wear Leveling
US20130111182A1 (en) Storing a small file with a reduced storage and memory footprint
CN105335309B (zh) 一种数据传输方法及计算机
US20140040577A1 (en) Automatic Use of Large Pages
CN110187832B (zh) 一种数据操作的方法、设备和系统
US8458434B2 (en) Unified virtual contiguous memory manager
KR20180041037A (ko) 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
CN114556881A (zh) 一种地址翻译方法及装置
CN107250995B (zh) 存储器管理设备
CN103229150B (zh) 数据控制方法及系统
US10725690B2 (en) Non-volatile memory cloning with hardware copy-on-write support
KR20140073955A (ko) 메모리 시스템 및 그 구동 방법
CN106295413B (zh) 半导体装置
CN108717395B (zh) 一种降低动态块映射信息占用内存的方法及装置
US20170344504A1 (en) Method for accessing a number of slave devices with registers by a master device over a network
CN108519860B (zh) 一种ssd读命中的处理方法和装置
CN111651124B (zh) Ssd映射表多核分区并行重建方法、装置、设备及介质
US8762647B2 (en) Multicore processor system and multicore processor
US20210081328A1 (en) Unified kernel virtual address space for heterogeneous computing
DE102020129118A1 (de) Direct-Map-Memory-Erweiterung für Storage Class Memory
CN107967222A (zh) 一种SPI-Nand查找数据页的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder
CP01 Change in the name or title of a patent holder

Address after: 518057 Shenzhen Software Park, No. 9, 501, 502, Science and Technology Middle Road, Nanshan District, Shenzhen City, Guangdong Province

Co-patentee after: Innovation Technology Co., Ltd.

Patentee after: Shenzhen Innovation Technology Co., Ltd.

Address before: 518057 Shenzhen Software Park, No. 9, 501, 502, Science and Technology Middle Road, Nanshan District, Shenzhen City, Guangdong Province

Co-patentee before: Innovation and Technology Storage Technology Co., Ltd.

Patentee before: UIT Storage Technology (Shenzhen) Co., Ltd.