MSの仮想化技術の話
- Windowsをらいぶらりで動かす
- マイグレーション
- Dockerとの連携
- MSのDrawBridge
話すこと
- ライブラリOSの研究紹介
誰
- セキュリティ2015講師
- MSの回しものではない
モノリシックカーネル vs マイクロカーネル
モノリシックカーネル
- Linuxなど、垂直にハードウェアがぶらさがっている
マイクロカーネル
- カーネル部分を小さくして、並列に並んでいる
カーネルの歴史
- MTS 1967
- MINIX 1987
- Linux 1991
マイクロカーネル論争
- マイクロカーネルはプロセス間通信のオーバヘッドが大きすぎる(Linus)
- モノリシックカーネルは70年代の思想で、Linuxはx86に依存しすぎ
エクソカーネル
1995
マイクロカーネルをより小さくしたもの OSとライブラリとリンクした形
- カーネルにたくさんのライブラリを載せる必要がない
Xen
- エクソカーネルの思想の影響を受けている(2003)
- ライブラリではなく準仮想化ドライバ(ライブラリに相当する)
エクソカーネルとハイパーバイザ
- ベアメタルハイパーバイザで動くのがエクソカーネル
- べアメタルハイパーバイザで動くのが汎用OS
ライブラリOS
- エクソカーネルの↑で動作する、アプリケーションにリンクされるライブラリと一体化
クラウド時代のライブラリOS
- ハイパーバイザに全部やらせばよいのでは
- Dockerよりも軽量
- ユニカーネル (OCamlで書いたやつが動くのが発祥)
ユニカーネル(2013)
- OSv
- Mirage OS
- Rump Kernels
ClickOS
USeNIX ATC'
- それはエクソカーネルとどう違うのか
- ライブラリOS - ドライバ
エクソカーネル + ドライバ
ドライバをハイパーバイザの上に任せる
マイクロカーネルをさらに切り詰めたエクソカーネルとその上で動作するライブラリOS
- エクソカーネルにドライバがないならハイパーバイザで抽象化
- クラウドにおけるインスタンスの軽量化を目的としたライブラリOS
Drawbridge
(勝鬨橋的な)
Drawbridge(2011)
- サンドボックスの実現としてのライブラリOS
- アプリケーションのバイナリには手を加えない
- 巨大なWindowsサブシステムを切り詰めるかが焦点
そのアーキテクチャ
- Win7のアーキ。いちばんしたがカーネル win32kがとても大きい
Drawbridge win32kを限りなく小さく。プロセスベースのコンテナ
スレッディング、仮想メモリ、ファイルシステム、ネットワーキングのためのABI
- Windows以外のホストpicoprocessが動くようになるかも?
その性能
- Hyper-Vよりも軽量に動作する
- 2011当時では、MSのプロダクトに組み込む予定ではなかった
コンテナ技術とライブラリOSの歴史
- chroot 1982
- exokernel 1995
- drawbridge 2011
- docker 2013
- mirage os 2013
- osv 2014
coreos 2014(最小限のLinux)
mirageos osvはシンプルなライブラリOS
- drawbridgeはcoreosみたく機能の切り詰めがキモ。
Haven
- Haven(2014 船の停留所のイメージ)
- OSDI' 14のBest Paper
アプリケーションをいかに保護するか
階層型のトラストモデルは不完全
- 信頼できないクラウド条で、安全にアプリケーションを動かすには というのがモチベーション
Intel SGX
- インテルの新しいプロセッサ拡張
- EPCM(Enclave Page Chage Map)によるメモリ空間のアクセス制御 アプリケーションで保護したいメモリ空間(Enclave)を指定する
- EPCMを参照
- HavenをDrawbridgeで動かして、picoprocessのなかで保護したいものを暗号化する
Havenの性能
- トランザクション数の現象
- VMと比べえて、35%-65%の性能低下
Tardigrade
- クマムシみたいなのを意味
- 2015
- NSDI' 15
- VMWareのレプリケーションで障害時にロールバックできるような仕組みをライブラリOSを使うことで実現
- 低レイテンシで実現
- LVMによるチェックポイント
- 例外ハンドラによるスレッドコンテキストの保存
- セマフォ(データの重複やロックにも対処)
Tardigrade
- Bascule上に実装
- レイテンシの削減にはうまくいっている
Windows 10のSDKを読む
- SDKが配布されている
- picoprocessまわりのSDKってあるの
picoprocess
- Windows 8.1
- Windows 10 Build 10074
ただし未だにPspPicoRegistrationDisalbledとなっている(picoprocessを呼び出す機能はまだ不完全)
KPCR構造体の情報をたどってコード・リーディングしてみる
- レジスタの退避
FS/GSレジスタにはKPCR構造体が入る
_PS_PICO_PROVDER_ROUTINES picoprocess化したプロセスの登録
- _PS_PICO_ROUTINES
- PS_PICO_CREATE_PROCESS
API
- PspCreateなど
Server Silo Functions
- ソレ用の構造体が用意されている
_CONTAINER_ID_INFO
SiloはSiloオブジェクト
- APIを使ってSiloにアクセス
- ネームスペースの分離を行う関数
Windows版DockerはDrawbridgeなのか?
- それまで研究してきたDrawbridgeの成果を活用している
- Silo ネームスペースを分離する機能がWindows10に乗る?