16.14. 为 NBD 传输模式增加 AIO 大小和缓冲区计数


当您使用 Migration Toolkit for Virtualization (MTV)同步输入/输出(AIO)缓冲时,您可以更改 Network Block Device (NBD)传输网络文件复制(NFC)参数来提高迁移性能。

警告

使用 AIO 缓冲仅适用于冷迁移用例。

在初始化温迁移前禁用 AIO 设置。如需了解更多详细信息,请参阅禁用 AIO 缓冲配置

16.14.1. 密钥发现

  • 通过在带有以下值的单一 ESXi 主机上迁移多个(10)虚拟机(VM)来实现最佳迁移性能:

    • VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
    • vixDiskLib.nfcAio.Session.BufCount=4
  • 在使用 AIO 缓冲设置时请注意以下改进(同步缓冲数):

    • 迁移时间缩短为 31.1%,从 0:24:32 缩短为 0:16:54。
    • 读取率从 347.83 MB/s 增加到 504.93 MB/s。
  • 在单一虚拟机上使用 AIO 缓冲设置时,无法显著改进。
  • 当使用来自多个主机的多个虚拟机的 AIO 缓冲设置时,无法显著改进。

16.14.2. 支持 AIO 大小和缓冲区计数的主要要求

支持基于使用以下版本执行的测试:

  • vSphere 7.0.3
  • VDDK 7.0.3

16.14.3. 启用并配置 AIO 缓冲

您可以启用并配置与 Migration Toolkit for Virtualization (MTV)的同步输入/输出(AIO)缓冲。

流程

  1. 确保 openshift-mtv 命名空间中的 forklift-controller pod 支持 AIO 缓冲值。由于 pod 名称前缀是动态的,因此运行以下命令来检查 pod 名称:

    oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'

    例如,如果 pod 名称前缀为 "forklift-controller-667f57c8f8-qllnx",则输出为:

    forklift-controller-667f57c8f8-qllnx
  2. 运行以下命令,检查 pod 的环境变量:

    oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
  3. 检查输出中的以下行:

    ...
    \- name: VIRT\_V2V\_EXTRA\_ARGS
    \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP
    ...
  4. openshift-mtv 命名空间中,执行以下步骤来编辑 ForkliftController 自定义资源(CR):

    1. 运行以下命令,访问 ForkliftController CR 进行编辑:

      oc edit forkliftcontroller -n openshift-mtv
    2. ForkliftController CR 的 spec 部分添加以下行:

      virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf"
      virt_v2v_extra_conf_config_map: "perf"
  5. 运行以下命令来创建所需的配置映射 perf

    oc -n openshift-mtv create cm perf
  6. 将所需的缓冲区配置值转换为 Base64。例如,对于 16/4,运行以下命令:

    echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64

    输出结果类似如下:

    Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
  7. 在配置映射 perf 中,在 binaryData 部分中输入 Base64 字符串,例如:

    apiVersion: v1
    kind: ConfigMap
    binaryData:
      input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
    metadata:
      name: perf
      namespace: openshift-mtv
  8. 重启 forklift-controller pod 以应用新配置。
  9. 确保 VIRT_V2V_EXTRA_ARGS 环境变量反映了更新的设置。
  10. 运行迁移计划并检查迁移 pod 的日志。确认 AIO 缓冲区设置作为参数传递,特别是 --vddk-config 值。

    例如,如果您运行以下命令:

    exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf

    如果 debug_level = 4,日志包括类似如下的部分:

    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
  11. 验证迁移 pod 中是否有正确的配置映射值。通过登录到迁移 pod 并运行以下命令完成此操作:

    cat /mnt/extra-v2v-conf/input.conf

    输出示例如下:

    VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
    vixDiskLib.nfcAio.Session.BufCount=4
  12. 可选:运行以下命令来启用调试日志。命令将配置转换为 Base64,包括高级别:

    echo -e
    "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=4`"
    | base64
    注意

    添加高级别会降低性能,且仅用于调试目的。

16.14.4. 禁用 AIO 缓冲

您可以使用 Migration Toolkit for Virtualization (MTV)禁用冷迁移的 AIO 缓冲。您必须使用 MTV 为温迁移禁用 AIO 缓冲。

注意

以下流程假设根据启用和配置 AIO 缓冲中的步骤启用并配置 AIO 缓冲

流程

  1. openshift-mtv 命名空间中,执行以下步骤来编辑 ForkliftController 自定义资源(CR):

    1. 运行以下命令,访问 ForkliftController CR 进行编辑:

      oc edit forkliftcontroller -n openshift-mtv
    2. ForkliftController CR 的 spec 部分删除以下行:

      virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`"
      virt_v2v_extra_conf_config_map: "`perf`"
  2. 删除名为 perf 的配置映射:

    oc delete cm perf -n openshift-mtv
  3. 可选:重启 forklift-controller pod,以确保更改生效。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部