OSvのご紹介 in Java 8 HotSpot meeting

Preview:

DESCRIPTION

OSvのご紹介 in 
Java 8 HotSpot meeting

Citation preview

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に出展

日本語情報

• osv-ja-wiki

• github.com/syuu1228/osv-ja-wiki