• 検索結果がありません。

オペレーティングシステム 論文購読 (2015/1/27) 味曽野雅史

N/A
N/A
Protected

Academic year: 2021

シェア "オペレーティングシステム 論文購読 (2015/1/27) 味曽野雅史"

Copied!
56
0
0

読み込み中.... (全文を見る)

全文

(1)

論文購読

(2015/1/27)

(2)

中心に紹介する論文

•  OSv: optimizing the operating system for virtual machines

Avi Kivity, Dor Laor, Glauber Costa, Pekka Enberg, Nadav Har’El, Don Marti, and Vlad Zolotarov (Cloudius Systems) USENIX ATC’14: 2014 USENIX Annual Technical Conference

https://www.usenix.org/conference/atc14/technical-sessions/ presentation/kivity

•  OSvと呼ばれる仮想化を前提とした単一アプリケーション動作

(3)

内容

•  仮想化技術について •  OSv登場の背景 •  OSv •  デザイン •  利点 •  関連技術との比較 •  CoreOS •  コンテナ •  Docker

(4)

仮想化技術

•  一つのマシンで複数の仮想的なマシンを動かす技術 (その上でOS/アプリケーションを実行) •  1960年代(メインフレーム時代)から研究/利用 •  利点 •  ハードウェアリソースの有効活用 •  容易に仮想マシンの一時停止/複製が可能 •  簡単に開発環境を構築 •  動的マイグレーション (仮想マシンを動的に移動) •  スナップショット

(5)

用語

•  Host - 仮想化をおこなうマシン •  Guest - 仮想的に実行されるマシン. その上で動作するOSをGuest OSという.

•  Hypervisor / Virtual Machine Monitor (VMM)

- VMを管理する制御プログラム

(6)

Type2 VMM

•  Host OSのアプリケーションとして動作

•  VMWare Workstation, VMWare Fusion, VMware Player

•  VirtualBox •  Virtual PC •  QEMU Hardware Host OS VMM Guest OS Application Guest Application

(7)

Type1 VMM

•  OSを利用せずハードウェアの上のレイヤーに直接存在 •  VMWare ESXi •  Xen Hardware VMM Guest OS Guest Application Guest Application Guest OS

(8)

明確に

Type1 / Type2に分類されないもの

•  KVM (Kernel-based Virtual Machine) / bhyve

•  いずれもカーネルモジュールとして実装

(KVM: Linux, bhyve: Free BSD)

Hardware Guest Application QEMU OS (Linux Kernel) Guest OS Application

(9)

Type1 / Type2 VMM の比較

•  Type1 •  ユーザから扱いやすい.手軽 •  Type2 •  ハードウェア性能をいかせる •  VPS / クラウドで利用されているのはこちら

(10)
(11)

PopekとGoldbergの仮想化要件

•  “Formal requirements for virtualizable third generation

architectures”

Gerald J. Popek, Robert P. Goldberg (1974)

•  仮想化に求められる事 •  Equivalence •  VMMで動作するプログラムは実マシンで動作する場合と時間の遅れを除い て等価 •  Resource Management •  VMMが仮想化された資源を完全に管理すること •  Efficiency •  大部分の命令は直接実マシンのCPUで実行する

(12)

PopekとGoldbergの仮想化要件

•  定理1 CPUのすべてのセンシティブ命令が特権命令であれば仮想 化可能 (十分条件) •  特権命令 •  実行するときにプロセッサがユーザモードならトラップされる命令 •  センシティブ命令 •  制御センシティブ命令 •  システム資源の構成を変更する命令 •  動作センシティブ命令 •  システム資源の構成に依存する命令 (CPUモードの読み取りなど)

(13)

•  x86の命令セット •  このままでは仮想化できない

x86の場合

特権命令 センシティブ命令 それ以外

(14)

•  ソフトウェアで命令をシミュレートする •  QEMU 全ての命令をソフトウェアで実行 •  VMWare センシティブな命令のみを動的に変換して実行

方法

1: バイナリ変換

(15)

•  Guest OSのカーネルを修正してセンシティブな命令を実行す

る際にVMMを呼び出すようにする

•  Xen

(16)

方法

3: Intel VT-x (ハードウェア支援)

•  2006年からx86に追加

