Ubuntu使用内存DRAM模拟持久化内存Persistent Memory

2020-6-16更新

一般内核只需要两步即可进行持久性内存模拟

step 1 配置 grub:

vi /etc/default/grub

在里面加入如下语句,前一个为要模拟的大小,后一个为模拟的持久性内存在内存中开始的位置。也就是从内存4G开始,划分32G来模拟持久性内存~ 

GRUB_CMDLINE_LINUX="memmap=32G!4G"

step 2 更新 grub

sudo update-grub
reboot

 更深入了解请看下文~

以下为原内容~

————————————————————————————————————————————————————

现在真实的持久化内存对于我们普通人来说还不可用,在进行实验和测试的时候可能需要我们模拟持久化内存来进行使用。

现在在一台主机(没有服务器o(╥﹏╥)o)上测试划分一块内存区域来进行持久化内存的模拟。

环境:Ubuntu 18.04,一台普通的Dell台式机,运行内存 8 G。

从Linux 4.0以来,Linux内核就具备了对持久性内存设备和仿真的支持,但是,为了便于配置,建议使用比4.2更新的内核。

在内核中,使用对文件系统的DAX扩展创建了一个支持PMEM的环境。某些发行版(如Fedora 24及更高版本)内置了DAX / PMEM支持。

要了解内核是否支持DAX和PMEM,可以使用以下命令:

# egrep ‘(DAX|PMEM)’ /boot/config-`uname –r`

如果内置了支持就会输出类似如下的内容:

CONFIG_X86_PMEM_LEGACY_DEVICE=y
CONFIG_X86_PMEM_LEGACY=y
CONFIG_BLK_DEV_RAM_DAX=y
CONFIG_BLK_DEV_PMEM=m
CONFIG_FS_DAX=y
CONFIG_FS_DAX_PMD=y
CONFIG_ARCH_HAS_PMEM_API=y

但是很遗憾,我们的Ubuntu 18.04没有内置对DAX/PMEM的支持,所以输入上述命令什么输出都没有:

接下来就在Ubuntu 18.04上模拟持久化内存。

由于在Ubuntu 18.04上默认没有支持DAX和PMEM,所以需要我们重新编译内核,并在编译内核的配置选项中加入相关设置。

在这里重新编译内核,我选择的版本是Linux-4.15。

首先输入命令:

make nconfig

 进入到如下的配置界面,由于照片是直接用手机拍摄的,所以有一点歪,还请见谅。

配置PMEM和DAX

Device Drivers

            NVDIMM Support 

                    PMEM;

                    BLK;

                    <*>BTT

                    <*>NVDIMM DAX

配置PMEM

先进入到Device Drivers中

 在Device Drivers中找到NVDIMM Support,需要将菜单栏向下翻,里面的内容并不只是我们看到的第一页,NVDIMM Support 不在第一页上:

 进入到NVDIMM Support 中,将里面的内容都选中:

                    PMEM;

                    BLK;

                    <*>BTT

                    <*>NVDIMM DAX

Ubuntu使用内存DRAM模拟持久化内存Persistent Memory_第1张图片

 配置文件系统DAX

使用esc回到make nconfig的初始页面

File System

          <*>Direct Access support

处理器特性设置 

使用esc回到make nconfig的初始页面

Processor type and features

                  <*>Support non-standard NVDIMMs and ADR protected memory

 

其实上述所有过程,在Linux-4.15中默认都已经做了,也就是我只要 make nconfig就可以了~ 

所有这些配置好之后就开始编译以及安装内核:

# make -j8
# make modules_install install

 然后进入到新编译的内核Linux-4.15中

使用下面的命令打印出e820表:

dmesg | grep e820

得到如下的内容:

 

[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x00000000d197dfff] usable
[    0.000000] BIOS-e820: [mem 0x00000000d197e000-0x00000000d19c0fff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000d19c1000-0x00000000d6d7dfff] usable
[    0.000000] BIOS-e820: [mem 0x00000000d6d7e000-0x00000000d6ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000d7000000-0x00000000d7741fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000d7742000-0x00000000d77fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000d7800000-0x00000000d7fb3fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000d7fb4000-0x00000000d7ffffff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000d8000000-0x00000000d9720fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000d9721000-0x00000000d97fffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000d9800000-0x00000000daf23fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000daf24000-0x00000000dafa5fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000dafa6000-0x00000000dafa6fff] usable
[    0.000000] BIOS-e820: [mem 0x00000000dafa7000-0x00000000df9fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed00000-0x00000000fed03fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ff000000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f5fffff] usable

 上述的usable就是我们可以使用的,从中可以划分部分区域来作为我们的持久化内存,在这里建议选取:

[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000021f5fffff] usable,其中0x0000000100000000就是4G,我们需要配置grub来设置

vi /etc/default/grub

我在里面直接配置4G的空间来模拟持久化内存,在grub中添加如下语句,表示空间大小为4G,从4G内存开始的内存空间用来模拟持久化内存。

GRUB_CMDLINE_LINUX="memmap=4G!4G"

 配置好后,更新grub:

sudo update-grub

 使用下面的命令查看是否成功:

Ubuntu使用内存DRAM模拟持久化内存Persistent Memory_第2张图片

可以看到,这块区域已经被模拟为了持久化内存,然后我们在主机 /dev目录下可以看到pmem0的设备:

Ubuntu使用内存DRAM模拟持久化内存Persistent Memory_第3张图片

现在就可以对模拟的持久化内存进行使用了~

使用方式——建立DAX文件系统

以ext4文件系统为例

mkdir /mnt/pmemdir
mkfs.ext4 /dev/pmem0
mount -o dax /dev/pmem0 /mnt/pmemdir

 这样就将目录 /mnt/pmem挂载到了持久化内存上,这个目录在之后的使用过程中就会用到。

参考:

https://software.intel.com/en-us/articles/how-to-emulate-persistent-memory-on-an-intel-architecture-server

你可能感兴趣的:(存储,持久化(性)内存/非易失性内存)