数据密集型应用程序在运行期间通常需要占用大量物理内存空间[-]。当系统的可用物理内存小于某个阈值时,页面交换机制会临时将不太可能访问的冷内存页面换出到交换分区[]。一个4 KB的内存页面通常包含具有不同程度的高温和低温的多个用户数据。当再次访问换出的页面中的某些数据时,系统需要交换内存页面。内存在分区中进行了交换,这增加了系统的I / O开销。由于基础存储设备的访问速度远不同于动态随机访问存储器(DRAM,动态随机访问存储器),因此对于数据密集型应用程序,内存和交换分区之间的数据交换将严重影响响应速度。系统。
越来越多的公司,例如Facebook [],Google [],MySpace []等,都使用基于闪存的固态驱动器(SSD,固态驱动器)来部分或完全替换传统硬盘。针对闪存的特点,提出了SSD交换分区的优化方案。 Sohyang Ko [-],Xuangsha Xu []等人优化了SSD垃圾收集算法,以减少SSD的擦除和数据复制次数。 Yunjoo Park []和其他人开发了新的非易失性存储设备相变存储器(PCM,相变存储器)被用作交换分区的存储介质。通过减小页面大小并关闭预读选项,可以提高基于PCM的交换分区的性能。以上研究基于存储介质的特性并对其进行了优化。它自己的管理过程在一定程度上克服了将其用作交换分区存储介质时存在的问题。
对于数据密集型应用程序,作者首先优化DRAM和SSD交换设备之间的数据交换过程,并提出了一种细粒度的内存管理解决方案(FG_MM,细粒度的内存管理)。定义一个用户应用程序的数据空间作为数据对象,FG_MM以数据对象[]的粒度管理内存,以确保所有要换出的数据都是冷数据对象,从而有效地防止了部分热数据被换出而导致的基础存储。增加设备访问次数。
1 FG_MM1.1总体架构
FG_MM的总体架构如下所示。 FG_MM首先向系统申请一个连续的存储空间,以供其自身管理。当用户通过FG_MM中的内存分配接口申请内存空间时,FG_MM将从该内存空间中分配内存。当请求的内存空间用完时,FG_MM将再次向系统申请内存空间以进行分配。当用户需要访问内存数据时,如果访问的数据在DRAM内存中,则系统将所需的数据直接返回给用户;如果访问的数据不在DRAM内存中,则会发生系统页面错误异常,将触发FG_MM中的页面错误异常(FGMM_Page-Fault,精细颗粒内存管理页面-错误)处理过程:如果数据为空间已分配系统将系统的页面错误异常处理功能转移到系统中进行页面错误异常处理;如果数据空间由FG_MM分配,则搜索数据对象查找表(OT,对象表),将虚拟地址记录到SSD逻辑中。地址的映射关系是获取SSD中页面的逻辑地址。根据访问页面的虚拟地址,然后根据逻辑地址,将数据从SSD交换到DRAM,然后返回给用户。
图1
图1

图1 FG_MM系统框图
1.2虚拟页面的管理及其与物理页面的映射
为了以数据对象的粒度实现DRAM和SSD之间的数据交换,每个虚拟内存页面在虚拟内存分配期间仅保存1个数据对象[]。如果虚拟页面和物理页面之间仍然保持一一对应的关系,将造成很多物理内存的浪费。因此,采用了将多个虚拟页面映射到同一物理页面的多对一映射机制[]。
一个物理页面被分成相同大小的多个细粒度页面(FG_page,细粒度页面),划分的粒度G可以是0.5、[k5]1.5、2、3.5、4 KB。如果4 KB不能被G整除,则4 KB的剩余部分将划分为相应粒度的存储空间,例如,当G =1.5 KB时,将4 KB剩余的1 KB划分为G = 1 KB的内存空间。
如图所示,要实现多个虚拟页面到同一物理页面的映射,在分配虚拟页面时,需要根据页面中的不同偏移量来保存数据对象,因此尽管3个虚拟页面被映射到相同的页面物理页面在页面中,您仍然可以根据页面中的不同偏移量访问所需的数据对象。通过手动在页表(PTE,页表项)中填写物理地址,可以完成多个虚拟页到同一物理页的映射。
图2
图2