•  Guest OSを実行しているときとそうでないときでCPUモードを

(17)

(余談) メモリアクセスの効率化

•  Guest OS上のプロセスのメモリアクセス手順は, •  Guest OSの仮想アドレス •  → Guest OSの物理アドレス •  → VMMによりHost OS側のアドレスにマッピング •  効率化のためにハードウェア的サポート機能等が存在

(Intel EPT / shadow paging)

Hardware VMM

Application

(18)

近年の

VMM製品の流れ

•  1998 •  VMWare 創立 •  x86仮想化 •  2003 •  QEMU •  2004 •  Xen •  2006 •  Intel VT: x86のハードウェア的仮想化サポート •  (AWS) •  2007 •  KVM •  VirtualBox •  2008 •  Hyper-V •  2013 •  OSv

(19)

クラウド

/VPSにおけるVirtual Machine

•  ユーザはインターネット経由で外部のリソースを利用

•  ユーザは直接サーバを利用するのではなく,

サーバ上の仮想マシンを利用する

(20)

実際にクラウド

/VPS

で利用されている

VMM

•  AWS •  Xen •  さくらのクラウド / さくらVPS •  KVM •  ニフティクラウド •  VMWare •  Windows Azure •  Hyper-V ベース (推定)

(21)

クラウド上のサービス構成例

•  一つのOS上では単一アプリケーションのみ動かすことが多い

(HTTP Server, Database, App Server…)

(22)

クラウドで実行する

OSに求められる事

•  VMの形で提供される •  高速起動 •  省リソース •  高性能 •  自動デプロイ •  自動アップデート •  設定(再構成)が容易であること

(23)

クラウド上のサーバの構成例

•  例) tomcatサーバ Hardware VMM Tomcat JVM Guest OS 3つの保護レイヤー → オーバヘッド大 Application

(24)

レイヤーごとの保護機能

•  Guest OS上のプロセス間でメモリ等が保護されている •  一方であるVM上のプロセスは他のVM上のプロセスにアクセ スすることは不可能 Hardware VMM Application Guest OS Application Application Guest OS

(25)

重複している機能

•  保護機能 •  Guest OS •  プロセス間 / カーネルの保護 •  VMM •  VM間の保護 •  ハードウェアの抽象化 •  Guest OSが利用するハードウェア そのものがVMMにより抽象化されたもの Hardware VMM Tomcat JVM Guest OS クラウド上のVMで動作することを前提としたOS を設計すればこれらのオーバヘッドを減らせるのでは?

(26)

OSv

•  http://osv.io •  クラウドでの動作を前提に最適化されたOS •  目標 •  既存のLinux実行ファイル(ELF)が動作可能 •  アプリケーションはLinuxよりも速く動作する •  OSのサイズを可能な限り小さくし,VMの再構成/起動時間を短くする •  新規アプリケーション向けの新しいAPIの提供 •  モダンな言語で作成 (C++11が中心)

(27)

OSvのデザイン

•  Library OSという考え方 / Unikernels

•  対象: x64, aarch64

KVM, Xen, VMWare, VirtualBox, EC2, GCE で動作

•  VMの中で一つのアプリケーションのみを動かす •  単一メモリ空間 •  forkなし •  VMサイズ: 20MB~ •  最小限のハードウェアサポート •  一部の機能は外部のプロジェクトのものを利用 •  ネットワークスタック(TCP/IP) : Free BSD •  Cライブラリヘッダ : musl libc •  ZFS ファイルシステム : Free BSD

•  ACPIドライバ : ACPICA project

(28)

Unikernels

•  Anil Madhavapeddy, Richard Mortier, Charalampos

Rotsos, David Scott, Balraj Singh, Thomas Gazagnaire, Steven Smith, Steven Hand and Jon Crowcroft

Unikernels: Library Operating Systems for the Cloud (ASPLOS’13)

•  Library OS

(29)

対応アプリケーション

•  Java (Open JDK) •  Tomcat •  Cassandra •  Jetty •  Jython •  JRuby •  … •  Ruby •  mruby •  lua •  memchaced •  MySQL •  …

(30)

OSv

の特徴

