osvのご紹介 in iijlab セミナー - iij innovation institute...osv: 重複部分の削除 •...
TRANSCRIPT
![Page 1: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/1.jpg)
OSvのご紹介 in iijlabセミナー
Takuya ASADA <syuu@cloudius-systems> Cloudius Systems
![Page 2: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/2.jpg)
自己紹介
• Software Engineer at Cloudius Systems
• FreeBSD developer (bhyve, network stack..)
![Page 3: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/3.jpg)
Cloudius Systemsについて• OSvの開発母体(フルタイムデベロッパで開発)
• Office:Herzliya, Israel
• CTO : Avi Kivity → Linux KVMのパパ
• 他の開発者:元RedHat(KVM), Parallels(Virtuozzo, OpenVZ) etc..
• イスラエルの主な人物は元Qumranet(RedHatに買収)
• 半数の開発者がイスラエル以外の国からリモート開発で参加
• 18名・9ヶ国(イスラエル在住は9名)
![Page 4: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/4.jpg)
![Page 5: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/5.jpg)
![Page 6: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/6.jpg)
![Page 7: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/7.jpg)
![Page 8: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/8.jpg)
OSvの概要
![Page 9: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/9.jpg)
OSvとは?• OSvは単一のアプリケーションをハイパーバイザ・IaaSでLinuxOSなしに実行するための新しい仕組み
• より効率よく高い性能で実行
• よりシンプルに管理しやすく
• オープンソース(BSDライセンス)、コミュニティでの開発
• http://osv.io/
• https://github.com/cloudius-systems/osv
![Page 10: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/10.jpg)
標準的なIaaSスタック
• 単一のアプリケーションを実行するワークロードではフルサイズのゲストOS+フル仮想化はオーバヘッド
7\SLFDO�&ORXG�6WDFN
$SSOLFDWLRQ
5XQWLPH
2SHUDWLQJ�6\VWHP
+\SHUYLVRU
+DUGZDUH
3URWHFWLRQ�DQG
DEVWUDFWLRQ
![Page 11: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/11.jpg)
コンテナ技術
• 実行環境をシンプルにする事が可能
• パフォーマンスも高い
&RQWDLQHUV
$SSOLFDWLRQ
5XQWLPH
2SHUDWLQJ�6\VWHP
+DUGZDUH
$SSOLFDWLRQ
5XQWLPH
Ɣ KLJK�VLPSOLFLW\Ɣ KLJK�UHVRXUFH�HIILFLHQF\Ɣ KLJK�SHUIRUPDQFH
![Page 12: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/12.jpg)
ライブラリOS=OSv
• コンテナと比較してisolationが高い
³/LEUDU\�26´
$SSOLFDWLRQ
5XQWLPH���26
+\SHUYLVRU
+DUGZDUH
$SSOLFDWLRQ
5XQWLPH���26
Ɣ KLJK�VLPSOLFLW\Ɣ KLJK�UHVRXUFH�HIILFLHQF\Ɣ KLJK�SHUIRUPDQFHƔ KLJK�LVRODWLRQ
![Page 13: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/13.jpg)
標準的なIaaSスタック:機能の重複、オーバヘッド
• ハイパーバイザ・OSの双方がハードウェア抽象化、メモリ保護、リソース管理、セキュリティ、Isolationなどの機能を提供
• OS・ランタイムの双方がメモリ保護、セキュリティなどの機能を提供
• 機能が重複しており無駄が多い
Hypervisor
Operating System
JVM
Application Server
Your App
Hardware
![Page 14: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/14.jpg)
OSv:重複部分の削除
• 重複していた多くの機能を排除
• ハイパーバイザに従来のOSの役割を負ってもらい、OSvはその上でプロセスのように単一のアプリケーションを実行
Hardware
Hypervisor
JVM
Application Server
Your App
Core
![Page 15: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/15.jpg)
OSvのコンセプト• 1アプリ=1インスタンス→シングルプロセス
• メモリ保護や特権モードによるプロテクションは行わない
• 単一メモリ空間、単一モード(カーネルモード
• Linux互換 libc APIを提供、バイナリ互換(一部)
• REST APIによりネットワーク経由で制御
![Page 16: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/16.jpg)
動作環境• ハイパーバイザ
• KVM
• Xen
• VMware
• VirtualBox
• IaaS
• Amazon EC2
• Google Compute Engine
![Page 17: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/17.jpg)
対応アーキテクチャ
• x86_64(32bit非サポート)
• aarch64
![Page 18: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/18.jpg)
対応アプリ(Java)
• OpenJDK7,8
• Tomcat
• Cassandra
• Jetty
• Solr
• OpenDaylight
• Gitblit
• Clojure
• JRuby(Ruby on Railsなど)
• Ringo.JS
• Jython
• Erjang
• Scala
• Quercus(PHPエンジン、Wordpressなど)
• minecraft-server
• Oracle NoSQLDB
![Page 19: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/19.jpg)
対応アプリ(Java以外)
• Ruby
• WEBRick
• Ruby on Rails
• Publify(Railsベースのブログエンジン)
• mruby
• lua
• Node.js
![Page 20: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/20.jpg)
何が動くの?(ネイティブアプリ)
• Redis
• memcached
• haproxy
• MySQL
• LevelDB
• SQLite
• twemproxy
![Page 21: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/21.jpg)
アプリケーションに提供される機能
• Linux互換API
• SMP・マルチスレッド
• TCP/IP(v4 only)
• ramfs・ZFS
![Page 22: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/22.jpg)
OSvを便利にする機能
![Page 23: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/23.jpg)
OSvをプログラムから操作 「REST API」
• REST API経由でOSvに任意の操作を実行
• 従来のOS:コマンド実行やファイルの編集で設定を変更(手動が基本、シェルスクリプトなどで自動化) OSv:APIで設定を変更(自動化が基本、CLIはオプション)
• HTTPSでクライアント証明書を用いたセキュリティ設定が可能
![Page 24: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/24.jpg)
OSvを対話的に操作「Lua CLI」
• 簡易的なシェル機能を実現
• 全ての機能をREST API上に実装
• OSvの中でも、リモートホストのLinuxマシンでも動作→SSH代わりに使用可能
![Page 25: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/25.jpg)
初期化スクリプトをサーバからダウンロード&実行
「Cloud Init」
• ネットワーク上からYAMLをダウンロードしてきて、ダウンロードしたファイルに記述されているREST APIを順次実行
![Page 26: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/26.jpg)
OSv GUI
• WebベースのGUI
• OSの負荷、JVMのリソース情報、アプリ固有のstatisticsなどの統計情報を表示
• アプリ固有情報は、まずCassandra, memcached, Redisの3つが対象
![Page 27: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/27.jpg)
![Page 28: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/28.jpg)
簡易デプロイツール「Capstan」
• 色々なアプリがインストールされたOSvのVMイメージを、コンパイルなどの難しい作業なしに手軽に実行するツール
• Linux, Mac, Windowsで動作
• VirtualBox, VMware, KVMなどに対応
![Page 29: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/29.jpg)
クラウドへのデプロイ
• Amazon EC2
• AMIを配布中
• Google Compute Engine
• capstanからアップロード可能
![Page 30: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/30.jpg)
OSvのフットプリントと性能
![Page 31: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/31.jpg)
フットプリント(ディスクイメージサイズ)
• mruby = 14MB
• Ruby = 48MB
• OpenJDK = 77MB
![Page 32: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/32.jpg)
フットプリント(最低メモリ使用量)
• mruby = 65MB
• Ruby = 75MB
• OpenJDK = 110MB
![Page 33: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/33.jpg)
ブート時間
• 1秒(DHCP、ZFS初期化込み)
![Page 34: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/34.jpg)
SPECjbb2005(Java)
• 120% faster than Linux guest
0
10250
20500
30750
41000
score
OSv Fedora
![Page 35: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/35.jpg)
iperf(network)
• 186% faster than Linux guest
0
5.25
10.5
15.75
21
Gbps
OSv Fedora
![Page 36: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/36.jpg)
fsmark
• 142% faster than Linux guest
0
55
110
165
220
files/sec
OSv(ZFS)Linux(ZFS)Linux(ext4)
![Page 37: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/37.jpg)
memcached
• ※ネットワークスタックを迂回する独自版memcachedでの比較
• 280% faster than Linux guest
0
2000
4000
6000
8000
score
OSv Fedora
![Page 38: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/38.jpg)
デモ
![Page 39: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/39.jpg)
OSvの実装
![Page 40: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/40.jpg)
OSvの設計(1)• OSvは複数のメモリ空間を持たないメモリ空間は全プロセス&カーネルで共通
• OSvはカーネルとユーザプロセス間で権限のモード切替を行わない従って,カーネルの機能はlibc経由の関数コールで実現
• メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任せるネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域を破壊するのはユーザ責任
• イメージとしては言語ランタイムをベアメタル環境に移植している状態に近い
![Page 41: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/41.jpg)
OSvの設計(2)• これにより、TLBミスやモード切替のコストを削減しパフォーマンスを上げることが出来る
• (JVMによる制限が無ければ)ユーザプロセスからデバイスが丸見え
• むしろ「アプリからvirtioを直接扱うことによって従来より性能を上げられる」と主張
![Page 42: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/42.jpg)
OSvの構成要素• C++11でスクラッチから書かれたカーネルの主な部分
• メモリマネージャ、スケジューラ、ELFローダ、ドライバ、VFS、ramfs、ACPI、システムコール、libc関数(一部)
• FreeBSDからの移植
• ZFS、TCP/IPスタック(v4のみ)
• musl-libc
• アプリケーション
• lua VM & CLI、REST server、OpenJDK、Ruby…
![Page 43: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/43.jpg)
OSvの構造
OpenJDK
OSv kernel
FBSD code
ZFS TCP/IP
COM port
virtio-blk
virtio-netclockACPI
scheduler
ramfsVFSMM
libc ELF loader
syscall emu
libjvm.so
java.so
Java apps
オリジナル実装(C++11)ポーティングバイナリ非ネイティブコードLuaVM
CLIRESTserver
![Page 44: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/44.jpg)
デバイスドライバ• 仮想マシン専用なので準仮想化デバイス+最低限のデバイスをサポート
• virtio-blk, virtio-net, virtio-scsi, virtio-rng
• vmware-pvscsi, vmxnet3
• xen pv driver
• SATA
• HPET、PV clock(KVM, Xen)
• ACPI
• Some legacy devices(IDE, VGA, COM, PS2)
![Page 45: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/45.jpg)
Linuxとの互換性• Fedora向けのOpenJDKバイナリが動作するレベル
• glibcの全関数が提供されている訳ではない
• musl-libcから必要に応じてAPIが移植されてきている
• 今まで必要無かったAPI、musl-libcに存在しないAPIが欠けている事がある
![Page 46: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/46.jpg)
アプリケーション• OSvが提供するlibcの範囲で動き、-fPIC(-shared)でビルドされている必要がある(最近PIE Executablesをサポート)
• アプリの実行=現在のメモリ空間への<app>.soのロードとmain関数の実行
• fork() / exec()はサポートされない →内部でコマンド実行するプログラムとの互換性がない
• マルチスレッドはサポートされる
![Page 47: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/47.jpg)
複数アプリケーションの実行
• プロセスは1つだが、スレッドを新しく作って<app>.soをロード&実行する事で複数アプリを実行する事は可能
• 但し、空間が共有されるため同じプログラムを2インスタンス起動する事が出来ない
![Page 48: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/48.jpg)
ネットワークIOの高速化
![Page 49: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/49.jpg)
net channel(1)• Linuxで提案されていたネットワークスタックの改善案
• Socket APIはプロセスのCPUで動き、パケット受信処理はソフト割り込みがスケジュールされたCPUで動くため、ロック競合とキャッシュ競合が起きる
• ドライバでパケットヘッダをチェックする最低限のコードを走らせて、宛先ソケットを特定即ソケットキューにパケットをキューイングプロセスがソケットを見に来るまで待つ
![Page 50: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/50.jpg)
net channel(2)• OSvではこれを実装(TCPのみ)
• TCPコネクション確立時にpacket classifierにルールを登録
• ドライバでpacket classifierを呼び出しマッチしたらnet_channelがこれを受け取り マッチしないなら通常パスへ
• マッチしたパケットはnet_channelのキューに登録してソケットでブロックしているプロセスを起床させる
• プロセスコンテキストでnet_channelにキューされたパケットがネットワークスタックで処理されプロセスに渡される
![Page 51: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/51.jpg)
net channel bench results
orig-1vcpu vjnc-1vcpu orig-4vcpu vjnc-4vcpu
TCP MAERTS 36571.80 38833.18 30570.87 37904.51
TCP STREAM 30078.82 46939.61 24550.12 32396.08
TCP REQUEST/RESPONSE 68786.90 70834.32 62702.22 66967.52
![Page 52: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/52.jpg)
zerocopy TX/RX• Socket APIを通してネットワークIOを行うと必ずコピーが発生してしまう
• 独自APIを追加することでゼロコピーを実現
• OSvはプロセスとメモリ空間が共有されているのでゼロコピーの実現が一般的なOSほど難しくない
![Page 53: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/53.jpg)
zerocopy API
• ssize_t zcopy_tx(int sockfd, struct zmsghdr *zm);
• void zcopy_txclose(struct zmsghdr *zm);
• ssize_t zcopy_rx(int sockfd, struct zmsghdr *zm);
• int zcopy_rxgc(struct zmsghdr *zm);
![Page 54: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/54.jpg)
zerocopy bench result• HostOS <-> KVM上のOSvで計測
• Normal RX: 57.8 Gbps
• Normal TX: 57.6 Gbps
• Zerocopy RX: 72.4Gbps (≒125 %)
• Zerocopy TX: 72.1Gbps (≒125 %)
![Page 55: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/55.jpg)
PF filter• FreeBSDネットワークスタックにはパケットフィルタ用のフックが存在
• これをユーザプログラムから直接呼び出しint pfil_add_hook(int (*func)(void *, struct mbuf **, struct ifnet *, int, struct inpcb *), void *, int, struct pfil_head *);
• これを利用したオリジナルのmemcached実装https://github.com/vladzcloudius/osv-memcached
• オリジナル比の性能:122%
![Page 56: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/56.jpg)
net channel from app• ※テスト実装無し
• net channel APIをユーザプログラムから直接呼び出し
• ほぼnetmap/DPDKなどと同じことが実現可能
• これに限らず、OSvの独自APIを呼び出す前提ならばより高速化が可能
![Page 57: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/57.jpg)
virtio-app• ※テスト実装無し
• ドライバをバイパスして直接virtio-netにアクセスすることも可能
• 実装コストはnet_channelやPF filterより更に上がるが、限界まで性能をだすことが出来ると考えられる
![Page 58: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/58.jpg)
メモリ管理
![Page 59: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/59.jpg)
メモリ管理• 汎用OSと同様の仮想メモリシステムを実装
• mmapによるアプリケーションからのメモリ要求をサポート(CassandraなどのアプリはJVMをバイパスしてJNIでmmapを行っている)
• 大きなマッピング要求ではhuge pageを使用
• スワップやpage evictionはサポートされない
![Page 60: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/60.jpg)
malloc()• malloc()はカーネルとユーザアプリで共通のメモリプールからメモリが割り当てられる
• リクエストサイズ別に複数のプールを持つ(slab allocatorと同じ)
• プールごとに最低1ページアロケート、足りなくなったらページを足す
![Page 61: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/61.jpg)
mmap()
• mmap()でanonymous mapping要求を受けたらリクエストサイズ分のページを割り付け
• file mappingの場合はZFSへmmap要求 FreeBSD版ZFSのコードがbuffer cacheを管理
![Page 62: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/62.jpg)
Shrinker• OSの残りメモリ量が少なくなった時に、アプリケーション側から登録したコールバックを実行、アプリケーションからメモリを解放
• 足りなくなったらOSへ返す事によりメモリ不足を回避
• JVMやbuffer cacheで使用
• 他のアプリからも使用可(OSv版memcachedなどで実装されている)
![Page 63: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/63.jpg)
JVM ballooning• OS起動時にほぼ全てのメモリをJVMヒープに割り当て
• OS側のメモリが足りなくなってきたらShrinkerを使って通知、Java側でByteArrayを作成し(GC対策)、この領域をOS側へ返還
• OSが使わないメモリ領域は引き続きJava側が使用出来る
• JVM自体のコードは無変更
![Page 64: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/64.jpg)
buffer cache shrinking
• JVMと同じくShrinkerの通知を受けてbuffer cacheをリリース、メモリをOSに返還
![Page 65: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/65.jpg)
まとめ• OSvは単一のアプリケーションをハイパーバイザ・IaaSでLinuxOSなしに実行するための新しい仕組み
• より簡単に管理でき、より速い性能を得られます
• Github上で開発されており、誰でも参加出来ます
• 日本語Wiki:https://github.com/syuu1228/osv-ja-wiki/wiki
![Page 66: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/66.jpg)
![Page 67: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/67.jpg)
アプリの移植
![Page 68: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/68.jpg)
Hello Worldの例hello.cc
#include <iostream>int main() { std::cout << "Hello, world!" << std::endl; }
![Page 69: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/69.jpg)
Hello Worldの例:Makefile
CXXFLAGS = -g -Wall -std=c++11 -fPIC $(INCLUDES)
TARGET = hello
OBJ_FILES = hello.o
all: $(TARGET).so
%.o: %.cc
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(TARGET).so: $(OBJ_FILES)
$(CXX) $(CXXFLAGS) -shared -o $(TARGET).so
![Page 70: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/70.jpg)
Hello Worldの例: Capstanfile
base: cloudius/osv-base
cmdline: /tools/hello.so
build: make
files:
/tools/hello.so: hello.so
![Page 71: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/71.jpg)
Hello World on Javaの移植Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
![Page 72: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/72.jpg)
Hello World on Javaの移植Makefile
module: Hello.class
%.class: %.java
javac $^
clean:
rm -rf *.class
![Page 73: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/73.jpg)
Hello World on Javaの例: Capstanfile
base: cloudius/osv-openjdk
cmdline: /java.so Hello
build: make
files:
/Hello.class: Hello.class
![Page 74: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/74.jpg)
mrubyの移植build_config.rbを以下のように変更
MRuby::Build.new do |conf|
# load specific toolchain settings
toolchain :gcc
# C compiler settings
conf.cc do |cc|
cc.flags << "-O0 -fPIC -Wall"
end
![Page 75: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/75.jpg)
memcachedの移植
• SASLを無効化
• -fpieでビルド
![Page 76: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/76.jpg)
MySQLの移植• rootでの実行を拒否してmysqlユーザに切り替える処理をコメントアウト
• ファイルのパーミッションをチェックしてworld writableな場合実行を拒否する処理をコメントアウト
• -fPIC -sharedでビルド
![Page 77: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/77.jpg)
CRubyの移植
• libc関数を25個追加(うちスタブ1/3)
• obstackライブラリのスタティックリンク
• ./configureによるフラグ設定の調整
• OpenSSLのビルド・スタティックリンク
![Page 78: OSvのご紹介 in iijlab セミナー - IIJ Innovation Institute...OSv: 重複部分の削除 • 重複していた多くの機能を排 除 • ハイパーバイザに従来のOSの](https://reader034.vdocuments.us/reader034/viewer/2022042115/5e928c9d32ea446210654847/html5/thumbnails/78.jpg)
Ruby on Rails on CRubyの移植
• Bundlerが依存パッケージの解決のためRails実行時にgemコマンドを実行するのでOSvでは動かない
• Bundlerによるライブラリロードを全削除
• 手動でパッケージ群をrequire
• 全てのgemをデプロイ用ディレクトリにダウンロードしてきてOSvのファイルシステムへコピー