読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

跳ね橋を叩いて渡る An introduction to DrawBridge まとめ #kernelvm

勉強会

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に乗る?