•  メモリ空間 •  スピンロックの排除 •  ネットワークチャネル •  スレッドスケジューラ •  新規APIの提供 •  Zero-copy API •  Shrinker API •  JVM Ballooning

(31)

メモリ空間

•  単一アドレス空間 / ring 0 (特権レベル0) •  カーネルとアプリケーションでメモリが分かれていない •  仮想メモリ(MMU)を使用 •  x86_64 のlongmodeでは仮想メモリを使わなければならない •  mmap などのシステムコールに対応するため •  アプリケーションのメモリ保護は言語ランタイム(JVM等)が行う

(32)

スピンロック

•  マルチプロセッサシステムにおいて,カーネル内でロックをか ける単純な方法 → 割り込みを禁止にする •  ただしこの場合全ての割り込みが禁止されるので,適していな い  → スピンロックが使用される

void lock(int *lock) {

while (test_and_set(lock) == 1); }

(33)

Lock-holder preemption

問題

•  VMMは,仮想CPU(VCPUs)を物理CPU上でスケジューリン グして実行している •  VCPU1がロックを保持 •  VMMによるCPUのスケジューリング •  VCPU2がスピンロックでロック待ち → 再びVMMによりVCPU1が実行されるまで待つことになる → Lock-holder Preemption 問題

•  Thomas Friebel and Sebastian Biemueller :

“How to Deal with Lock Holder Preemption” Xen Summit North America (2008)

(34)

Lock-holder preemption 問題の解決策

•  解決策の一つ: lock-free アルゴリズムを使う •  スピンロックを使わない •  アトミックな操作の組み合わせ (compare-and-swap など) •  実装が大変 •  別の方法: VMMがスピンロックを検知したらスケジューリング をおこなう •  OSvでの方法 •  lock-free アルゴリズムによるスピンロックを排除 •  mutexをlock-freeで実装 •  スケジューラをスレッドで動作させず,CPUごとにrun queueを使う

(35)

ネットワークチャネル

•  従来のTCP/IP: Socketレベル, TCP/IPレベルでロックが発生

•  OSv: Van Jacobson’s network channel

(36)

スレッドスケジューラの特徴

•  Lock-free

•  スケジューラは各CPUごとにrun queueを保持

•  次に実行するスレッドを決めるとき,ロックする必要がない

(37)

スレッドスケジューラの特徴

•  あるCPUが別のCPUのスレッドを呼び出す方法

•  N個のCPUに対し,N個のLock-free queueを用意 (合計N^2)

•  各CPUは空でないキューを表すビットマスクを持つ

•  CPU s が CPU dのスレッドを起こしたいとき,

queue(s,d) にそのスレッドを追加する

→ CPU d におけるCPU sのビットマスクが有効になる → CPU d のinter-processor interrupt (IPI)が発生

(38)

スレッドスケジューラの特徴

•  プリエンプティブなマルチタスクに対応 •  タイマやIPIにより割り込まれる •  tick がない •  スケーラブル  •  O(lgN) の計算量 •  軽量なコンテキストスイッチ •  アドレス空間が一つなので,ページテーブルを切り替える必要がない •  x86_64のABIではFPUレジスタはcallerが保存することになっているの で,FPUレジスタの保存をしない

(39)

新規

APIの提供

•  標準的なLinuxのAPI(システムコール)だけでなく,OSvの性 能を引き出すAPIを提供する •  LinuxのAPIはマルチプロセス/マルチユーザを前提に設計されている •  OSvではカーネルとユーザスペースが分離されていない •  ページテーブルに直接アクセスできる •  言語ランタイムが新規APIを使用するように修正することで, アプリケーション性能の向上が見込める

(40)

新規

API : Zero-copy API

•  通常のソケットのAPIではカーネル空間のバッファからユーザ

空間へのバッファへのコピーが発生

•  OSvではこれらのコピーは不要

(41)

新規

API: Shrinker

•  アプリケーションがOSvにコールバック関数を登録 •  システムのメモリが少なくなったときそのコールバック関数が 呼ばれる •  コールバック関数がメモリの開放をおこなう •  使用例: キャッシュ容量の動的変更

(42)

JVM Ballooning

