新型非易失性存储器作为交换分区的研究(能耗与性能的提升)

原创 2016年08月31日 20:05:58

一. 动机

1. 移动应用功能越来越强大(pokemon Go),占用内存越来越大,功耗越来越高。同时由于Android进程管理的特性:将打开的进程缓存在后台,进程的数据包括代码,运行时数据,打开的文件缓存等统统驻留在内存。这就导致随着手机系统的使用,内存会越来越不够用。特别是对内存偏小的手机,内存不够用的情形(进程被杀死,应用程序的切换时间变长,用户体验下降)会出现的更早,更频繁。

2. 所以我们可以采用增加交换分区的方式来扩充内存容量。但是传统的交换分区会在某个时间点存在性能下降的问题,比如,在低内存情况下,应用程序的启动时间会突然变得很长。

3. 现在的内存采用的动态随机存储器(DRAM),它是一种需要动态刷新的存储器,其所产生的能耗较高。实验数据表明,在待机状态下,DRAM的功耗占到系统总功耗的30%甚至以上。所以我们要在扩增内存容量的同时,要考虑到降低功耗的要求。


二. 基本思路

该技术将一种新型的非易失性存储器作为交换分区,跟传统交换分区不同的是,这块交换分区设备要挂载到内存总线上,也就是说,可以被操作系统直接寻址找到存储单元。页面的换入换出就是通过内存拷贝的方式实现,绕开了缓慢的I/O层传输。这样可以以接近DRAM的性能来增大内存的容量,同时也可以利用NVM的低功耗的特性来降低手机系统的功耗。


三. 技术重点

1. 内存页面管理方式。

  • 采用的Linux内核中LRU链表进行冷热页面分离。页面主要由两个双向链表进行管理(分别存放活跃的和非活跃的页面):当页面才分配时,它就被从空闲链表移动到活动链表中,随着进程的执行,如果一段时间后该页面没有被使用以后,就会将页面从活跃链表移动到非活跃链表的尾部。我们要进行页面交换的目标页面就是从非活跃链表中头部获取的。这种管理方式同时这也是内核中传统的页面管理方式,所以可以很好的复用内核中的软件模块,提升兼容性。
  • 通过memcpy函数将页面从DRAM中拷贝到交换分区中。这个过程需要通过void * kmap(structpage *page)函数(一次映射一个页面,参数为struct page * page,所以传入高端内存区的物理地址,返回其线性地址(高端内存区共用128MB线性地址))提前建立一个虚拟地址到交换分区物理地址的映射,这样才能进行拷贝。

2. 页面反向映射技术。

  • try_to_unmap_anon()函数进行页框的反向映射。
  • 每个页描述符(struct page)中的mapping字段存放了该物理页框对应的anon_vma结构的地址。根据anon_vma是一个双向链表的表头,这个双向链表存放的是共享该页面的各个进程中的线性区。根据各个线性区就可以找到各个进程对应的内存描述符(mm_struct),其中就存放了该进程的页全局目录(pgd)的地址,从而可以找到对应的页表项。

3. 基于最小堆的损耗均衡算法(数据结构如下图所示:空闲页面双向链表+全局最小堆)

  • 给每一个swap slot添加一个age的标志位,用来记录该页槽被写的次数。
  • 按age大小通过一个最小堆将页槽组织起来,堆顶的页槽就是被写次数最少的swap slot;同时,用双向链表将空闲页槽组织起来,每次从链表头取页面。
  • 每次申请页面换入的时候,取空闲页面的时候,就要将取得的空闲页面与堆顶页面的age进行比较,如果没有超过阈值,则将直接进行页面换入(写页槽)。如果超过了预设阈值,就要将数据写到堆顶的页面中。如果堆顶页面是空闲页面,则直接将数据写入;如果不是空闲页面,则先将数据写入到取到的空闲页面中,然后再将要换入的数据写到堆顶的页面中。

