15.14. NBD トランスポートモードの非同期 I/O(AIO) サイズとバッファー数の増加
このドキュメントでは、Migration Toolkit for Virtualization (MTV) 製品を使用する際に、移行パフォーマンスを向上させるために NBD トランスポート NFC パラメーターを変更する方法を説明します。
AIO バッファーリングの使用は、コールド移行のユースケースにのみ適しています。
- ウォーム移行を初期化する前に、AIO 設定を無効にします。詳細は、AIO バッファー設定の無効化 を参照してください。
15.14.1. 主な調査結果
以下の値が指定された ESXi ホスト 1 台で複数の仮想マシン (10) を使用して移行すると、最適な移行のパフォーマンスが得られました。
-
VixDiskLib.nfcAio.Session.BufSizeIn64KB=16
-
vixDiskLib.nfcAio.Session.BufCount=4
-
AIO バッファー (非同期バッファーカウント) 設定を使用すると、次の改善が見られました。
-
移行時間は
0:24:32
から0:16:54
になり、31.1% 短縮されました。 -
読み取り速度は
347.83 MB/秒
から504.93 MB/秒
に向上しました。
-
移行時間は
- 単一の仮想マシンで AIO バッファー設定を使用した場合、大きな改善は見られませんでした。
- 複数のホストからの複数の仮想マシンで AIO バッファー設定を使用した場合、大きな改善は見られませんでした。
15.14.2. AIO バッファー設定の有効化
AIO 値に対するコントローラー Pod のサポートを検証する
openshift-mtv
namespace のforklift-controller
Pod が AIO バッファー値をサポートしていることを確認します。Pod 名の接頭辞は動的であるため、まず次のコマンドを実行して Pod 名を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'
oc get pods -n openshift-mtv | grep forklift-controller | awk '{print $1}'
出力例は次のとおりです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow forklift-controller-667f57c8f8-qllnx
forklift-controller-667f57c8f8-qllnx
注記これは、
forklift-controller-667f57c8f8-qllnx
などの Pod 名の接頭辞です。以下を実行して Pod の環境変数を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
oc get pod forklift-controller-667f57c8f8-qllnx -n openshift-mtv -o yaml
出力で次の行を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... \- name: VIRT\_V2V\_EXTRA\_ARGS \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP ...
... \- name: VIRT\_V2V\_EXTRA\_ARGS \- name: VIRT\_V2V\_EXTRA\_CONF\_CONFIG\_MAP ...
ForkliftController 設定の編集
openshift-mtv
namespace で、次のコマンドを実行してForkliftController
オブジェクトを編集し、AIO バッファー値を含めます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit forkliftcontroller -n openshift-mtv
oc edit forkliftcontroller -n openshift-mtv
spec セクションに以下を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf" virt_v2v_extra_conf_config_map: "perf"
virt_v2v_extra_args: "--vddk-config /mnt/extra-v2v-conf/input.conf" virt_v2v_extra_conf_config_map: "perf"
perf
という名前の ConfigMap の作成
次のコマンドを使用して必要な ConfigMap を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc -n openshift-mtv create cm perf
oc -n openshift-mtv create cm perf
ConfigMap コンテンツの準備
目的のバッファー設定値を Base64 に変換します。たとえば、16/4 の場合:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64
echo -e "VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nvixDiskLib.nfcAio.Session.BufCount=4" | base64
出力は次のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo=
ConfigMap の編集
以下のように、perf ConfigMap を
binaryData
セクションの Base64 文字列で更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ConfigMap binaryData: input.conf: Vml4RGlza0xpYi5uZmNBaW8uU2Vzc2lvbi5CdWZTaXplSW42NEtCPTE2CnZpeERpc2tMaWIubmZjQWlvLlNlc3Npb24uQnVmQ291bnQ9NAo= metadata: name: perf namespace: openshift-mtv
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 値
がパラメーターとして渡されていることを確認します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf
exec: /usr/bin/virt-v2v … --vddk-config /mnt/extra-v2v-conf/input.conf
サンプルログの抜粋:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
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 の値のコンテンツが移行 Pod に含まれていることの確認
移行 Pod にログインし、次のコマンドを使用してバッファー設定を確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow cat /mnt/extra-v2v-conf/input.conf
cat /mnt/extra-v2v-conf/input.conf
出力例は次のとおりです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 vixDiskLib.nfcAio.Session.BufCount=4
VixDiskLib.nfcAio.Session.BufSizeIn64KB=16 vixDiskLib.nfcAio.Session.BufCount=4
デバッグの有効化 (オプション)
デバッグログを有効にするには、高ログレベルを含む設定を Base64 に変換します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow echo -e "`VixDiskLib.nfcAio.Session.BufSizeIn64KB=16\nVixDiskLib.nfcAio.Session.BufCount=4\nVixDiskLib.nfc.LogLevel=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 セクションから以前に追加した行を削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc edit forkliftcontroller -n openshift-mtv
oc edit forkliftcontroller -n openshift-mtv
以下の行を削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`" virt_v2v_extra_conf_config_map: "`perf`"
virt_v2v_extra_args: "`–vddk-config /mnt/extra-v2v-conf/input.conf`" virt_v2v_extra_conf_config_map: "`perf`"
ConfigMap を削除します。以前に作成した perf ConfigMap を削除します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete cm perf -n openshift-mtv
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 バッファーサポートを確認してください。