要在 modprobe nvmet_rdma
时找到合法的 nvmet_rdma_offload_mem_start
和 nvmet_rdma_offload_mem_size_mb
参数,你需要进行一系列步骤以确保选定的内存区域既未被系统其他部分使用,又适合于你的 NVMe over Fabrics (NVMe-oF) RDMA 目标配置。以下是一个示例流程,展示如何进行这一过程:
步骤 1: 检查系统内存布局
使用 /proc/iomem
查看当前系统的内存布局,以确定哪些物理内存区域已经被占用。
cat /proc/iomem
在输出中,你会看到类似于以下的条目,显示了系统中每个资源的物理地址范围:
00000000-00000fff :
reserved
...
10000000-1fffffff :
System RAM
10000000-10ffffff :
Kernel code
11000000-11ffffff :
Kernel data
...
步骤 2: 确定合适的内存区域
基于 /proc/iomem
的输出,你需要找到一个未被标记为 "System RAM" 或其他关键资源(如 "Kernel code" 或 "Kernel data")使用的地址范围。
例如,如果你发现从 20000000
到 2fffffff
的范围没有在 /proc/iomem
中列出,这可能意味着这段内存是可用的。
步骤 3: 使用 memmap
预留内存
通过在系统启动时使用 memmap
内核参数预留内存。例如,如果你决定使用从 20000000
开始的 256MB 内存,可以在启动时添加如下参数:
memmap=256M$0x20000000
这告诉内核在物理地址 0x20000000
开始预留 256MB 的内存。
步骤 4: 加载 nvmet_rdma
模块并指定参数
加载 nvmet_rdma
模块时,使用 modprobe
并指定 nvmet_rdma_offload_mem_start
和 nvmet_rdma_offload_mem_size_mb
参数:
modprobe nvmet_rdma nvmet_rdma_offload_mem_start=0x20000000 nvmet_rdma_offload_mem_size_mb=256
这个命令加载 nvmet_rdma
模块,并告诉它使用从 0x20000000
开始、大小为 256MB 的内存区域进行 P2P 数据传输。
注意事项
- 在实际部署之前,请确保通过彻底测试来验证所选内存地址的有效性和性能影响。
- 在一些系统中,可能需要调整 BIOS 设置来禁用某些内存区域的系统使用,或者确保内存区域不被映射为其他用途(如显存)。
- 请注意,这个过程可能因系统配置、硬件和操作系统版本的不同而有所变化。
总的来说,找到合适的 nvmet_rdma_offload_mem_start
和 nvmet_rdma_offload_mem_size_mb
参数需要仔细规划和测试,以确保所选内存区域既满足 NVMe-oF RDMA 目标的性能需求,又不干扰系统的正常运行。