15.14. 为 NBD 传输模式增加异步 I/O (AIO)大小和缓冲区计数


本文档论述了如何更改 NBD 传输 NFC 参数,以便在使用 Migration Toolkit for Virtualization (MTV)产品时更改 NBD 传输 NFC 参数。

警告

使用 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
  • 在单一虚拟机上使用 AIO 缓冲设置时,无法显著改进。
  • 当使用来自多个主机的多个虚拟机的 AIO 缓冲设置时,无法显著改进。

15.14.2. 启用 AIO 缓冲配置

验证 AIO 值的 Controller Pod 支持

  • 确保 openshift-mtv 命名空间中的 forklift-controller pod 支持 AIO 缓冲值。

    由于 pod 名称前缀是动态的,因此运行以下命令首先检查 pod 名称:

    oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    forklift-controller-667f57c8f8-qllnx
    Copy to Clipboard Toggle word wrap
    注意

    这是示例中的 pod 名称前缀: forklift-controller-667f57c8f8-qllnx

  • 运行以下命令,检查 pod 的环境变量:

    oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
    Copy to Clipboard Toggle word wrap
  • 检查输出中的以下行:

    ...
    \- name: VIRT\_V2V\_EXTRA\_ARGS
    \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP
    ...
    Copy to Clipboard Toggle word wrap

编辑 ForkliftController 配置

  • openshift-mtv 命名空间中,运行以下命令来编辑 ForkliftController 对象使其包含 AIO 缓冲值:

    oc edit forkliftcontroller -n openshift-mtv
    Copy to Clipboard Toggle word wrap

    在 spec 部分添加以下内容:

    virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf"
    virt_v2v_extra_conf_config_map: "perf"
    Copy to Clipboard Toggle word wrap

创建名为 perf的 ConfigMap

  • 使用以下命令创建所需的 ConfigMap:

    oc -n openshift-mtv create cm perf
    Copy to Clipboard Toggle word wrap

准备 ConfigMap 内容

  • 将所需的缓冲区配置值转换为 Base64。例如,对于 16/4:

    echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64
    Copy to Clipboard Toggle word wrap

    输出结果类似如下:

    Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
    Copy to Clipboard Toggle word wrap

编辑 ConfigMap

  • 使用 binaryData 部分下的 Base64 字符串更新 perf ConfigMap,例如:

    apiVersion: v1
    kind: ConfigMap
    binaryData:
      input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
    metadata:
      name: perf
      namespace: openshift-mtv
    Copy to Clipboard Toggle word wrap

重启 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
    Copy to Clipboard Toggle word wrap

    日志摘录示例:

    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
    Copy to Clipboard Toggle word wrap
    注意

    以上日志是使用 debug_level = 4

检查 ConfigMap 值内容位于 Migration Pod 中

  • 登录到迁移 pod,并使用以下命令验证缓冲区设置:

    cat /mnt/extra-v2v-conf/input.conf
    Copy to Clipboard Toggle word wrap

    输出示例如下:

    VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
    vixDiskLib.nfcAio.Session.BufCount=4
    Copy to Clipboard Toggle word wrap

启用调试(可选)

  • 要启用调试日志,请将配置转换为 Base64,包括高级别:

    echo -e
    "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=4`"
    | base64
    Copy to Clipboard Toggle word wrap
    注意

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

15.14.3. 禁用 AIO 缓冲配置

要禁用 AIO 缓冲配置,请完成以下步骤:

  • 编辑 ForkliftController 对象:从 ForkliftController 对象的 spec 部分删除之前添加的行:

    oc edit forkliftcontroller -n openshift-mtv
    Copy to Clipboard Toggle word wrap
  • 删除以下行:

    virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`"
    virt_v2v_extra_conf_config_map: "`perf`"
    Copy to Clipboard Toggle word wrap
  • 删除 ConfigMap:删除之前创建的 perf ConfigMap:

    oc delete cm perf -n openshift-mtv
    Copy to Clipboard Toggle word wrap
  • 重启 Forklift Controller Pod (可选)。

如果需要,通过重启 forklift-controller pod 来确保更改生效。

VDDK 和 vSphere 版本

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

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat