Cuttlefish: マルチテナンシー

Cuttlefish のマルチテナンシーを使用すると、ホストマシンで起動呼び出しを 1 回行うだけで複数の仮想ゲストデバイスを起動できます。

これらの複数の Cuttlefish 仮想マシンでホストのディスク リソースの一部を共有できるため、ディスク容量を節約できます。各仮想マシンには、Android パーティション(superuserdataboot など)を対象として含む個別のディスク オーバーレイが割り当てられます。ゲストディスクに変更がある場合、ゲスト固有のディスク オーバーレイ内で行われ、各 Cuttlefish 仮想マシンにそのディスク パーティションのコピーオンライト ビューが与えられます。各仮想デバイスのディスクビューに書き込むデータが多くなると、ホストディスク上のオーバーレイ ファイルのサイズが大きくなります。これは、これらのオーバーレイ ファイルが元の状態と現在の状態の間の差分をキャプチャしているためです。

オーバーレイ ファイルをリセットすると、Cuttlefish ディスクを元の状態に戻すことができます。このプロセスを「Powerwashと呼びます。

インスタンス番号

Cuttlefish デバイスは、インスタンス番号に関連付けられているホスト上でリソースを作成して使用します。たとえば adb 接続は、インスタンス番号が 1 の Cuttlefish デバイスのポート 6520 で、TCP サーバー ソケットを介して公開されます。複数のインスタンスが起動される場合、各デバイスのポートに TCP サーバー ソケットが作成されます。ポート番号は、最初のデバイスでは 6520、次のデバイスでは 6521 となり、以降の各デバイスのポート番号は 1 つずつ大きくなります。

サポートされるインスタンスの最大数の変更

ホスト側のリソース(TAP ネットワーク デバイスなど)を Cuttlefish 仮想マシン用に事前に割り当てる必要があります。デフォルトでは、cuttlefish-base Debian パッケージにより、インスタンス番号 1 から 10 のリソースがプロビジョニングされます。

これを変更するには、/etc/default/cuttlefish-host-resourcesnum_cvd_accounts を変更し、次のコマンドを実行して cuttlefish-host-resources サービスを再起動します。

sudo systemctl restart cuttlefish-host-resources

マルチテナント インスタンスの管理

ここでは、デバイスの起動方法と停止方法について説明します。これは、単一テナントとマルチテナントの両方の launch_cvd 呼び出しに適用されます。

起動

複数の Cuttlefish デバイスを同時に起動するには、--num_instances=N フラグを使用します(N は、起動するデバイスの数)。デフォルトでは、インスタンス番号が 1 のデバイスから起動されます。

launch_cvd --num_instances=N

開始インスタンス番号を変更するには、次のいずれかを行います。

  • 開始インスタンス番号として N を指定した --base_instance_num=N フラグを追加します。

    launch_cvd --base_instance_num=N
    
  • ユーザー アカウントが vsoc-NN と一致する Cuttlefish を起動します(NN は、2 桁の形式のベース インスタンス番号)。たとえば、ユーザー アカウントが vsoc-01 の Cuttlefish を起動するには、次のコマンドを実行します。

    launch_cvd --base_instance_num=1
    

停止

前回の launch_cvd 呼び出しで起動されたすべてのデバイスを停止するには、次のコマンドを実行します。

stop_cvd