4. 写时拷贝技术

  • 引入的目的是为了降低页面换入换出的开销,间接降低了对NVM的写。对于读请求,使得当请求的页面存在于NVM交换分区时,可以不用将页面换回内存,而是直接通过页面翻译出来的物理地址去寻址。这里利用了NVM的字节寻址的特点,同时利用了NVM的接近于DRAM的读性能。

  • 改写缺页中断函数,对于写请求,则将页面换入内存,从而直接减少对NVM区域的写操作。

四. 总结

1. 利用Linux内核内存页面冷热数据管理技术进行页面在DRAM和PCM之间的迁移,代价低,兼容性强;

2. 利用Linux页面反向映射技术解决了因迁移内存页面而带来的页表映射以及页面共享带来的问题,消除了系统死机bug;

3. 设计基于最小堆的损耗均衡算法,将写操作均衡化到PCM设备的各个物理页块上,延长了PCM使用寿命;

4. 设计写时拷贝技术,改写了内核缺页中断部分,将页面换入操作减少了40%~75%。

5. 相比传统交换分区,低内存情况下,应用程序的启动时间缩短了20%左右。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

现代嵌入式计算 - 第4章 - 嵌入式平台架构 (第3部分,非易失性存储器技术)

非易失性存储器 所有的嵌入式系统都需要某种形式的非易失性存储器。非易失性存储器在设备关电后也能保持数据。有一系列的存储技术,具有不同的性能,密度,可靠性和大小。目前,有两个主要的非易失性存储技术:最...

【转载】Z-STACK中关于非易失性存储器Nv操作实例

【转载】Z-STACK中关于非易失性存储器Nv操作实例在Z-STACK中Nv存储器主要用于保存网络的配置参数,如网络地址,使 系统在掉电重启仍然能读取一些参数,自动加入到原来的网络中,这样其网络地址没...

现代嵌入式计算 - 第4章 - 嵌入式平台架构 (第2部分, 易失性存储器技术)

易失性存储器技术 一个完整的嵌入式系统包括许多不同的存储技术。 Intel平台有两种不同的地址类型。第一个是I/O设备;通过in/out汇编指令读取,或者mov指令把数据送到MMIO空间。当一个程...

MTD,文件系统,存储器分区的个人理解

MTD是 memory technology device的简称 (奇怪的中文译名内存技术设备) 个人理解:MTD实际上是跟VFS差不多的东西,VFS是虚拟文件系统,在VFS中有对各种具体文件系统的接...

基于PNP自动映射分区的安全USB技术研究与实现

摘  要:目前多数安全USB设备使用时,需要开启一个应用程序界面来对USB设备进行读写、加密/解密。对此,提出并实现了一种利用硬件PNP技术自动对USB映射为本地盘符,拔下时自动删除盘符的技术。读写文...
  • wzsy
  • wzsy
  • 2011年12月02日 13:59
  • 1542

SPLIT 分区的简单研究

1、split时需要有多少空闲空间 2、split会不会产生大量的redo 3、split的实现原理 我们要分两种情况讨论: 1、在split边界的两边都有值 2、只在split边界的一...

数据挖掘在公共建筑能耗分析中的应用研究

本文提出运用数据挖掘技术进行公共建筑的能耗分析,以提高节能决策的有效性,主要研究内容及方法如下:  ①能量利用效率的量化。针对能量利用效率存在简单判定的不足,提出能耗分布率的概念并给出其计算公式。  ...

range,list和Hash 分区的性能

这里我主要比较查询性能差异 首先创建如题目1中的三张表并增加记录至100w多创建的分区内的记录尽量保持平衡也就是每个分区的记录数相近   不加索引下执行下面的查询 SELECT *...
  • Cages
  • Cages
  • 2012年07月17日 14:40
  • 3292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:新型非易失性存储器作为交换分区的研究(能耗与性能的提升)
举报原因:
原因补充:

(最多只允许输入30个字)