OSvのご紹介 in Java 8 HotSpot meeting
Takuya ASADA <syuu@cloudius-systems> Cloudius Systems
自己紹介• @syuu1228 on Twitter
• Software Engineer at Cloudius Systems
• FreeBSD developer (bhyve, network stack..)
• カーネル/VM探検隊 初代主催者
• Software Designで「ハイパーバイザの作り方」を連載中
Cloudius Systemsについて• OSvの開発母体(フルタイムデベロッパで開発)
• Office:Herzliya, Israel
• CTO : Avi Kivity → Linux KVMのパパ
• 他の開発者:元RedHat(KVM), Parallels(Virtuozzo, OpenVZ) etc..
• イスラエルの主な人物は元Qumranet(RedHatに買収)
• 半数の開発者がイスラエル以外の国からリモート開発で参加
• 18名・9ヶ国(イスラエル在住は9名)
OSvの概要
OSvとは?• OSvは単一のアプリケーションをハイパーバイザ・IaaSでLinuxOSなしに実行するための新しい仕組み
• より効率よく高い性能で実行
• よりシンプルに管理しやすく
• オープンソース(BSDライセンス)、コミュニティでの開発
• http://osv.io/
• Kivity, Avi, et al. "OSv—Optimizing the Operating System for Virtual Machines." 2014 USENIX Annual Technical Conference (USENIX ATC 14). USENIX Association, 2014.
1つのアプリだけ実行したいユースケース
ハイパーバイザ
ホストOS
ゲストOS
JVM
Javaアプリ
ハイパーバイザ
ホストOS
JVM
Javaアプリ
デカいゲストOSは 余計なオーバヘッドでは?
解決策:ライブラリOS
ハイパーバイザ
ホストOS
JVM
Javaアプリ
OSv
出来るだけ改造しない
ここで環境の違いを吸収
OSv=ライブラリOS• OSを利用するために呼び出すLinux APIをライブラリのような形式で提供(glibcへの限定的な互換性を提供)
• 言語ランタイムはなるべく改造しないで移植可能にする(OpenJDK/Linux x86_64バイナリが動く)
• API提供に必要な機能は実装(ファイルシステム=ZFS、TCP/IP、スレッド&SMP)
• フルサイズのOSとは構造の異なる薄いレイヤ(単一プロセス、単一メモリ空間、全てカーネルモード)
動作環境• ハイパーバイザ
• KVM
• Xen
• VMware
• VirtualBox
• IaaS
• Amazon EC2
• Google Compute Engine
対応アプリ(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
対応アプリ(Java以外)
• Ruby
• WEBRick
• Ruby on Rails
• Publify(Railsベースのブログエンジン)
• mruby
• lua
• Node.js
何が動くの?(ネイティブアプリ)
• haproxy
• memcached
• MySQL
• LevelDB
• SQLite
• twemproxy
フットプリント(ディスクイメージサイズ)
• mruby = 14MB
• Ruby = 48MB
• OpenJDK = 77MB
デモ
OSvのフットプリントと性能
フットプリント(最低メモリ使用量)
• mruby = 65MB
• Ruby = 75MB
• OpenJDK = 110MB
ブート時間
• 1秒(DHCP、ZFS初期化込み)
SPECjbb2005(Java)
• 120% faster than Linux guest
0
10250
20500
30750
41000
score
OSv Fedora
iperf(network)
• 186% faster than Linux guest
0
5.25
10.5
15.75
21
Gbps
OSv Fedora
fsmark
• 142% faster than Linux guest
0
55
110
165
220
files/sec
OSv(ZFS)Linux(ZFS)Linux(ext4)
memcached
• ※ネットワークスタックを迂回する独自版memcachedでの比較
• 280% faster than Linux guest
0
2000
4000
6000
8000
score
OSv Fedora
OSvの周辺機能
OSvをプログラムから操作 「REST API」
• REST API経由でOSvに任意の操作を実行
• 従来のOS:コマンド実行やファイルの編集で設定を変更(手動が基本、シェルスクリプトなどで自動化)OSv:APIで設定を変更(自動化が基本、CLIはオプション)
OSvを対話的に操作「Lua CLI」
• 簡易的なシェル機能を実現
• 全ての機能をREST API上に実装
• デフォルトではOSv上で実行されるが、リモートホストで実行してSSH代わりに使用可能
初期化スクリプトをサーバからダウンロード&実行
「Cloud Init」
• ネットワーク上からYAMLをダウンロードしてきて、ダウンロードしたファイルに記述されているREST APIを順次実行
OSv GUI• WebベースのGUI
• OSの負荷、JVMのリソース情報、アプリのstatisticsなどの統計情報を表示
• Virtual applianceとしてOSvを使うことを前提にCassandra, memcached, Redisなどのアプリの情報を表示する機能を実装中
a
簡易デプロイツール「Capstan」
• 色々なアプリがインストールされたOSvのVMイメージを、コンパイルなどの難しい作業なしに手軽に実行するツール
• Linux, Mac, Windowsで動作
• VirtualBox, VMware, KVMなどに対応
クラウドへのデプロイ
• Amazon EC2
• AMIを配布中
• Google Compute Engine
• capstanからアップロード可能
OSvにおけるJavaの拡張
JMX on REST API
• JMXのMBeanへREST API経由でアクセスが出来る
• Javaアプリケーションの内部情報を取得・変更することが可能
• JMX APIとJolokiaベースの2つの実装が存在
JVMマルチテナント• 1つのVMでは通常1つのmainメソッドを含むプログラムしか実行出来ない
• OSvは単一プロセスなので1つのJavaアプリしか起動出来ない
• マルチテナントをサポートするクラスローダを独自に実装し、複数のmainメソッドを含むプログラム群をロード&実行するような仕組みを実装
• JVM自体のコードは無変更
JVM ballooning• OS起動時にほぼ全てのメモリをJVMヒープに割り当て
• OS側のメモリが足りなくなってきたらOSへコールバックAPIを使って通知Java側でByteArrayを作成し(GC対策)この領域をOS側へ返還
• OSが使わないメモリ領域は引き続きJava側が使用出来る
• JVM自体のコードは無変更
OSv API• ELFバイナリのロード&実行
• リブート
• ARPテーブル、ルーティングテーブルの編集
• IPアドレスの設定、DHCPクライアントの制御
• JVM Balloon API
• カーネルトレースポイント API
Javaアプリの移植
Rhinoの例
• Makefileでzipをwget、unzip
• Capstanfileでjs.jarをOSvのFSへ展開
Makefile
.PHONY: all
all: wget ftp://ftp.mozilla.org/pub/mozilla.org/js/rhino1_7R2.zip unzip -x rhino1_7R2.zip
Capstanfilebase: cloudius/osv-openjdk
cmdline: /java.so -jar /js.jar
build: make
files:
/js.jar: rhino1_7R2/js.jar
ビルド&実行[syuu@devil rhino]$ capstan build Building rhino... Downloading cloudius/osv-openjdk/index.yaml... 149 B / 149 B [======================================================] 100.00 % Downloading cloudius/osv-openjdk/osv-openjdk.qemu.gz... 70.82 MB / 70.82 MB [================================================] 100.00 % [syuu@devil rhino]$ capstan run Created instance: rhino OSv v0.13 eth0: 192.168.122.15 Rhino 1.7 release 2 2009 03 22 js>
コミュニティ活動
コミュニティ活動
• 東京 - 毎月開催
• 大阪 - 予定中、参加者募集
OSC
• 関西と関東のOSCに出展