2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
リンクをコピー
記事をブックマーク
鈴ヶ嶺聡哲氏(以下、鈴ヶ嶺):よろしくお願いします。鈴ヶ嶺です。まず概要を説明します。macOSの「11 Big Sur」から、新しくLinux VM作成の高レベルAPIのVirtualization.frameworkが登場しました。本発表ではこれがメインになります。
Objective-CやSwiftのAPIが提供されていますが、「あれ? Rust APIがないなぁ」「みんなRust好きだよね」みたいな。ちょっと唐突な話になりますが(笑)。Rustのbindingsを今回作成したので、それの発表をします。
内容についてですが、仮想化技術についての基本的な背景と、macOSの仮想化技術の変遷や、仮想化技術を支えるツールについて説明します。次に、Rust bindingsのvirtualization-rsの説明と、Linux bootのデモをして、最後に従来の仮想化技術との性能比較を行いたいと思います。
アジェンダはこのようになっています。
自己紹介ですが、鈴ヶ嶺と言います。2020年4月にNTTコミュニケーションズに入社して、イノベーションセンターテクノロジー部門のAIインフラチームで働いています。興味のある技術分野は、クラウドに関することや、機械学習基盤、仮想化技術。言語は、Rustがけっこう好きです。 業務としては、パブリックやハイブリッドクラウドの技術検証や、機械学習基盤の技術検証をやったり、ほかに社外のコンテストに出場したり、アドベントカレンダーを書いたりしています。
まず、仮想化技術の背景を説明します。1974年に提唱された、仮想化を効率的に実現するための要件として、PopekとGoldbergの仮想化要件というのがあります。
VMMの3つの特性としては、等価性と効率性、資源管理があります。等価性とは、元のマシン上で直接実行された場合と、同じような挙動をすることを指しています。効率性は、統計的に多くの処理を、VMMソフトウェアの介入なしに実行できることが求められています。
最後の資源管理は、リソースを完全に制御可能であることが求められています。これは、明示的に割り当てられていないリソースはアクセスを不可能にして、すでに割り当てられているリソースの制御を取り戻せることが、“リソースを完全に制御可能である”ことになります。
Formal requirements for virtualizable third generation architectures
ここで、命令の分類は2つに分けられます。1つ目が特権命令、2つ目がセンシティブ命令です。特権命令は本当に特権命令で、プロセッサーがユーザーモードの場合にトラップされる命令になっています。センシティブ命令は、2つに分けられます。
1つ目が、制御センシティブ命令という、システムの資源に対する変更命令を指しています。2つ目は、動作センシティブ命令と呼ばれ、資源の構成に対して依存する命令になっています。
この論文で最も重要な定理である「センシティブ命令が特権命令のサブセットであれば、VMMが構築可能である」ことを、この論文では計算モデルによって証明しています。
ただ、当時のx86はその要件を満たしていないこともわかっています。x86のリングプロテクションという、トラップする機構はありますが、トラップできないセンシティブ命令が存在します。
このような背景があり、VMMを構築可能にする仕組みとして、Binary Translationや準仮想化、あとはIntel VT-xなどの技術がこれから登場します。
Analysis of the Intel Pentium's Ability to Support a Secure Virtual Machine Monitor
最初に、Binary Translationについて説明します。これはVMwareやVirtualboxなどで用いられている技術で、問題ない命令はそのまま実行しますが、センシティブな命令の場合、それをトラップして動的に書き換えて、ハードウェアで実行するかたちになっています。
動的な命令の書き換えと思ってもらえればいいです。この場合だと、OS側に特別変更することは不要になり、有用です。
次に、準仮想化と言われる技術があります。Xenなどで用いられている技術ですが、ハイパーバイザー向けに書き換えた専用のゲストOSが必要になっているので、先ほどとは違ってOSの変更コストが必要です。
ハードウェアを使うためには、システムコールのものを、ハイパーバイザーコールを発行して処理を依頼するかたちになっています。先ほどと違って、静的な命令の置き換えと考えてもらえればいいと思います。
次に、もともとx86は仮想化できないアーキテクチャでしたが、Intel VT-xはそれを仮想化可能なアーキテクチャにするための拡張技術です。
root modeとnon-root modeの2つがあり、各モード別々でリングを割り当てられるため、OSの変更が不要になります。non-root modeでセンシティブな命令を実行すると、root modeにトラップして、VM Exitしてくれるので、仮想化VMMが構築可能であることがわかります。
VMをExitする命令は、VMCSという構造体のconfigによって制御可能なので、“どこで”“なにで”“どの命令で”センシティブにするか、しないかを制御可能です。
Intel VT-xなどの技術を利用したものが、LinuxのKVMです。2008年に開発が開始されて、のちにRedHatに買収されますが、Linux Kernel 2.6.20から標準搭載になっています。/dev/kvmのように、Linux kernel moduleとして存在しています。
KVM自体はエミュレーションを行わないで、QEMUなどと組み合わせることで仮想マシンとして使えます。KVMの1つのメリットとしては、Linuxのdriverが資産としてそのまま使用可能なので、Linuxで使えたものがそのまま使えます。
余談ですが、AWSなどのクラウドは、将来的にはKVMベースのNitro Hypervisorに移行する見通しがあるそうです。
次に、FreeBSDでのbhyveがあります。これもLinuxのKVMのようなVMMです。NetAppが2011年に開発を開始して、FreeBSD 10.0でデフォルトで採用されています。
これもIntel VT-xを利用していて、VT-x命令を発行するカーネルモジュールのvmm.koと、VM実行プログラムのbhyveによって成り立っています。余談ですが、bhyveはもともとBHyVeという表記でしたが、シンプルな小文字のbhyveに置き換わった経緯があります。
ARMについても説明しておきます。ARMではもともとEL0、EL1というかたちでトラップする仕組みでしたが、その下にEL2というエクセプションのレベルを1つ追加して、EL0とEL1のセンシティブ命令がトラップ可能になったので、VMMが構築可能であることがわかりました。
次にmacOSの仮想化技術について説明します。macOSではHypervisor.frameworkという、3rd partyのkernel extensionsなしで、ユーザー空間でハイパーバイザーを実現する機能があります。
当初はIntel VT-xを制御するようなAPIでしたが、のちのApple Siliconなどが登場したうえで変わってきます。このようなライフサイクルでVMが動きます。
Hypervisor.frameworkのAPIは、IntelとApple Siliconでどうなっているのかの話ですが、実はAPIは共通ではありません。(スライドで)以下はVirtual MachineのManagement APIを示していますが、このようにぜんぜん違ったAPIになっています。そのため、アーキテクチャによって構造は変えていく必要が、現状はあります。
Michaelさんという、toy projectとしてHypervisor.framework上にDOSのエミュレーターなどを作っていた人がいますが、本格的なMac上のハイパーバイザーとして、Mac向けにFreeBSDのbhyveをポートとして、xhyveを実装しました。
現状、Big Surではちょっと動きません。初期のDocker for Macなどは、xhyve上のLinuxで実装されていました。このように、Dockerエンジンはxhyve上で動いています。
次に、hyperkitと呼ばれる、Dockerがxhyveをforkして開発しているツールがあります。VPNKitやDataKitと連携するためにforkして使用していますが、Intel MacのDockerではこのようなものが動いています。
現状のBig SurのIntel Macには対応していますが、アーキテクチャが違うApple Silicon(M1)は未サポートです。現状Intel MacでDockerなどを使用している方は、com.docker.hyperkitが動いています。
例えば、minikubeとか言われるk8sの小さなクラスタなどはhyperkitのdriverをサポートしているので、Hypervisor.framework上でk8sが構築可能です。このようにhyperkitでテストとしてTiny Core Linuxを動かすコマンド例もあるので、よかったら試してみてください。
(次回につづく)
関連タグ:
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略