图2虚拟页面的管理及其与物理页面的映射
1.3物理内存管理
每当FG_MM管理的内存用完时,FG_MM就会向系统申请1 MB的连续内存空间(称为内存块),并将根据当前用户请求中数据对象的大小使用此内存。将该块分为相同大小和不同偏移量的多个FG_page,数据对象大小和偏移量(大小,偏移量)的组合称为内存分配模式(形状),每种模式都有一个空闲列表,并且将划分的FG_page链接到相应的空闲内存列表。每个形状还对应于两个FIFO,先进先出链表,活动FIFO链表和非活动FIFO链表,活动FIFO链表用于以该模式存储活动FG_page,并使用非活动FIFO链表存储无效的FG_page。当系统没有可分配给FG_MM的1 MB连续空间时,FG_MM数据将从不活动的FIFO中消除。
第一次写入用户数据的FG_page根据FG_page的形状链接到相应的活动FIFO报头中,并且PTE中的访问控制位设置为1,表示刚访问过FG_page并且是活动页面。当活动FIFO链表已满时,将从其尾部检测每个FG_page的访问控制位。如果该位为1,它将被设置为0,并重新链接到活动FIFO的头部;如果为0,它将被清除到无效FIFO中。当无效FIFO满时,将检测尾部FG_page的访问控制位。如果该位为1,则对应于该FG_page的访问控制位为0,并重新链接到活动FIFO的头部;如果该位为0,则将其清除到SSD。以size = 1为例说明物理内存管理过程。
图3
图3

图3物理内存管理
1.4 SSD管理
为了在虚拟地址和SSD逻辑地址之间建立映射,FG_MM定义了OT。 OT使用虚拟地址作为索引。它存储数据对象的大小,页面中的偏移量和SSD中的逻辑地址。成功分配虚拟内存页后,FG_MM会将虚拟页中数据对象的大小以及该页中的偏移量写入OT。在SSD中删除数据对象后,FG_MM会将其放入SSD中。逻辑地址被写入OT。
基于闪存的SSD由日志管理[-]管理,SSD以4 KB为单位读取数据,并以块为单位写入数据(例如,块大小为256 KB)。为了适应SSD的读取对于写入特性,FG_MM保留一个块缓存。需要清除到SSD的数据对象及其虚拟地址首先存储在块缓存中。当块缓存已满时,整个块缓存中的数据将一起写入SSD。根据每个块的标题中包含的数据对象的虚拟地址,FG_MM将SSD中每个数据对象的逻辑地址写入OT。
由于SSD是按块写入的,因此需要对SSD的逻辑地址空间进行垃圾回收。当SSD的可用逻辑空间小于某个阈值时,FG_MM将在后台启动垃圾回收过程,并且系统在整个SSD逻辑地址空间中创建一个垃圾回收表,该表存储无效数据的总量在每个数据块中。当数据块中包含的无效数据量超过某个阈值时,该数据块将成为垃圾回收过程的备份。选择数据块。

