ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
仮想化におけるシームレスな体験の構築
仮想化フレームワークの最新アップデートを学びましょう。仮想マシン(VM)がディスプレイのサイズを自動的に変更するように設定する方法、実行中のVMの保存と復元について説明し、デスクトップまたはデータセンターで実行される仮想化アプリのためのストレージとパフォーマンスのオプションについて解説します。 仮想化フレームワークの詳細については、WWDC22の「Create macOS or Linux virtual machines」をご覧ください。
関連する章
- 1:38 - Resize displays automatically
- 2:33 - Save and restore virtual machines
- 7:01 - Connect remote storage with Network Block Device
- 10:30 - Meet the NVMe storage device
- 11:48 - Add the Mac keyboard
- 12:01 - Improve Rosetta 2 performance in Linux virtual machines
リソース
関連ビデオ
WWDC22
-
ダウンロード
♪ ♪
Virtualizationチームの Scott Mionisです 今日はmacOS Sonoma の機能について説明します 仮想化を使用してシームレスな エクスペリエンスを作成します 仮想化フレームワークを使用して 仮想マシンを構成 管理 実行します macOS Sonomaでは 仮想MacとLinux仮想マシンが これまで以上に強力になっています より使いやすく新しい構成オプションに より高度にカスタマイズ可能です これを可能にする機能がたくさんあります このセッションでは いくつかの重要な項目と それらをアプリで 活用する方法について説明します まず仮想マシンの新しいワークフロー とユーザーエクスペリエンスの向上 次に新しいストレージと キーボードの構成オプション 最後にRosetta 2によって Linux仮想マシンで x86_64アプリがさらに高速に 実行される仕組みについて説明します 仮想マシンを操作する 新しい方法をいくつか見てみましょう 2つの強力な新機能について説明します まずディスプレイのサイズ変更が可能です 実行時にウインドウ全体に 収まるようにサイズが変更される 仮想マシンの新しい表示オプションです 次に仮想マシンの保存と復元です 実行中の仮想マシンを ディスクにシリアル化し 後で再開できるようにするメカニズムです サイズ変更可能な ディスプレイから始めましょう 仮想Macで作業する場合 画面サイズが大きな部分を占めます サイズ変更可能なディスプレイを使用すると 仮想マシンはウインドウ全体を表示するよう 画面解像度を動的に調整し スペースを最も効率的に利用できます これをコードに落とし込んでみましょう
独自のアプリで サイズ変更可能な表示を使用するには まずVZVirtualMachineView を初期化します
ディスプレイのサイズを変更するには 新しいautomaticallyReconfiguresDisplay プロパティをtrueに設定します それだけです! VZVirtualMachineView のサイズを変更すると 仮想マシンに表示サイズを調整するよう 自動的に指示されます 表示を固定しておきたい場合は このプロパティをデフォルト値 のままにすることができます 次に仮想マシンの保存と 復元について説明します 仮想マシンを停止するということは VMをパワーオフすることを意味します 仮想マシンを起動するということは コールドブートを実行することを意味します ただしMacで作業している場合 ほとんどのアプリは 作業中の進行状況を保存します 仮想マシンにも同じことが当てはまります
仮想マシンを実行しているとします そして進捗状況を失わずに 閉じたいと考えています 仮想マシンをファイルに保存し 後で実行を再開できます または作業内容を バックアップしたいとします いつでも仮想マシンを保存でき ディスクや補助ストレージなどの 外部リソースのクローンを作成できます そして時間を遡りたい場合は 仮想マシンを巻き戻して 前の状態に戻すことができます この機能を使用すると さまざまなことが可能になります それでは実際に実行してみましょう 私はmacOS Sonomaを実行しています デスクトップ上には同じく 仮想化サンプルアプリ内に macOS Sonomaを実行する 仮想Macがあります Apple Storeでのエキサイティングな 旅のためにリサーチを行います マップを開いて AirPodsの詳細のため Appleのサイトを閲覧します ここで仮想マシンをオフにせずに 休憩したいと思います アプリを終了するときに 仮想マシンを保存します
その後アプリを再起動すると 仮想マシンは中断したところ から実行を再開します すべてのタブを開いた状態です これを独自のアプリに 組み込む方法を見てみましょう
仮想マシンを保存する前に 仮想マシンを一時停止します これにより仮想マシンは実行が 一時停止されて安定した状態になります 次に新しい saveMachineState APIを呼び出して 指定したURLにファイルを書き込みます 仮想マシンの実行時 の状態がすべて含まれます 後で実行し続けるために 必要なものがすべて揃っています ディスクイメージなどの外部リソースは 個別にコピーする必要があります 仮想マシンを保存したので 復元しましょう
仮想マシンの状態を復元するには 同じ構成から 新しいVZVirtualMachine を作成することから始めます
仮想マシンを直接起動する代わりに 仮想マシンをコールドブートします 新しい restoreMachineState APIを呼び出し 以前に保存したファイルのURLを渡します そして今仮想マシンは 以前とまったく同じ状態になっています
中断したところから実行を再開できます 以前の保存から 仮想マシンを復元する場合は いくつかの点に留意する必要があります まず保存ファイルには 仮想マシンのデータが含まれています それは保護する必要があります これらのファイルは ハードウェアで暗号化され 可能な限り強力な保証が提供されます 他のMacまたはユーザーアカウントは 他人の保存ファイルを読み取ったり 仮想マシンを復元したりできません また現在保存されたファイルは バージョン管理されているため 将来的に新しい機能を 追加することができます ファイル形式が変更され 保存ファイルを復元できない場合 フレームワークはアプリが処理 できるように特定のエラーコードを返します この問題が発生した場合はファイルを破棄し 仮想マシンを再起動すると 元の状態に戻ります 次に仮想マシンを構築する 新しい方法をいくつか見てみましょう まずはネットワークブロックデバイスです これによりストレージデバイスを ネットワーク経由で 仮想マシンに接続できるようになります 次にvirtioブロックデバイス の代替となる NVMeコントローラ デバイスのサポートです そして最後に仮想Macでの作業を より直感的にできる Macキーボードです グローブキーなどの Apple固有のキーをマッピングし 仮想マシンに直接接続します まずはネットワークブロック デバイスから始めましょう 仮想化フレームワークでは通常 ストレージはローカルで提供され 同じMac上でディスク イメージの読み取りと書き込みを行います しかしmacOS Sonomaでは 仮想化フレームワークはサーバから リモートでストレージを提供できます これを可能にするプロトコルは ネットワークブロックデバイス(NBD)です 仕組みを詳しく見てみましょう 仮想化フレームワークはNBDプロトコル のクライアント側を実装します 仮想マシンがディスクにアクセスすると リクエストは同じ仕様に準拠している NBDサーバに転送されます NBDサーバは 必要なI/Oを実行した後 データで応答します これは2つの理由から非常に柔軟です まずストレージはどこにでも 配置できるようになりました 同じMac上 またはネットワーク上の リモートサーバ上で 次にストレージは独自の サーバによって管理されるため 必要なカスタムI/Oを実装できます それがカスタムイメージ フォーマットであっても 物理ドライブであっても これらすべては仮想マシン に対して完全に透過的です これを設定する方法を見てみましょう 仮想化フレームワークAPIでは ストレージデバイスの初期化が 2つの部分に分かれています
まずデバイスの種類を選択します これは仮想マシンに提供される インターフェイスを定義します そして添付ファイルを選択すると Mac上でデータが実際に どのように表現されるかを選択します 仮想マシンではさまざまなものを 組み合わせることができます 仮想化フレームワークは virtioブロックデバイスや USB大容量ストレージデバイス などの仮想デバイスをサポートします これらのデバイスのいずれでも ディスクイメージ上のデータを 読み取り書き込むディスクイメージの 添付ファイルなどの添付ファイルや NBDサーバ上のデータの 読み取りと書き込みを行う 新しいネットワークブロックデバイス アタッチメントを使用できます このNBD添付ファイルを コードで設定してみましょう これをアプリで使用するには まずNBDサーバを指す URLを指定します これは特定のサーバ上の 特定のディスクを識別する特別なURLです 次にこのURLを使用して新しいNBD ストレージアタッチメントを初期化します 最後にこのアタッチメントを使用して ストレージデバイスを初期化します この例ではvirtioブロック デバイスを使用します ほとんどのユースケースでは 最もパフォーマンスの高いオプションです ストレージは ネットワーク経由で提供されるため 接続がいつでも失われる可能性があります こういった事態が起こった場合には 何らかのアクションを起こす必要があり 仮想マシンを一時停止するか 接続を再確立します
この場合 接続の状態が変化したときに通知される カスタムデリゲートクラスをアタッチして 必要なコードを実行できます 仮想化フレームワークの ストレージオプションへの追加は Non-Volatile Memory Express (NVMe)です NVMeは多くのLinuxカーネル で有効になっている 標準化されたテクノロジーであり そのアプリはより具体的です なぜそれを使用したいのか から始めましょう ほとんどのユースケースでは virtioブロックストレージによって 提供される準仮想化インターフェイスは 最も簡単かつ高速に使用できます これは確かに仮想Mac の場合に当てはまります ただし一部の Linux仮想マシンには virtioドライバーがありません これらは仮想環境で実行するように 構築されていないカーネルかもしれません これらのカーネルにはNVMe コントローラデバイス用の ドライバーが含まれている ことがよくあります macOS Sonomaでは NVMeコントローラデバイスは 仮想化フレームワークでエミュレートされ より多くのオペレーティングシステムを 仮想マシンで実行できるようになります NVMeを構成するには 仮想マシンを構築するときに 新しいデバイスタイプを使用します NVMeはLinux仮想マシン専用で もちろんNBDもサポートします そして今Macキーボードでは Apple固有のキー押下は 仮想Macによってキャプチャされます つまり仮想Macで 言語切り替えやエモートなどの機能に グローバルキーを使用できるということです さてRosetta 2 について話しましょう Linux仮想マシンの Rosetta 2は macOSで使用されているのと 同じテクノロジーです そしてmacOS Sonomaでは パフォーマンスの向上により 仮想Linux環境でRosetta 2は さらに高速に実行されます これがどのように可能になるか を見ていきましょう
Rosetta 2は実行可能ページ をオンデマンドで変換し 実行可能ファイルを tx86_64アプリ全体を 変換するのに待つより 速く起動できるようにします アプリの実行中に Rosetta 2は 定期的に実行を停止し コードの新しい領域を 変換する必要があります アプリが実行 を開始したばかりのとき このオーバーヘッドが最も 顕著になる可能性があります コードを初めて変換する必要があるためです しかし同じライブラリにリンクしたり 同じ実行可能ファイルを実行する 別のアプリを起動すると たとえそのコードがすでに 返還されていたとしても Rosetta 2ではその作業を すべてやり直す必要があります この問題はキャッシュで解決できます ライブラリまたは 実行可能バイナリが転換されるたびに Rosetta 2は結果を ディスク上のキャッシュに保存します そしてそれを必要とする 他のアプリとそれを共有し 不必要な再変換の オーバーヘッドを回避します macOS Sonomaでは 仮想化フレームワークは 新しいランタイムデーモンを使用して Linux仮想マシンに この最適化をもたらします これを設定するには 2つの手順を実行する必要があります まずRosetta 2ランタイム と新しいキャッシュデーモンの間の 通信チャネルを構成するための 新しいAPIがあります 次に仮想マシンでデーモンを 起動する必要があります Rosetta 2ランタイムと 新しいデーモンが 仮想マシン内で並行して 実行されるようになります 2つのプログラムは 仮想化フレームワークと通信して 接続を確立します 動的リンカーリクエストなどは キャッシュを管理する デーモンに転送されます そしてRosetta 2ランタイムは 事前に変換されたバイナリをフェッチします デーモンから直接変換するため 再変換のオーバーヘッドがなくなります コンパイルやパッケージのインストールなど 実行負荷の高いタスクに 最大の影響が見られます 仮想化フレームワークを使用すると アプリに非常に多くの 優れたオプションを導入できます 始める方法について話しましょう 仮想MacとLinux仮想マシンの両方で サイズ変更可能なディスプレイを 使用することを検討してください たった1行のコードでユーザー エクスペリエンスが大幅に向上します Macキーボードは最新の仮想Macと シームレスに連携できるように 特別に設計されています このデバイスを使用して 仮想Macを構成すると ユーザーエクスペリエンスを 向上させる簡単な方法です これらの機能のいくつかは 強力なエクスペリエンスを構築するために 使用できる構成要素です 仮想マシンを保存する機能は一例です 巻き戻しや進行状況の保存が アプリにどのように適合するかを 調査し始めてください NBDが提供する 柔軟性は驚くべきものです NBDはカスタムIOを必要とする アプリの多くの可能性を解き放ちます これはmacOS Sonomaで仮想マシンが できることのほんの始まりにすぎません ご視聴ありがとうございました Virtualizationチームでは 皆さんの 今後の開発の取り組みを楽しみにしています ♪ ♪
-
-
1:58 - Set display as resizable
// virtualMachine is a VZVirtualMachine. let virtualMachineView = VZVirtualMachineView() virtualMachineView.virtualMachine = virtualMachine virtualMachineView.automaticallyReconfiguresDisplay = true
-
4:20 - Save a virtual machine
// virtualMachine is a running VZVirtualMachine. try await virtualMachine.pause() let saveFileURL = URL(filePath: "SaveFile.vzvmsave", directoryHint: .notDirectory) try await virtualMachine.saveMachineStateTo(url: saveFileURL)
-
4:58 - Restore a virtual machine
let configuration = VZVirtualMachineConfiguration() // Customize configuration. let virtualMachine = VZVirtualMachine(configuration: configuration) let saveFileURL = URL(filePath: "SaveFile.vzvmsave", directoryHint: .notDirectory) try await virtualMachine.restoreMachineStateFrom(url: saveFileURL) try await virtualMachine.resume()
-
9:28 - Configure a Virtio block device with the NBD attachment
let url = URL(string: "nbd://localhost:10809/myDisk")! let attachment = try VZNetworkBlockDeviceStorageDeviceAttachment(url: url) let blockDevice = VZVirtioBlockDeviceConfiguration(attachment: attachment)
-
10:02 - Respond to events with a delegate with the NBD attachment
let url = URL(string: "nbd://localhost:10809/myDisk")! let attachment = try VZNetworkBlockDeviceStorageDeviceAttachment(url: url) // NetworkBlockDeviceAttachmentDelegate implements the delegate protocol. let delegate = NetworkBlockDeviceAttachmentDelegate() attachment.delegate = delegate let blockDevice = VZVirtioBlockDeviceConfiguration(attachment: attachment)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。