2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
リンクをコピー
記事をブックマーク
鈴ヶ嶺聡哲氏(以下、鈴ヶ嶺):よろしくお願いします。鈴ヶ嶺です。まず概要を説明します。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.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.12
今までとこれからで、エンジニアに求められる「スキル」の違い AI時代のエンジニアの未来と生存戦略のカギとは
PR | 2024.11.26
なぜ電話営業はなくならない?その要因は「属人化」 通話内容をデータ化するZoomのクラウドサービス活用術
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05