Ubuntu使用內存DRAM模擬持久化內存Persistent Memory

現在真實的持久化內存對於我們普通人來說還不可用,在進行實驗和測試的時候可能需要我們模擬持久化內存來進行使用。

現在在一臺主機(沒有服務器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 

                    <M>PMEM;

                    <M>BLK;

                    <*>BTT

                    <*>NVDIMM DAX

配置PMEM

先進入到Device Drivers中

 在Device Drivers中找到NVDIMM Support,需要將菜單欄向下翻,裏面的內容並不只是我們看到的第一頁,NVDIMM Support 不在第一頁上:

 進入到NVDIMM Support 中,將裏面的內容都選中:

                    <M>PMEM;

                    <M>BLK;

                    <*>BTT

                    <*>NVDIMM DAX

 配置文件系統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

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

可以看到,這塊區域已經被模擬爲了持久化內存,然後我們在主機 /dev目錄下可以看到pmem0的設備:

現在就可以對模擬的持久化內存進行使用了~

使用方式——建立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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章