C语言 如何确保在持久性内存上编程

gv8xihay  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(134)

我正在做一个期末项目,涉及到编写一个程序,读写持久存储器上的文件。我没有访问一个实际的持久存储器设备,所以我按照教程在下面的链接来模拟它:https://kb.pmem.io/howto/100000012-How-To-Emulate-Persistent-Memory-using-the-Linux-memmapKernel-Option/
用户@节点:~/test 2 $ sudo fdisk -l /dev/pmem 0
Disk /dev/pmem0: 8 GiB, 8589934592 bytes, 16777216 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes
根据上面的输出,我在dram硬盘上有一个名为pmem 0的模拟持久性内存分区。我使用以下链接中的教程获得了一些关于如何读写持久性内存上的文件的示例代码:https://www.intel.com/content/www/us/en/developer/articles/code-sample/create-a-persistent-memory-hello-world-program-using-libpmemobj-with-c.html
我编译并运行代码,程序的输出显示它正在将一个文件写入持久性内存。我想检查文件是否被写入正确的分区,所以我使用了以下命令:df -P文件名|尾部-1| cut -d' ' -f 1(我从另一个stackoverflow post中得到的),输出是/dev/sda 1,而我认为如果它实际使用的是持久性内存分区,输出应该是/dev/pmem 0。
我正在寻找有关如何确保我的代码实际上Map到我创建的持久性内存分区的提示。
第二个链接的代码需要pmdk库设置才能正常运行,我需要修改我的linux内核 Boot 参数来设置分区,所以我不确定我是否能提供一个更好的最小示例。
编辑:我认为我需要修改的代码行是以下代码行之一:

pop = pmemobj_create(path, LAYOUT, PMEMOBJ_MIN_POOL, 0666);
    PMEMoid root = pmemobj_root(pop, sizeof (struct my_root));
    pmemobj_persist(pop, &rootp->len, sizeof (rootp->len));`

这将创建持久性内存池,但教程似乎没有提到如何实际Map到持久性内存设备。

k4emjkb1

k4emjkb11#

为什么字符串被写入sda1中的硬盘驱动器,我相信它是常规内存?
所引用的C程序调用pmemobj_create(),并将path指定为第二个程序参数,在本例中为fileName。如果当前工作目录在硬盘驱动器上,则创建的内存池文件fileName当然也位于硬盘驱动器上。如果希望在/dev/pmem0磁盘上创建文件,您必须挂载文件系统并使用其上文件路径。

相关问题