15.14. 为 NBD 传输模式增加异步 I/O (AIO)大小和缓冲区计数
本文档论述了如何更改 NBD 传输 NFC 参数,以便在使用 Migration Toolkit for Virtualization (MTV)产品时更改 NBD 传输 NFC 参数。
使用 AIO 缓冲仅适用于冷迁移用例。
- 在初始化 Warm Migration 前禁用 AIO 设置。如需了解更多详细信息,请参阅禁用 AIO 缓冲配置。
15.14.1. 密钥发现 复制链接链接已复制到粘贴板!
通过在带有以下值的单一 ESXi 主机上迁移使用多个虚拟机(10)实现最佳迁移性能:
-
VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 -
vixDiskLib.nfcAio.Session.BufCount=4
-
在使用 AIO 缓冲(Asynchronous Buffer Counts)设置时请注意以下改进:
-
迁移时间缩短为 31.1%,从
0:24:32缩短为0:16:54。 -
读取率从
347.83 MB/s增加到504.93 MB/s。
-
迁移时间缩短为 31.1%,从
- 在单一虚拟机上使用 AIO 缓冲设置时,无法显著改进。
- 当使用来自多个主机的多个虚拟机的 AIO 缓冲设置时,无法显著改进。
15.14.2. 启用 AIO 缓冲配置 复制链接链接已复制到粘贴板!
验证 AIO 值的 Controller Pod 支持
确保
openshift-mtv命名空间中的forklift-controllerpod 支持 AIO 缓冲值。由于 pod 名称前缀是动态的,因此运行以下命令首先检查 pod 名称:
oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'输出示例如下:
forklift-controller-667f57c8f8-qllnx注意这是示例中的 pod 名称前缀:
forklift-controller-667f57c8f8-qllnx运行以下命令,检查 pod 的环境变量:
oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml检查输出中的以下行:
... \- name: VIRT\_V2V\_EXTRA\_ARGS \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP ...
编辑 ForkliftController 配置
在
openshift-mtv 命名空间中,运行以下命令来编辑ForkliftController对象使其包含 AIO 缓冲值:oc edit forkliftcontroller -n openshift-mtv在 spec 部分添加以下内容:
virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf" virt_v2v_extra_conf_config_map: "perf"
创建名为 perf的 ConfigMap
使用以下命令创建所需的 ConfigMap:
oc -n openshift-mtv create cm perf
准备 ConfigMap 内容
将所需的缓冲区配置值转换为 Base64。例如,对于 16/4:
echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64输出结果类似如下:
Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
编辑 ConfigMap
使用
binaryData部分下的 Base64 字符串更新 perf ConfigMap,例如:apiVersion: v1 kind: ConfigMap binaryData: input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo= metadata: name: perf namespace: openshift-mtv
重启 Forklift Controller Pod
- 重启 forklift-controller pod 以应用新配置。
-
确保
VIRT_V2V_EXTRA_ARGS环境变量反映了更新的设置。
验证迁移日志
运行迁移计划并检查迁移 pod 的日志。确认 AIO 缓冲区设置作为参数传递,特别是
--vddk-config 值。例如:
exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf日志摘录示例:
Buffer size calc for 16 value: (16 * 64 * 1024 = 1048576) nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAio_OpenSession: Opening an AIO session. nbdkit: vddk[1]: debug: [NFC INFO] NfcAioInitSession: Disabling read-ahead buffer since the AIO buffer size of 1048576 is >= the read-ahead buffer size of 65536. Explicitly setting flag '`NFC_AIO_SESSION_NO_NET_READ_AHEAD`' nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAioInitSession: AIO Buffer Size is 1048576 nbdkit: vddk[1]: debug: [NFC VERBOSE] NfcAioInitSession: AIO Buffer Count is 4注意以上日志是使用
debug_level = 4时
检查 ConfigMap 值内容位于 Migration Pod 中
登录到迁移 pod,并使用以下命令验证缓冲区设置:
cat /mnt/extra-v2v-conf/input.conf输出示例如下:
VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 vixDiskLib.nfcAio.Session.BufCount=4
启用调试(可选)
要启用调试日志,请将配置转换为 Base64,包括高级别:
echo -e "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=4`" | base64注意添加高级别将降低性能,仅用于调试目的。
15.14.3. 禁用 AIO 缓冲配置 复制链接链接已复制到粘贴板!
要禁用 AIO 缓冲配置,请完成以下步骤:
编辑 ForkliftController 对象:从 ForkliftController 对象的 spec 部分删除之前添加的行:
oc edit forkliftcontroller -n openshift-mtv删除以下行:
virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`" virt_v2v_extra_conf_config_map: "`perf`"删除 ConfigMap:删除之前创建的 perf ConfigMap:
oc delete cm perf -n openshift-mtv- 重启 Forklift Controller Pod (可选)。
如果需要,通过重启 forklift-controller pod 来确保更改生效。
15.14.4. AIO 缓冲(异步缓冲数)支持的关键要求 复制链接链接已复制到粘贴板!
VDDK 和 vSphere 版本
支持基于使用以下版本执行的测试:
- vSphere : 7.0.3
- VDDK : 7.0.3
- 对于其他 VDDK 和 vSphere 版本,请查看 官方 VMware 文档中的 AIO 缓冲支持。