KLOCs: 用于异构内存系统的内核级对象上下文

KLOCs: Kernel-Level Object Contexts for Heterogeneous Memory Systems

Introduction

混合内存在数据中心的使用正成为一种趋势,作为持久内存的傲腾内存的低延迟,高密度可以很好的扩展计算机的主存资源。然而,傲腾内存的引入也给计算机的内存管理带来了新的挑战。

傲腾内存的读写带宽均不如传统DRAM,但是容量往往高于DRAM。这样计算机中就存在快慢内存,一个是快的、容量相对较小的DRAM,另一个是慢的、容量较大的DCPM(傲腾内存)。之前的工作主要是聚焦于用户态应用在混合内存架构下的数据管理,对数据进行冷热分离,热数据使用快内存,本文却发现内核态的数据同样需要进行相应的管理。

Motivation

image 与大家印象中,内核数据占用小的情况不同,如上图所示,与用户态的数据相比,内核态的数据占用也是非常大的,某些负载情况下甚至可以达到75%的占用,就算是filebench也有25%的占用。

Design

overview

内核态数据的组织与用户态相比更加复杂,想要进行冷热数据分离更加地困难。作者当下只对文件系统和网络有关的数据结构进行了管理,本文着重怎么对文件系统的内核态数据进行管理。其中核心的问题就是如何对内核态的数据进行冷热分离,作者提出了KLOCs的数据结构。

内核态的数据通常有两种使用内存的方式,一种是通过slab直接使用物理内存,这一种的内核态数据往往生命周期较短;另一种是需要经过VFS层,例如文件系统的page cache数据,这一种生命周期较长。如果把两种数据一起管理,比较混乱,开销会非常大。

image 如上图所示KlOCs为每个inode节点创建一个Knode,所有和这个inode节点有关的文件系统的内核态数据都会指向这个节点,在全局上用一个Kmap去管理这些Knode。对于page cache的数据和由slab创建的数据,每个knode节点维护两个B+树去管理这些数据。

同时CPU会维护一个LRU队列以此判断每个Knode节点的冷热,如下图所示。
image

evaluation

image

如上图所示,纵坐标是性能指标,KLOCs相比于之前的混合内存管理方法,在各种测试负载下都有明显的提升。