•  JVMは大部分のメモリをヒープから割り当てる •  JVM起動時のパラメータでヒープサイズを指定 •  性能を最大限引き出すために適切なヒープを割り当てたい → JVM Ballooning •  まずJVMのヒープを最初に最大限割り当てる •  メモリが足りなくなったらByteArrayの大きな配列を作る → この領域をOSに返却 (unmapping) •  ByteArrayで確保されているのでその部分はGCされない

(43)
(44)

他の評価結果

•  Ian Briggs, Matt Day, Eric Eide, Yuankai Guo, Peter

Marheine

Performance Evaluation of OSv for Server Applications (2015)

•  DNS および HTTP Serverの評価

•  CPU: Xeon E5530

•  メモリ: 12GB

•  VMM: Xen 4.4

(45)

DNS Server

•  BIND 9.8.4

(46)

HTTP Server Response

•  OSv: lighttpd1.3.45

(47)

OSvを扱いやすくするツール: Capstan

•  高速にVMを作成/デプロイするツール (go製)

•  マルチプラットフォーム

•  Docker(後述)のように手軽に扱える

(48)

関連技術との比較

•  CoreOS

•  コンテナ

(49)

CoreOS

•  http://coreos.com

•  軽量にカスタマイズされたLinux Distribution

•  後述のDockerと組み合わせて使用されることが多い

(50)

コンテナ

•  カーネルによるリソースの名前空間の分離 •  ファイルシステム •  ネットワーク •  プロセスID •  共有メモリ •  カーネル自体は共通 •  代表的なもの •  Free BSD jails (2000~) •  Linux Containers (LXC)

(51)

コンテナの利点

/ 欠点

•  利点 •  起動が高速 •  性能劣化が少ない •  複数の異なるバージョンのアプリケーションが実行しやすい •  インスタンスを複数立ち上げる必要がない •  欠点 •  ライブマイグレーションができない •  開発中 •  仮想マシン上でコンテナを使うという手段もある •  ホストと別種類のOSを利用ができない

(52)

Docker

•  https://www.docker.com

•  An open platform for distributed applications for

developers and systems

•  LXCを手軽に扱えるようにしたもの •  LXCのリポジトリ •  コマンドラインツール •  % docker run •  OSvでいうCapstan (CapstanはDockerを参考にしたもの) •  goで実装 •  マルチプラットフォーム

(53)

Docker? OSv?

(54)

開発者の意見

•  https://plus.google.com/+OsvIo/posts/fgzsepcScTa

•  Glauber Costa: "I once heard that hypervisors are the

living proof of operating system's incompetence”.

The failure of operating systems (LinuxCon Europe 2012) :

https://lwn.net/Articles/524952/ •  OSはタスクごとにCPUやメモリを分けることができない •  ハイパーバイザの分離機能はOSが持つべきでは? → コンテナ •  コンテナはVMより今は速いかもしれないが,将来もそうである とは限らない •  コンテナの速さの要はリソースの重複の排除 •  OSvも同様のことをしている

(55)

開発者の意見

•  OSvの方が,コンテナよりもより自然な抽象化をおこなってい る •  OSvは多くのクラウド上のアプリケーションがVM上で一つだ け動いているという事実に基づいて開発されている •  シンプルなデザイン

(56)

議論

•  Docker (コンテナ) vs OSv (仮想化) •  手間が少ない方か効率の良い方か? •  OSvの方がセキュリティは高いといえる •  どちらが一方を完全に上回っているということはない •  Dockerのようにコミュニティが活発化することが OSv普及の鍵ではないか (Capstan) •  果たしてそこまで最適化する需要があるのか? •  ハードウェア性能の向上

参照

関連したドキュメント

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを

状態を指しているが、本来の意味を知り、それを重ね合わせる事に依って痛さの質が具体的に実感として理解できるのである。また、他動詞との使い方の区別を一応明確にした上で、その意味「悪事や欠点などを

では,フランクファートを支持する論者は,以上の反論に対してどのように応答するこ

いかなる使用の文脈においても「知る」が同じ意味論的値を持つことを認め、(2)によって

 仮定2.癌の進行が信頼を持ってモニターできる

• 問題が解決しない場合は、アンテナレベルを確認し てください(14

CPU待ち時間 PCとPSWを 専用レジスタ

自分は超能力を持っていて他人の行動を左右で きると信じている。そして、例えば、たまたま