More Related Content
PDF
PPTX
PDF
PPTX
PPTX
PDF
SpectreとMeltdown:最近のCPUの深い話 PPTX
PDF
What's hot
PDF
WebAssemblyのWeb以外のことぜんぶ話す PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ v1.1 (hbstudy 17) PDF
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料) PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 PDF
PDF
不揮発メモリ(NVDIMM)とLinuxの対応動向について PDF
PDF
本当にわかる Spectre と Meltdown PDF
PPTX
PDF
PDF
Internetトラフィックエンジニアリングの現実 PPTX
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編 PPT
PDF
PPTX
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料) PPTX
PPTX
PPTX
Similar to OSvの概要と実装
PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク PDF
PDF
PDF
PDF
初心者がOpenIndianaで自宅サーバを作ったよって話 PDF
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方 PDF
PDF
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja) PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理 PDF
PDF
IIJlab seminar - Linux Kernel Library: Reusable monolithic kernel (in Japanese) PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? PPTX
KEY
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる! PDF
OSvのご紹介 in OSC2014 Tokyo/Fall PDF
OSvのご紹介 in
Java 8 HotSpot meeting PDF
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? PDF
ODP
PDF
More from Takuya ASADA
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Presentation on your terminal PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」 PDF
Implements BIOS emulation support for BHyVe PDF
PDF
BHyVe: The BSD Hypervisor PDF
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」 PDF
PDF
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜 PDF
PDF
PDF
PDF
PDF
Implements BIOS emulation support for BHyVe: A BSD Hypervisor OSvの概要と実装
- 1.
- 2.
自己紹介
• SoftwareEngineer at Cloudius Systems
• FreeBSD developer (bhyve, network stack..)
• Software Designで「ハイパーバイザの作り
方」を連載中
- 3.
Cloudius Systemsについて
•OSvの開発母体(フルタイムデベロッパで開発)
• Office:Herzliya, Israel
• CTO : Avi Kivity → Linux KVMのパパ
• 他の開発者:元RedHat(KVM), Parallels(Virtuozzo, OpenVZ) etc..
• イスラエルの主な人物は元Qumranet(RedHatに買収)
• 半数の開発者がイスラエル以外の国からリモート開発で参加
• 18名・9ヶ国(イスラエル在住は9名)
- 8.
- 9.
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.
- 10.
- 11.
RQWDLQHUV
コンテナ技術
$SSOLFDWLRQ
5XQWLPH
$SSOLFDWLRQ
5XQWLPH
2SHUDWLQJ6VWHP
+DUGZDUH
Ɣ KLJKVLPSOLFLW
Ɣ KLJKUHVRXUFHHIILFLHQF
Ɣ KLJKSHUIRUPDQFH
• 実行環境をシンプルにする事が可能
• パフォーマンスも高い
- 12.
³/LEUDU26´
ライブラリOS
$SSOLFDWLRQ
5XQWLPH26
$SSOLFDWLRQ
5XQWLPH26
+SHUYLVRU
+DUGZDUH
• コンテナと比較して高い
Ɣ KLJKVLPSOLFLW
Ɣ KLJKUHVRXUFHHIILFLHQF
Ɣ KLJKSHUIRUPDQFH
Ɣ KLJKLVRODWLRQ
- 13.
- 14.
動作環境
• ハイパーバイザ
• KVM
• Xen
• VMware
• VirtualBox
• IaaS
• Amazon EC2
• Google Compute
Engine
- 15.
- 16.
対応アプリ
(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
- 17.
対応アプリ
(Java以外)
•Ruby
• WEBRick
• Ruby on Rails
• Publify(Railsベースのブログエンジン)
• mruby
• lua
• Node.js
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
OSvをプログラムから操作
「REST API」
• REST API経由でOSvに任意の操作を実行
• 従来のOS:コマンド実行やファイルの編集で設
定を変更
(手動が基本、シェルスクリプトなどで自動化)
OSv:APIで設定を変更
(自動化が基本、CLIはオプション)
- 24.
OSvを対話的に操作
「Lua CLI」
• 簡易的なシェル機能を実現
• 全ての機能をREST API上に実装
• デフォルトではOSv上で実行されるが、リモー
トホストで実行してSSH代わりに使用可能
- 25.
- 26.
OSv GUI
•WebベースのGUI
• OSの負荷、JVMのリソース情報、アプリの
statisticsなどの統計情報を表示
• Virtual applianceとしてOSvを使うことを前
提にCassandra, memcached, Redisなどの
アプリの情報を表示する機能を実装中
- 28.
簡易デプロイツール
「Capstan」
•色々なアプリがインストールされたOSvのVMイ
メージを、コンパイルなどの難しい作業なしに手
軽に実行するツール
• Linux, Mac, Windowsで動作
• VirtualBox, VMware, KVMなどに対応
- 29.
- 30.
- 31.
OSvの設計(1)
• OSvは複数のメモリ空間を持たない
メモリ空間は全プロセス&カーネルで共通
• OSvはカーネルとユーザプロセス間で権限のモード切替を行わない
従って,カーネルの機能はlibc経由の関数コールで実現
• メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任
せる
ネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域
を破壊するのはユーザ責任
• イメージとしては言語ランタイムをベアメタル環境に移植して
いる状態に近い
- 32.
- 33.
OSvの構成要素
• C++11でスクラッチから書かれたカーネルの主な部分
• メモリマネージャ、スケジューラ、ELFローダ、ドライバ、VFS、
ramfs、ACPI、システムコール、libc関数(一部)
• FreeBSDからの移植
• ZFS、TCP/IPスタック(v4のみ)
• musl-libc
• アプリケーション
• lua VM CLI、REST server、OpenJDK、Ruby…
- 34.
OSvの構造
Java apps
OpenJDK
OSv kernel
ZFS
TCP/
IP
FBSD code
CLI
COM
port
virtio-blk
virtio-net
sched
uler
libc
ACPI clock
ramfs
VFS
MM
ELF
loader
syscall
emu
libjvm.so
java.so
オリジナル実装(C++11)
ポーティング
バイナリ
LuaVM 非ネイティブコード
REST
server
- 35.
デバイスドライバ
• 仮想マシン専用なので準仮想化デバイス+最低限のデバイスをサポート
• 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)
- 36.
- 37.
- 38.
アプリ実行イメージ
_lib =elf::get_program()-get_library(_command);
_main = _lib-lookupint (int, char**)(“main);
_main();
- 39.
複数アプリケーションの
実行
•プロセスは1つだが、スレッドを新し
く作ってapp.soをロード&実行する事
で複数アプリを実行する事は可能
• 但し、空間が共有されるため同じプロ
グラムを2インスタンス起動する事が
出来ない
- 40.
- 41.
- 42.
Unix user
•シングルプロセスOSなので、シングルユーザ前
提になっている
• ユーザ周りのlibc APIはstubになっている
• 権限を下げて動こうとする一部アプリで動作エ
ラーを起こすことがあり、パッチが必要
- 43.
ディスクイメージ
• cmdlineにブートパラメータ
が直接書き込まれている
• loader.elfはELFバイナリ
bootfsにramfsを含む
• 殆どのファイルはZFSに置
かれる
MBR (boot16.S) 01
cmdline
64
128
blank?
loader.elf
262144
bootfs (bootfs.manifest)
nsectors
ZFS (usr.manifest)
- 44.
- 45.
- 46.
- 47.
/dev
• 互換性のためだけに一部提供
• アプリケーションから使用されるもの
• console, null, random, urandom
• ファイルシステムとブロックデバイス
• ram0, vblk0, vblk0.1, zfs
- 48.
- 49.
- 50.
net channel(1)
•Linuxで提案されていたネットワークスタックの改善案
• Socket APIはプロセスのCPUで動き、パケット受
信処理はソフト割り込みがスケジュールされたCPU
で動くため、ロック競合とキャッシュ競合が起きる
• ドライバでパケットヘッダをチェックする最低限の
コードを走らせて、宛先ソケットを特定
即ソケットキューにパケットをキューイング
プロセスがソケットを見に来るまで待つ
- 51.
net channel(2)
•OSvではこれを実装(TCPのみ)
• TCPコネクション確立時にpacket classifierにルールを登録
• ドライバでpacket classifierを呼び出し
マッチしたらnet_channelがこれを受け取り
マッチしないなら通常パスへ
• マッチしたパケットはnet_channelのキューに登録してソケットで
ブロックしているプロセスを起床させる
• プロセスコンテキストでnet_channelにキューされたパケットが
ネットワークスタックで処理されプロセスに渡される
- 52.
net channel benchresults
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
- 53.
zerocopy TX/RX
•Socket APIを通してネットワークIOを行うと必
ずコピーが発生してしまう
• 独自APIを追加することでゼロコピーを実現
• OSvはプロセスとメモリ空間が共有されている
のでゼロコピーの実現が一般的なOSほど難しく
ない
- 54.
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);
- 55.
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 %)
- 56.
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%
- 57.
net channel fromapp
• ※テスト実装無し
• net channel APIをユーザプログラムから直接呼
び出し
• ほぼnetmap/DPDKなどと同じことが実現可能
• これに限らず、OSvの独自APIを呼び出す前提な
らばより高速化が可能
- 58.
virtio-app
• ※テスト実装無し
• ドライバをバイパスして直接virtio-netにアクセ
スすることも可能
• 実装コストはnet_channelやPF filterより更に上
がるが、限界まで性能をだすことが出来ると考
えられる
- 59.
- 60.
メモリ管理
• 汎用OSと同様の仮想メモリシステムを実装
• mmapによるアプリケーションからのメモリ要
求をサポート(CassandraなどのアプリはJVM
をバイパスしてJNIでmmapを行っている)
• 大きなマッピング要求ではhuge pageを使用
• スワップやpage evictionはサポートされない
- 61.
- 62.
- 63.
- 64.
JVM ballooning
•OS起動時にほぼ全てのメモリをJVMヒープに割り当て
• OS側のメモリが足りなくなってきたらShrinkerを使っ
て通知、Java側でByteArrayを作成し(GC対策)、
この領域をOS側へ返還
• OSが使わないメモリ領域は引き続きJava側が使用出
来る
• JVM自体のコードは無変更
- 65.
- 66.
- 67.
- 68.
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
- 69.
- 70.
Hello World onJavaの移植
Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println(Hello, World!);
}
}
- 71.
Hello World onJavaの移植
Makefile
module: Hello.class
%.class: %.java
javac $^
clean:
rm -rf *.class
- 72.
Hello World onJavaの例:
Capstanfile
base: cloudius/osv-openjdk
cmdline: /java.so Hello
build: make
files:
/Hello.class: Hello.class
- 73.
- 74.
- 75.
- 76.
- 77.
Ruby on Railson CRubyの
移植
• Bundlerが依存パッケージの解決のためRails実行
時にgemコマンドを実行するのでOSvでは動かな
い
• Bundlerによるライブラリロードを全削除
• 手動でパッケージ群をrequire
• 全てのgemをデプロイ用ディレクトリにダウンロー
ドしてきてOSvのファイルシステムへコピー
- 78.
- 79.
OSvもくもく会 @ 東京
• ほぼ月一開催
• 皆でOSvで色々なアプリを動かそうとしてみる
• バグが出たら僕がその場で直す
• 次回は11月9日
- 83.