You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确保程序实际映射到模拟的Persistent Memory分区pmem0

让libpmemobj池映射到/dev/pmem0的解决方法

你的问题出在PMEM池文件被创建在了普通磁盘分区,要落到模拟的pmem0分区,按以下步骤操作:

1. 挂载pmem0并开启DAX

持久内存文件系统需要DAX(Direct Access)特性来让libpmemobj直接访问,先完成挂载:

sudo mkdir -p /mnt/pmem
# 用ext4挂载并开启DAX;若用xfs则参数为-o dax=always
sudo mount -t ext4 -o dax /dev/pmem0 /mnt/pmem
# 可选:设置开机自动挂载
echo "/dev/pmem0 /mnt/pmem ext4 dax 0 0" | sudo tee -a /etc/fstab

2. 修改代码中的池文件路径

把pmemobj_create的path参数指向pmem挂载目录下的路径,比如/mnt/pmem/my_pmem_pool。修改后的关键代码:

const char *path = "/mnt/pmem/my_pmem_pool";
pop = pmemobj_create(path, LAYOUT, PMEMOBJ_MIN_POOL, 0666);
if (!pop) {
    perror("pmemobj_create failed");
    exit(EXIT_FAILURE);
}

PMEMoid root = pmemobj_root(pop, sizeof(struct my_root));
struct my_root *rootp = pmemobj_direct(root);

// 写入数据后执行持久化
pmemobj_persist(pop, &rootp->len, sizeof(rootp->len));

验证映射是否成功

程序运行后,执行以下命令检查池文件所在分区:

df -P /mnt/pmem/my_pmem_pool | tail -1 | awk '{print $1}'

输出应为/dev/pmem0,说明已成功映射到模拟的持久内存分区。

注意:如果之前在普通路径创建过同名池文件,需先删除旧文件再重新运行程序,避免复用旧池。

内容的提问来源于stack exchange,提问作者novaura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:15:28