21.7. 在 NVDIMM 上创建设备 DAX 命名空间
在设备 DAX 模式下配置附加到您系统的 NVDIMM 设备,以支持具有直接访问功能的字符存储。
考虑以下选项:
- 将现有命名空间重新配置为设备 DAX 模式。
- 如果有可用空间,请创建新设备 DAX 命名空间。
21.7.1. 设备直接访问模式中的 NVDIMM
设备直接访问(设备 DAX、devdax
)提供了应用程序直接访问存储的方法,而无需参与文件系统。设备 DAX 的优点是它提供有保证的容错粒度,可以使用 ndctl
工具的 --align
选项来进行配置。
对于 Intel 64 和 AMD64 构架,支持以下故障颗粒度:
- 4 KiB
- 2 MiB
- 1 GiB
设备 DAX 节点只支持以下系统调用:
-
open()
-
close()
-
mmap()
您可以使用 ndctl list --human --capabilities
命令查看 NVDIMM 设备支持的协调。例如,若要为 region0 设备查看它,请使用 ndctl list --human --capabilities -r region0
命令。
不支持 read()
和 write()
系统调用,因为设备 DAX 用例与 SNIA Non-Volatile Memory Programming Model 关联。
21.7.2. 将现有的 NVDIMM 命名空间重新配置为设备 DAX 模式
您可以将现有的 Non-Volatile Dual In-line Memory Modules (NVDIMM) 命名空间重新配置为设备 DAX 模式。
重新配置命名空间会删除之前在命名空间中存储的数据。
先决条件
-
已安装
ndctl
工具。如需更多信息,请参阅安装 ndctl。
流程
列出系统中的所有命名空间:
# ndctl list --namespaces --idle [ { "dev":"namespace1.0", "mode":"raw", "size":34359738368, "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4" "state":"disabled", "numa_node":1 }, { "dev":"namespace0.0", "mode":"raw", "size":38615912448, "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817", "state":"disabled", "numa_node":0 } ]
重新配置任何命名空间:
# ndctl create-namespace --force --mode=devdax --reconfig=namespace-ID
例 21.3. 将命名空间配置为设备 DAX
以下命令为支持 DAX 的数据存储重新配置
namespace0.1
。它与 2-MiB 故障粒度一致,以确保操作系统一次在 2-MiB 页面中故障:# ndctl create-namespace --force --mode=devdax --align=2M --reconfig=namespace0.1 { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.1", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
命名空间现在位于
/dev/dax0.1
路径。
验证
验证系统中的现有命名空间是否已重新配置:
# ndctl list --namespace namespace0.1 [ { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "chardev":"dax0.1", "align":2097152 } ]
其他资源
-
ndctl-create-namespace (1)
手册页
21.7.3. 在设备 DAX 模式下创建新 NVDIMM 命名空间
如果区域中有可用空间,您可以在非线性内存模块 (NVDIMM) 设备上创建新设备 DAX 命名空间。
先决条件
-
已安装
ndctl
工具。如需更多信息,请参阅安装 ndctl。 NVDIMM 设备支持标签在区域中创建多个命名空间。您可以使用以下命令检查它:
# ndctl read-labels nmem0 >/dev/null read 1 nmem
这表示它读取一个 NVDIMM 设备的标签。如果值为
0
,这表示您的设备不支持标签。
流程
列出系统上有可用空间的
pmem
区域。在以下示例中,在 region1 和 region0 区域中有空间:# ndctl list --regions [ { "dev":"region1", "size":2156073582592, "align":16777216, "available_size":2117418876928, "max_available_extent":2117418876928, "type":"pmem", "iset_id":-9102197055295954944, "badblock_count":1, "persistence_domain":"memory_controller" }, { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2143188680704, "max_available_extent":2143188680704, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller" } ]
在任何可用区域上分配一个或多个命名空间:
# ndctl create-namespace --mode=devdax --region=region_N_ --size=namespace-size
例 21.4. 在区域上创建命名空间
以下命令在 region0 上创建 36-GiB 设备 DAX 命名空间。它与 2-MiB 故障粒度一致,以确保操作系统一次在 2-MiB 页面中故障:
# ndctl create-namespace --mode=devdax --region=region0 --align=2M --size=36G { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.2", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
命名空间现在作为
/dev/dax0.2
提供。
验证
验证新命名空间是否在扇区模式中创建:
# ndctl list -RN -n namespace0.2 { "regions":[ { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2065879269376, "max_available_extent":2065879269376, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller", "namespaces":[ { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "chardev":"dax0.2", "align":2097152 } ] } ] }
其他资源
-
ndctl-create-namespace (1)
手册页