赞
踩
当前的内核将持久内存视为一个设备。 由该设备管理的内存可以承载文件系统,也可以直接映射到进程的地址空间(或两者兼而有之),但只有明确提出要求的进程才能使用。 Dave Hansen 的这套补丁可以改变这种行为。 它创建了一个新的设备驱动程序,该驱动程序将分配给它的任何持久内存作为普通 RAM 的范围热插拔到系统中;之后,该内存将交给进程来满足正常的内存分配请求。 根据系统管理员的意愿,可以将系统的部分(或全部)持久内存用于此用途。
在这种模式下使用的持久内存看起来与普通内存相似,但两者仍不完全相同。 特别是,虽然持久内存的速度很快,但仍不及普通 RAM。 因此,用户可能希望确保某些应用程序使用普通内存(DRAM),而其他应用程序则使用伪装成普通内存的持久内存。 当持久内存以这种方式添加到系统中时,它会显示在一个或多个特殊的 NUMA 节点下,因此可以使用常用的内存策略机制来控制哪些进程使用它。 正如 Hansen所建议的,云计算提供商可以利用这种机制提供两类虚拟机,其中价格较低的虚拟机主要使用速度较慢的持久内存。
汉森的补丁大多没有争议,但另一套补丁却不完全如此。 英特尔开发了一种被称为"内存模式"的硬件功能,这是另一种像使用 DRAM 一样使用持久内存的方法,但其不同之处在于,内存模式还接管了系统的真正 DRAM,并将其用作持久内存的直接映射缓存。 表现出良好缓存行为的应用程序将能以接近 DRAM 的速度使用持久内存;但如果存在大量缓存竞争,速度就会减慢。
事实上,直接映射缓存会使竞争问题更加严重。 与关联式高速缓存不同,直接映射式高速缓存只有一个插槽可用于任何给定的内存地址;如果相关数据不在该特定插槽中,则根本无法进入高速缓存。 要有效利用这种安排,就必须采用一种内存分配模式,将访问分散到整个高速缓存中。 否则,应用程序的内存最终可能会被映射到相对较少的缓存槽中,这样它就会和自己较劲,最终导致运行缓慢。
不过,Linux 内存管理系统并没有意识到这种缓存,因此也就无法有效使用缓存。 其结果是,最好的情况是性能不稳定,最坏的情况是缓存争用严重;缓存利用率往往会随着时间的推移而降低,导致一些高性能用户最终不得不定期重启系统以恢复性能。 即使有这样的行为,Linux 也有可能称霸世界,但世界上的某些地方很可能会寻找新的霸主。
丹-威廉姆斯(Dan Williams)以补丁集的形式提出的解决方案非常简单:随机化内存出现在空闲列表上的顺序,使内存分配更加分散。 初始随机化在系统启动时完成,此时内存(相对较大的区块)会被洗牌。 不过,随着时间的推移,系统很可能会撤销随机化;例如,内存压缩等机制就是用来清理碎片混乱的。 为了避免产生过多的秩序,补丁集会在创建新的大型区块时将其随机放置在空闲列表中,从而希望在系统的整个生命周期内保持分散的访问模式。
威廉姆斯引用了一些基准测试,这些测试表明,在使用直接映射缓存时,这种随机化方法可以提高性能。 也许最重要的是,长期性能趋于平稳,在系统生命周期内保持可预测性,而不是随着时间的推移而降低。 即便如此,内存管理开发人员还是很难接受这套补丁,因为他们担心它会影响整体性能。 只有当系统被检测到运行在内存模式下(或通过命令行参数显式启用)时,才会进行洗牌,因此对大多数系统应该不会有任何影响。 Michal Hocko 最终勉强接受了这些补丁。 相反,梅尔-戈尔曼(Mel Gorman)却没有批准补丁,不过他也没有阻止补丁被合并。
基斯-库克(Kees Cook)是另一位支持该补丁的开发者,他认为随机化可能带来一些安全方面的好处。 总的来说,安全方面的好处比性能方面的好处更难推销,尤其是没有人提供过一个例子,说明自由列表洗牌可以阻止攻击。 内核开发人员对安全补丁的态度可能并不友好,即使已经证明了其明显的安全优势;而抗议说某项改动可能会让事情变得更好、可能有一天会更好,往往也不会有太大的效果。
目前,这项工作似乎已经完成,交给了安德鲁-莫顿(Andrew Morton),由他决定是否接受。 到目前为止,他还没有表态,所以他的方向还不明确。 但归根结底,这是一个相对集中的补丁集,应该对某些用例有帮助,而对其他用例没有影响。 如果在我们的自主飞行汽车使用持久内存笔记本电脑之前的某个时候,它就已经出现了,那也不足为奇。
本文索引条目 | |
---|---|
内核 | 内存管理/非易失性内存 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。