cslehe 发表于 2021-4-16 15:14:07

Linux Kernel中AEP的现状和发展

#111723#AEP简介
AEP是Intel推出的一种新型的非易失Optane Memory装备,又被称作Apache Pass,以是个别习气称作AEP。在这之前也有相似的装备称作NVDIMM或PMEM,现在Linux创立的AEP装备节点也是叫做pmem(如/dev/pmem0),以是本文中NVDIMM或PMEM都指AEP。然而本文不是为了科普AEP,假如想懂得AEP的一些基础常识,能够参考以下几篇文章:NVDIMM Enabling in SUSE Linux Enterprise Part 1NVDIMM Enabling in SUSE Linux Enterprise Part 2Persistent Memory Wiki

DAX
现在Linux Kernel中重要把PMEM当作一个相似于磁盘的块装备,以是能够在PMEM装备上创立文件体系,使它看起来和个别的磁盘没甚么区分。然而装备的详细物理属性完整纷歧样,比方读写的latency,PMEM能够到达和DRAM濒临的水平,磁盘固然是望尘莫及的。以是,这就带来一个成绩,众所周知,个别在Linux上罕见的文件体系,比方ext4,xfs等,都是给磁盘计划的,都用到了page cache来缓存磁盘上的数据来进步机能。然而,对于PMEM装备来讲,它的拜访耽误曾经和内存濒临了,为甚么还须要内存中的page cache呢?以是,现在Linux Kernel中对这一块最大的改良就是支撑DAX(Direct Access)。一句话说明DAX,就是DAX bypass了page cache。不管读写都是直接操纵PMEM上的数据。DAX须要在文件体系层面支撑,假如要应用DAX,那末须要在mount文件体系时传入“-o dax”参数,比方:
1/dev/pmem0on/mnttypexfs(rw,relatime,seclabel,attr2,dax,inode64,noquota)
DAX极大地进步了文件体系在PMEM装备上的机能,然而另有一些成绩没有处理,比方:1. 文件体系的metadata仍是须要应用page cache或buffer cache。2. “-o dax”mount option是对全部文件体系的,不能做更细粒度的把持。3. 没有一个API来告知利用拜访的文件是不是能够DAX拜访的。固然DAX另有这些成绩,然而现在DAX仍是Linux Kernel中的主流应用方法。
PMEM用作NUMA node
既然PMEM就是memory,只是带宽和latency上差一点,那末天然会想到能不能就把PMEM当作memory用呢?谜底固然是能够的。现在支撑SRAT或许HMAT的硬件,都能够把PMEM辨认为一个或多个NUMA node。Dave Hansen的这组patch,Allow persistent memory to be used like normal RAM,就是通过memory hotplug的方法把PMEM增加到Linux的buddy allocator外面。   新增加的PMEM会以一个或多个NUMA node的情势呈现,Linux Kernel便可以调配PMEM上的memory,如许和应用个别DRAM没甚么区分。现在看这组patch曾经没有甚么blocking issues,不出甚么成绩的话,很快就汇合并进入内核主线。然而,到这里只是处理了第一步的成绩,怎样把PMEM“用好”的成绩还没有处理。比方,当内核调配内存时,假如从PMEM上调配了memory,而且这块内存上的数据是被常常拜访的,那末因为物理特征上的差别,个别应>用都市领会到机能的降落。那末怎样更理智的应用PMEM就是一个亟待处理的成绩。   吴峰光的一组patch,PMEM NUMA node and hotness accounting/migration,来实验处理这个成绩。这组patch重要供给了上面几个功效:1. 断绝DRAM和PMEM。为PMEM独自结构了一个zonelist,如许个别的内存调配是不会调配到PMEM上的。2. 跟踪内存的冷热。应用内核中曾经有的idle page tracking功效(现在主线内核只支撑体系全局的tracking),在per process的粒度上跟踪内存的冷热。3. 应用现有的page reclaim,在reclaim时将冷内存迁徙到PMEM上(只能迁徙匿名页)。4. 应用一个userspace的daemon和idle page tracking,来将热内存(在PMEM上的)迁徙到DRAM中。这组patch发到LKML当前,引来了很剧烈的探讨。   重要会合在两个方面:    1. 为甚么要独自结构一个zonelist把PMEM和DRAM离开?实在在这块,咱们也碰到了类似的成绩。咱们在某些名目请求做到把持每个过程应用的DRAM和PMEM的比例(比方8:2),然而现在的NUMA API做不到。现在的NUMA API只能把持从哪个node调配,然而不能把持比例,>比方mbind(),只能告知过程这段VMA能够用哪些node,然而不能把持详细几多memory从哪个node来。要想做到更细粒度的把持,须要改革现在的NUMA API。并且现在memory hierarchy越来越庞杂,比方device memory,这都是现在的NUMA API所不能很好处理的。    2. 能不能把冷热内存迁徙通用化?冷热内存迁徙这个偏向是没有成绩的,成绩在于现在patch中的处置太甚于PMEM specific了。内核中的NUMA balancing是把“热”内存迁徙到近来的NUMA node来进步机能。然而却没有对“冷”内存的处置。以是能不能实现一种更通用的NUMA rebalancing?比方,在reclaim时间,不是直接reclaim内存,而是把内存迁徙到一个远真个,或许闲暇的,或许低速的NUMA node,相似于NUMA balancing所做的,只不外是往相反的偏向。笔者的一组patch,Another Approach to Use PMEM as NUMA Node,就表现了这类思绪。应用Kernel中>曾经很成熟的memory reclaim门路把“冷”内存迁徙到PMEM node中,NUMA Balancing拜访到这个page的时间能够抉择能否把这个页迁徙回DRAM,相称因而一种比拟粗粒度的“热”内存辨认。    社区中另有一种愈加保守的主意就是不辨别PMEM和DRAM,在memory reclaim时间尽管把“冷”内存迁徙到近来的remote node,假如target node也有内存压力,那就在target node上做一样的迁徙。然而这类方式有可能引入一个内存迁徙“环”,致使内存在NUMA node旁边不绝地迁徙,有可能引入unbounded time成绩。并且一旦node增多,可能会敏捷好转成绩。    在笔者看来,在内存接纳方面另有一个更可能立竿见影的计划就是把PMEM用作swap装备或许swap文件。现在swap的最大成绩就是传统磁盘的耽误成绩,很轻易形成体系无呼应,这也是为甚么有zswap如许的技巧呈现。PMEM的低耽误特征完整能够打消swap的耽误成绩。在这个方面,咱们也正在做一些摸索和试验。
PMEM用作RAM(DRAM作为Cache)
这个题目看起来有点歧义,下面曾经说了PMEM能够作为NUMA node应用,这不曾经是作为RAM了吗?怎样这里还要说用作RAM?这就触及到AEP的另一个用法了,那就是所谓的“memory mode”。当在memory mode时,DRAM>并不是和PMEM并列的,而是酿成了PMEM通明的Cache,PMEM就成了DRAM。这时间PMEM和DRAM的关联就酿成了DRAM和Cache的关联。并且,DRAM是一个direct mapped的Cache(这点很主要)。这时疑难就来了,如许不是更没有甚么可做的?既不须要治理NUMA,也没有冷热内存的成绩了,热的天然就被Cache了。是的,然而这会引入别的一个成绩,就是Cache抵触的成绩。下面曾经提到,在这类情形下,DRAM是一个direct mapped的Cache,就是在一样索引下只有一个cache line掷中,如许会带来比拟重大的Cache抵触成绩,从而下降Cache的掷中率,带来机能成绩。对于这个成绩的具体说明,请拜见这篇文章为懂得决这个Cache抵触的成绩,Dan Williams提出了这组patch,mm: Randomize free memory。这组patch的主意很简略,就是通过randomize free area的方法来下降Cache>抵触。现在这组patch曾经兼并入-mm tree,不出不测应当会在5.1时兼并入内核主线。然而这类设置的成绩就是不敷机动,须要在BIOS中设置,一旦设置弗成在运转时变动。
NVDIMM公用文件体系
后面提到PMEM能够作为一个块装备安排文件体系,然而当初支撑的文件体系,比方ext4,xfs等,在计划时更多的斟酌了怎么针对磁盘优化。然而PMEM是性子完整差别的存储介质,固然经由一些改革,这些传统的文件体系能够比拟好的任务在PMEM上,然而仍是会有良多不合适PMEM的处所,比方metadata还要经由page cache等。以是,NVDIMM公用文件体系就利用而生了。
NOVA
NOVA Filesystem就是专门为PMEM计划的文件体系。笔者对文件体系研讨不深,并且对NOVA也没有很深刻的研讨,以是就不在这里班门弄斧了。感兴致的读者能够参考NOVA的github link之前,NOVA曾发到LKML上,然而似乎社区里的maintainer们没偶然间细心review一个新的文件体系,以是合入社区的尽力临时结束了,然而还在github上持续开辟中。
ZUFS
ZUFS是来自于NetApp的一个名目,ZUFS的意思是Zero-copy User Filesystem。宣称是实现了完整的zero-copy,乃至文件体系的metadata都是zero-copy的。ZUFS重要是为了PMEM计划,然而也能够支撑传统的磁盘装备,相称因而FUSE的zero-copy版本,是对FUSE的机能的晋升。现在作者正在实验将ZUFS的kernel部份upstream,据他说RHEL曾经批准将ZUFS作为一个module参加RHEL 8。
更多内容阅读推荐:波轮洗衣机不排水是什么原因
页: [1]
查看完整版本: Linux Kernel中AEP的现状和发展