1.5系统实现
为了方便用户使用和与Linux系统集成,此解决方案的设计遵循以下原则:FG_MM提供的内存分配和释放接口,数据读写接口完全独立于Linux的原始接口。系统和两者均受管理虚拟地址空间和物理地址空间也完全独立。这样,用户可以根据应用程序的特性(例如用户数据的大小或数据的重要性)灵活选择要调用的界面。例如,当用户数据对象的大小大于4 KB或用户数据对象的元数据被频繁访问时,用户可以调用系统的原始接口来分配和管理内存。
该解决方案以库的形式封装了FG_MM内存管理系统,并提供了以下6个接口供用户调用。
1)void sysInit(),void sysQuit():sysInit()用于初始化FG_MM系统中的元数据; sysQuit()用于释放系统退出之前使用的内存空间。
2)void * nv_malloc(SIZE_t userReqSize):此函数用于为每个数据对象分配userReqSize的内存空间。
3)void * nv_calloc(SIZE_t nmemb,SIZE_t userReqSize):该函数为nmemb数据对象分配userReqSize的内存空间。
4)void * nv_realloc(void * vaddr,SIZE_t userReqSize):此函数将vaddr指向的内存空间大小调整为userReqSize字节。
5)void nv_free(void * vaddr):该函数用于释放指针vaddr指向的内存空间。
1.6个适用的应用场景
FG_MM适用于用户所需的物理内存空间远远大于系统可以提供的最大物理内存空间的应用程序场景,例如内存,内存缓存系统等。例如,在内存应用程序中,为了提高数据处理速度,用户数据存储在DRAM中而不是底层存储设备中。这就要求系统提供足够的物理存储空间来存储数据,但是由于DRAM在存储容量,功耗和成本方面的局限性,因此系统无法无限增加DRAM容量来满足用户需求。当内存无法容纳更多用户数据时,将在DRAM与基础存储设备之间进行数据交换。在这种情况下,FG_MM的细粒度内存管理解决方案可以有效地减少内存与底层存储设备之间不必要的交换和交换操作,从而减少数据交换过程对系统性能的影响。
请注意,由于大多数数据对象的大小很小(远小于最小分区粒度,例如256 B),因此此解决方案不适用,因为它将导致大量的物理内存空间浪费和元数据增加目前,建议调用系统的原始内存管理功能来分配和管理内存空间。
2测试结果和分析
选择不同的测试用例,以比较FG_MM和Linux操作系统内存交换机制之间的性能。包括随机访问测试程序,数据索引测试程序B-tree和快速排序测试程序Quicksort等。

在实验中,测试服务器是8核i7-4790 3.6 GHz处理器,存储系统使用6 GB DRAM和120 GB Kingston SSD。服务器操作系统是64位Linux2.6.32是CentOS的核心系统。系统为FG_MM保留物理内存空间以供其自身管理。 FG_MM和系统内存交换机制用于与DRAM交换数据。 SSD存储区彼此独立。为了测试大内存数据在系统性能下,将FG_MM管理的DRAM内存容量设置为64 MB,并且测试程序的总数据为10 GB,这比FG_MM管理的内存空间大得多,因此只有一小部分数据驻留在DRAM中。大多数数据需要存储在SSD中。随机访问内存数据时,DRAM和SSD之间的数据交换会频繁发生。由于FG_MM系统元数据(OT,空闲列表,活动/非活动FIFO)将占据部分系统DRAM空间,因此FG_MM实际占用的DRAM空间大于64 MB。为了便于比较,在测试内存交换机制系统的性能时,还将设置等于FG_MM实际占用的总内存的内存空间。
2.1个随机访问
随机访问大量内存数据。为了使访问功能更符合实际情况,设计数据访问功能符合Zipf定律,即80%的访问集中在20%的数据中。内存数据集的总大小为10 GB,访问的数据总量为1 GB。显示了在不同的读写比率下,FG_MM与系统内存交换机制之间的性能比较。在图中,纵坐标响应时间是测试程序的运行时间(以下实验相同)。可以看出,在相同的工作环境下,与系统内存交换机制相比,FG_MM系统的数据响应速度提高了42%〜44%。 FG_MM以数据对象的粒度管理数据,当DRAM不可用时,需要从SSD删除数据时,也会根据数据对象的粒度将其删除,从而确保删除的数据是冷的数据。并且系统内存交换机制使用4 KB作为单位来消除数据,如果消除了该页面,则该页面包含热数据对象,则消除后的页面可能会在短时间内再次交换到内存中,这增加了内存的开销。系统访问底层设备。当读写比为8:2时,在不同数据对象大小的情况下,FG_MM和系统内存交换机制之间的性能比较如图所示。固定512 B,固定1 KB和固定2 KB分别表示数据对象的大小固定为512 B,1 KB和2 KB。随机512 B,随机1 KB和随机2 KB分别表示数据对象的大小是随机的,平均值为512 B,1 KB和2 KB。可以看出,与系统内存交换机制相比,FG_MM系统的数据响应速度提高了3 0.6%。大约47.5%,无论数据对象是固定大小还是随机大小,随着数据对象大小接近4 KB,FG_MM与系统内存交换机制之间的性能差异将逐渐减小。因为当数据对象的大小逐渐增加时,它将逐渐接近原始Linux系统的4 KB交换粒度,因此FG_MM与原始Linux系统之间的性能差异将逐渐减小。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-342877-1.html
那只是商家自己做的决定
@CYAdol