Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

28.3. 为文件系统直接访问配置持久内存

文件系统直接访问要求将命名空间配置为 fsdax 模式。此模式可用于直接访问编程模型。当在 fsdax 模式中配置设备时,可以在其之上创建一个文件系统,然后使用 -o fsdax 挂载选项挂载。然后,对这个文件系统的文件执行 mmap() 操作的任何应用程序都可以直接访问其存储。请参见以下示例:
# ndctl create-namespace --force --reconfig=namespace0.0 --mode=fsdax --map=mem
{
   "dev":"namespace0.0",
   "mode":"fsdax",
   "size":17177772032,
   "uuid":"e6944638-46aa-4e06-a722-0b3f16a5acbf",
   "blockdev":"pmem0"
}
在示例中,namespace0.0 转换为命名空间 fsdax 模式。使用 --map=mem 参数时,ndctl 会将用于直接内存访问(DMA)的操作系统数据结构放在系统 DRAM 中。
要执行 DMA,内核需要内存区域中的每个页面的数据结构。此数据结构的开销为每 4KiB 页的 64 字节。对于小型设备,开销量足够小,无法适应 DRAM。例如,16-GiB 命名空间只需要 256MiB 进行页面结构。因为 NVDIMM 设备通常比较小且昂贵,所以将内核页面跟踪数据结构放在 DRAM 中是首选的,如 --map=mem 参数所示。
未来,NVDIMM 设备的大小可能是 TB。对于这样的设备,存储页面跟踪数据结构所需的内存量可能会超过系统中的 DRAM 数量。一个 TiB 的持久内存只需要 16 GiB 才能进行页面结构。因此,在这种情况下首选指定 --map=dev 参数将数据结构存储在持久内存本身中。
fsdax 模式中配置命名空间后,命名空间就可以用于文件系统。从 Red Hat Enterprise Linux 7.3 开始,Ext4 和 XFS 文件系统都作为技术预览使用持久内存启用。文件系统创建不需要特殊参数。要获得 DAX 功能,请使用 dax 挂载选项挂载文件系统。例如:
# mkfs -t xfs /dev/pmem0
# mount -o dax /dev/pmem0 /mnt/pmem/
然后,应用程序可以使用持久内存并在 /mnt/pmem/ 目录中创建文件,打开文件,并使用 mmap 操作来映射文件以进行直接访问。
当在用于直接访问的 pmem 设备中创建分区时,分区必须在页面边界上保持一致。在 Intel 64 和 AMD64 构架上,至少有 4KiB 校准分区的开头和结尾,但 2MiB 是首选的对齐。默认情况下,parted 工具在 1MiB 边界上对齐分区。对于第一个分区,指定 2MiB 作为分区的开头。如果分区的大小是 2MiB 的倍数,则所有其他分区也一致。