SlideShare una empresa de Scribd logo
1 de 85
Descargar para leer sin conexión
OSvの概要と実装 
Takuya ASADA <syuu@cloudius-systems> 
Cloudius Systems
自己紹介 
• Software Engineer at Cloudius Systems 
• FreeBSD developer (bhyve, network stack..) 
• Software Designで「ハイパーバイザの作り 
方」を連載中
Cloudius Systemsについて 
• OSvの開発母体(フルタイムデベロッパで開発) 
• Office:Herzliya, Israel 
• CTO : Avi Kivity → Linux KVMのパパ 
• 他の開発者:元RedHat(KVM), Parallels(Virtuozzo, OpenVZ) etc.. 
• イスラエルの主な人物は元Qumranet(RedHatに買収) 
• 半数の開発者がイスラエル以外の国からリモート開発で参加 
• 18名・9ヶ国(イスラエル在住は9名)
1, 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.
7SLFDOORXG6WDFN 
標準的なIaaSスタック 
$SSOLFDWLRQ 
5XQWLPH 
2SHUDWLQJ6VWHP 
+SHUYLVRU 
+DUGZDUH 
3URWHFWLRQ 
DQG 
DEVWUDFWLRQ 
• 単一のアプリケーションを実行するワークロードでは 
フルサイズのゲストOS+フル仮想化はオーバヘッド
RQWDLQHUV 
コンテナ技術 
$SSOLFDWLRQ 
5XQWLPH 
$SSOLFDWLRQ 
5XQWLPH 
2SHUDWLQJ6VWHP 
+DUGZDUH 
Ɣ KLJKVLPSOLFLW 
Ɣ KLJKUHVRXUFHHIILFLHQF 
Ɣ KLJKSHUIRUPDQFH 
• 実行環境をシンプルにする事が可能 
• パフォーマンスも高い
³/LEUDU26´ 
ライブラリOS 
$SSOLFDWLRQ 
5XQWLPH26 
$SSOLFDWLRQ 
5XQWLPH26 
+SHUYLVRU 
+DUGZDUH 
• コンテナと比較して高い 
Ɣ KLJKVLPSOLFLW 
Ɣ KLJKUHVRXUFHHIILFLHQF 
Ɣ KLJKSHUIRUPDQFH 
Ɣ KLJKLVRODWLRQ
OSv=ライブラリOS 
• OSを利用するために呼び出すLinux APIをライ 
ブラリのような形式で提供 
• 言語ランタイムはなるべく改造しないで移植可 
能にする 
• API提供に必要な機能は実装 
• フルサイズのOSとは構造の異なる薄いレイヤ
動作環境 
• ハイパーバイザ 
• KVM 
• Xen 
• VMware 
• VirtualBox 
• IaaS 
• Amazon EC2 
• Google Compute 
Engine
対応アーキテクチャ 
• x86_64(32bit非サポート) 
• aarch64
対応アプリ 
(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
フットプリント 
(最低メモリ使用量) 
• mruby = 65MB 
• Ruby = 75MB 
• OpenJDK = 110MB
ブート時間 
• 1秒(DHCP、ZFS初期化込み)
OSvの基本的な機能 
• Linuxアプリとの限定的な互換性 
• ファイルシステム(ZFS) 
• TCP/IP(IPv4のみ)
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などの 
アプリの情報を表示する機能を実装中
簡易デプロイツール 
「Capstan」 
• 色々なアプリがインストールされたOSvのVMイ 
メージを、コンパイルなどの難しい作業なしに手 
軽に実行するツール 
• Linux, Mac, Windowsで動作 
• VirtualBox, VMware, KVMなどに対応
クラウドへのデプロイ 
• Amazon EC2 
• AMIを配布中 
• Google Compute Engine 
• capstanからアップロード可能
2, OSvの実装
OSvの設計(1) 
• OSvは複数のメモリ空間を持たない 
メモリ空間は全プロセス&カーネルで共通 
• OSvはカーネルとユーザプロセス間で権限のモード切替を行わない 
従って,カーネルの機能はlibc経由の関数コールで実現 
• メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任 
せる 
ネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域 
を破壊するのはユーザ責任 
• イメージとしては言語ランタイムをベアメタル環境に移植して 
いる状態に近い
OSvの設計(2) 
• これにより、TLBミスやモード切替のコスト 
を削減しパフォーマンスを上げることが出来 
る 
• (JVMによる制限が無ければ)ユーザプロセ 
スからデバイスが丸見え 
• むしろ「アプリからvirtioを直接扱うことに 
よって従来より性能を上げられる」と主張
OSvの構成要素 
• C++11でスクラッチから書かれたカーネルの主な部分 
• メモリマネージャ、スケジューラ、ELFローダ、ドライバ、VFS、 
ramfs、ACPI、システムコール、libc関数(一部) 
• FreeBSDからの移植 
• ZFS、TCP/IPスタック(v4のみ) 
• musl-libc 
• アプリケーション 
• lua VM  CLI、REST server、OpenJDK、Ruby…
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
デバイスドライバ 
• 仮想マシン専用なので準仮想化デバイス+最低限のデバイスをサポート 
• 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)
Linuxとの互換性 
• Fedora向けのOpenJDKバイナリが動作するレベ 
ル 
• glibcの全関数が提供されている訳ではない 
• musl-libcから必要に応じてAPIが移植されてきて 
いる 
• 今まで必要無かったAPI、musl-libcに存在しない 
APIが欠けている事がある
アプリケーション 
• OSvが提供するlibcの範囲で動き、-fPIC(-shared)でビルドされて 
いる必要がある(最近PIE Executablesをサポート) 
• アプリの実行=現在のメモリ空間へのapp.soのロードとmain関数 
の実行 
• fork() / exec()はサポートされない 
→内部でコマンド実行するプログラムとの互換性がない 
• マルチスレッドはサポートされる
アプリ実行イメージ 
_lib = elf::get_program()-get_library(_command); 
_main = _lib-lookupint (int, char**)(“main); 
_main();
複数アプリケーションの 
実行 
• プロセスは1つだが、スレッドを新し 
く作ってapp.soをロード&実行する事 
で複数アプリを実行する事は可能 
• 但し、空間が共有されるため同じプロ 
グラムを2インスタンス起動する事が 
出来ない
JVMマルチテナント 
• 1つのVMでは通常1つのmainメソッドを含むプログラム 
しか実行出来ない 
• OSvは単一プロセスなので1つのJavaアプリしか起動出 
来ない 
• クラスローダ周りでトリックを行って、複数のmainメ 
ソッドを含むプログラム群をロード&実行するような仕 
組みを実装 
• JVM自体のコードは無変更
libc 
• ユーザ空間/カーネル空間の区別は存在しない 
• libcはカーネルにstatic linkされている 
• libcがシステムコールの役割を果たす 
• システムコールはごく一部の例外を除いて実装さ 
れていない(バイナリ互換のため一部必要)
Unix user 
• シングルプロセスOSなので、シングルユーザ前 
提になっている 
• ユーザ周りのlibc APIはstubになっている 
• 権限を下げて動こうとする一部アプリで動作エ 
ラーを起こすことがあり、パッチが必要
ディスクイメージ 
• 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)
cmdline 
• カーネルへの引数と起動するユーザプログラム 
を指定 
• 例: 
--ip=eth0,10.0.0.2,255.255.255.0  
—defaultgw=10.0.0.1  
—nameserver=10.0.0.1  
/memcached -u root/cli/cli.so
ramfs 
• カーネルイメージに埋め込まれているファイルシ 
ステム 
• ディスクに書き戻されないが書き込み可能 
• 現在はlibzfs.soなどZFS関係のバイナリのみが置 
かれている(ZFSはカーネルにスタティックリン 
クされていない) 
• Linuxのinitramfs相当
ZFS 
• OSvのルートファイルシステムとして用いられて 
いる 
• アプリケーションなどは全てこちらに配置され 
る
/dev 
• 互換性のためだけに一部提供 
• アプリケーションから使用されるもの 
• console, null, random, urandom 
• ファイルシステムとブロックデバイス 
• ram0, vblk0, vblk0.1, zfs
/proc 
• 互換性のためだけに一部提供 
• 0/maps, 0/stat 
• mounts 
• self/ - 0/
2.1, ネットワークの 
高速化
net channel(1) 
• Linuxで提案されていたネットワークスタックの改善案 
• Socket APIはプロセスのCPUで動き、パケット受 
信処理はソフト割り込みがスケジュールされたCPU 
で動くため、ロック競合とキャッシュ競合が起きる 
• ドライバでパケットヘッダをチェックする最低限の 
コードを走らせて、宛先ソケットを特定 
即ソケットキューにパケットをキューイング 
プロセスがソケットを見に来るまで待つ
net channel(2) 
• OSvではこれを実装(TCPのみ) 
• TCPコネクション確立時にpacket classifierにルールを登録 
• ドライバでpacket classifierを呼び出し 
マッチしたらnet_channelがこれを受け取り 
マッチしないなら通常パスへ 
• マッチしたパケットはnet_channelのキューに登録してソケットで 
ブロックしているプロセスを起床させる 
• プロセスコンテキストでnet_channelにキューされたパケットが 
ネットワークスタックで処理されプロセスに渡される
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
zerocopy TX/RX 
• Socket APIを通してネットワークIOを行うと必 
ずコピーが発生してしまう 
• 独自APIを追加することでゼロコピーを実現 
• OSvはプロセスとメモリ空間が共有されている 
のでゼロコピーの実現が一般的なOSほど難しく 
ない
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);
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 %)
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%
net channel from app 
• ※テスト実装無し 
• net channel APIをユーザプログラムから直接呼 
び出し 
• ほぼnetmap/DPDKなどと同じことが実現可能 
• これに限らず、OSvの独自APIを呼び出す前提な 
らばより高速化が可能
virtio-app 
• ※テスト実装無し 
• ドライバをバイパスして直接virtio-netにアクセ 
スすることも可能 
• 実装コストはnet_channelやPF filterより更に上 
がるが、限界まで性能をだすことが出来ると考 
えられる
2.2 メモリ管理
メモリ管理 
• 汎用OSと同様の仮想メモリシステムを実装 
• mmapによるアプリケーションからのメモリ要 
求をサポート(CassandraなどのアプリはJVM 
をバイパスしてJNIでmmapを行っている) 
• 大きなマッピング要求ではhuge pageを使用 
• スワップやpage evictionはサポートされない
malloc() 
• malloc()はカーネルとユーザアプリで共通のメ 
モリプールからメモリが割り当てられる 
• リクエストサイズ別に複数のプールを持つ(slab 
allocatorと同じ) 
• プールごとに最低1ページアロケート、足りな 
くなったらページを足す
mmap() 
• mmap()でanonymous mapping要求を受けた 
らリクエストサイズ分のページを割り付け 
• file mappingの場合はZFSへmmap要求 
FreeBSD版ZFSのコードがbuffer cacheを管理
Shrinker 
• OSの残りメモリ量が少なくなった時に、アプリケーショ 
ン側から登録したコールバックを実行、アプリケーショ 
ンからメモリを解放 
• 足りなくなったらOSへ返す事によりメモリ不足を回避 
• JVMやbuffer cacheで使用 
• 他のアプリからも使用可 
(OSv版memcachedなどで実装されている)
JVM ballooning 
• OS起動時にほぼ全てのメモリをJVMヒープに割り当て 
• OS側のメモリが足りなくなってきたらShrinkerを使っ 
て通知、Java側でByteArrayを作成し(GC対策)、 
この領域をOS側へ返還 
• OSが使わないメモリ領域は引き続きJava側が使用出 
来る 
• JVM自体のコードは無変更
buffer cache shrinking 
• JVMと同じくShrinkerの通知を受けてbuffer 
cacheをリリース、メモリをOSに返還
3, アプリの移植
Hello Worldの例 
hello.cc 
#include iostream 
int main() 
{ 
std::cout  Hello, world!  std::endl; 
}
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
Hello Worldの例: 
Capstanfile 
base: cloudius/osv-base 
cmdline: /tools/hello.so 
build: make 
files: 
/tools/hello.so: hello.so
Hello World on Javaの移植 
Hello.java 
public class Hello { 
public static void main(String[] args) { 
System.out.println(Hello, World!); 
} 
}
Hello World on Javaの移植 
Makefile 
module: Hello.class 
%.class: %.java 
javac $^ 
clean: 
rm -rf *.class
Hello World on Javaの例: 
Capstanfile 
base: cloudius/osv-openjdk 
cmdline: /java.so Hello 
build: make 
files: 
/Hello.class: Hello.class
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
memcachedの移植 
• SASLを無効化 
• -fpieでビルド
MySQLの移植 
• rootでの実行を拒否してmysqlユーザに切り替 
える処理をコメントアウト 
• ファイルのパーミッションをチェックしてworld 
writableな場合実行を拒否する処理をコメントア 
ウト 
• -fPIC -sharedでビルド
CRubyの移植 
• libc関数を25個追加(うちスタブ1/3) 
• obstackライブラリのスタティックリンク 
• ./configureによるフラグ設定の調整 
• OpenSSLのビルド・スタティックリンク
Ruby on Rails on CRubyの 
移植 
• Bundlerが依存パッケージの解決のためRails実行 
時にgemコマンドを実行するのでOSvでは動かな 
い 
• Bundlerによるライブラリロードを全削除 
• 手動でパッケージ群をrequire 
• 全てのgemをデプロイ用ディレクトリにダウンロー 
ドしてきてOSvのファイルシステムへコピー
4, 国内コミュニティ活 
動
OSvもくもく会 @ 東京 
• ほぼ月一開催 
• 皆でOSvで色々なアプリを動かそうとしてみる 
• バグが出たら僕がその場で直す 
• 次回は11月9日
OSC 
• 関西と関東のOSCに出展 
• 次回は10/19日(日)
OSvの概要と実装
OSvの概要と実装

Más contenido relacionado

La actualidad más candente

基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroiddemuyan
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門Shuji Yamada
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみogatay
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜UnityTechnologiesJapan002
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動uchan_nos
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングTomoya Hibi
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプラインTetsurou Yano
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of LinuxTetsuyuki Kobayashi
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門VirtualTech Japan Inc.
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいwata2ki
 

La actualidad más candente (20)

Docker Tokyo
Docker TokyoDocker Tokyo
Docker Tokyo
 
基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid基礎から学ぶ組み込みAndroid
基礎から学ぶ組み込みAndroid
 
20分でわかるgVisor入門
20分でわかるgVisor入門20分でわかるgVisor入門
20分でわかるgVisor入門
 
TCAMのしくみ
TCAMのしくみTCAMのしくみ
TCAMのしくみ
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
DPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキングDPDKによる高速コンテナネットワーキング
DPDKによる高速コンテナネットワーキング
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプライン
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
Basic of virtual memory of Linux
Basic of virtual memory of LinuxBasic of virtual memory of Linux
Basic of virtual memory of Linux
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
ARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくいARM LinuxのMMUはわかりにくい
ARM LinuxのMMUはわかりにくい
 

Similar a OSvの概要と実装

OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallTakuya ASADA
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingTakuya ASADA
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークTakuya ASADA
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Takuya ASADA
 
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティSaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティKuniyasu Suzaki
 
How to use Ceph RBD as CloudStack Primary Storage
How to use Ceph RBD as CloudStack Primary StorageHow to use Ceph RBD as CloudStack Primary Storage
How to use Ceph RBD as CloudStack Primary StorageKimihiko Kitase
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutesYohei Sasaki
 
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceCloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceShunsuke Kurumatani
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例maebashi
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめSunao Tomita
 
Wakame Project - 自作クラウド研究会
Wakame Project - 自作クラウド研究会Wakame Project - 自作クラウド研究会
Wakame Project - 自作クラウド研究会axsh co., LTD.
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみたKazuto Kusama
 
openstack+cephインテグレーション
openstack+cephインテグレーションopenstack+cephインテグレーション
openstack+cephインテグレーションOSSラボ株式会社
 
Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124Kazuhisa Hara
 

Similar a OSvの概要と実装 (20)

OSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/FallOSvのご紹介 in OSC2014 Tokyo/Fall
OSvのご紹介 in OSC2014 Tokyo/Fall
 
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meetingOSvのご紹介 in 
Java 8 HotSpot meeting
OSvのご紹介 in 
Java 8 HotSpot meeting
 
OSv噺
OSv噺OSv噺
OSv噺
 
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワークSeastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
 
Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」Seastar in 歌舞伎座.tech#8「C++初心者会」
Seastar in 歌舞伎座.tech#8「C++初心者会」
 
Osc2009 Do Xen Hara
Osc2009 Do Xen HaraOsc2009 Do Xen Hara
Osc2009 Do Xen Hara
 
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティSaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
SaaS/クラウドコンピューティングでのオープンソース活用とセキュリティ
 
How to use Ceph RBD as CloudStack Primary Storage
How to use Ceph RBD as CloudStack Primary StorageHow to use Ceph RBD as CloudStack Primary Storage
How to use Ceph RBD as CloudStack Primary Storage
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutes
 
Cloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a ServiceCloud Foundry: Open Platform as a Service
Cloud Foundry: Open Platform as a Service
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
Windows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめWindows Azure で 2/29 に起こった問題のまとめ
Windows Azure で 2/29 に起こった問題のまとめ
 
Wakame Project - 自作クラウド研究会
Wakame Project - 自作クラウド研究会Wakame Project - 自作クラウド研究会
Wakame Project - 自作クラウド研究会
 
クラウド入門
クラウド入門クラウド入門
クラウド入門
 
Kubernetesを触ってみた
Kubernetesを触ってみたKubernetesを触ってみた
Kubernetesを触ってみた
 
serverless
serverlessserverless
serverless
 
openstack+cephインテグレーション
openstack+cephインテグレーションopenstack+cephインテグレーション
openstack+cephインテグレーション
 
Twemproxy (nutcracker)
Twemproxy (nutcracker)Twemproxy (nutcracker)
Twemproxy (nutcracker)
 
Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124Osc2009 Sendai Xen 0124
Osc2009 Sendai Xen 0124
 

Más de Takuya ASADA

高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」Takuya ASADA
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜Takuya ASADA
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダTakuya ASADA
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3Takuya ASADA
 
Linux network stack
Linux network stackLinux network stack
Linux network stackTakuya ASADA
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminalTakuya ASADA
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレットTakuya ASADA
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜Takuya ASADA
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2Takuya ASADA
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1Takuya ASADA
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorTakuya ASADA
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性Takuya ASADA
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法Takuya ASADA
 
Implements BIOS emulation support for BHyVe
Implements BIOS emulation support for BHyVeImplements BIOS emulation support for BHyVe
Implements BIOS emulation support for BHyVeTakuya ASADA
 
BHyVe: The BSD Hypervisor
BHyVe: The BSD HypervisorBHyVe: The BSD Hypervisor
BHyVe: The BSD HypervisorTakuya ASADA
 

Más de Takuya ASADA (20)

高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
 
ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜ヤマノススメ〜秋山郷 de ハッカソン〜
ヤマノススメ〜秋山郷 de ハッカソン〜
 
UEFI時代のブートローダ
UEFI時代のブートローダUEFI時代のブートローダ
UEFI時代のブートローダ
 
OSvパンフレット v3
OSvパンフレット v3OSvパンフレット v3
OSvパンフレット v3
 
Linux network stack
Linux network stackLinux network stack
Linux network stack
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Presentation on your terminal
Presentation on your terminalPresentation on your terminal
Presentation on your terminal
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
OSvパンフレット
OSvパンフレットOSvパンフレット
OSvパンフレット
 
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
 
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#2
 
「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1「ハイパーバイザの作り方」読書会#1
「ハイパーバイザの作り方」読書会#1
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD HypervisorImplements BIOS emulation support for BHyVe: A BSD Hypervisor
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性
 
マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法マルチコアとネットワークスタックの高速化技法
マルチコアとネットワークスタックの高速化技法
 
MMIO on VT-x
MMIO on VT-xMMIO on VT-x
MMIO on VT-x
 
Implements BIOS emulation support for BHyVe
Implements BIOS emulation support for BHyVeImplements BIOS emulation support for BHyVe
Implements BIOS emulation support for BHyVe
 
Play with UEFI
Play with UEFIPlay with UEFI
Play with UEFI
 
BHyVe: The BSD Hypervisor
BHyVe: The BSD HypervisorBHyVe: The BSD Hypervisor
BHyVe: The BSD Hypervisor
 

Último

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Último (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

OSvの概要と実装

  • 1. OSvの概要と実装 Takuya ASADA <syuu@cloudius-systems> Cloudius Systems
  • 2. 自己紹介 • Software Engineer 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名)
  • 4.
  • 5.
  • 6.
  • 7.
  • 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. 7SLFDOORXG6WDFN 標準的なIaaSスタック $SSOLFDWLRQ 5XQWLPH 2SHUDWLQJ6VWHP +SHUYLVRU +DUGZDUH 3URWHFWLRQ DQG DEVWUDFWLRQ • 単一のアプリケーションを実行するワークロードでは フルサイズのゲストOS+フル仮想化はオーバヘッド
  • 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. OSv=ライブラリOS • OSを利用するために呼び出すLinux APIをライ ブラリのような形式で提供 • 言語ランタイムはなるべく改造しないで移植可 能にする • API提供に必要な機能は実装 • フルサイズのOSとは構造の異なる薄いレイヤ
  • 14. 動作環境 • ハイパーバイザ • KVM • Xen • VMware • VirtualBox • IaaS • Amazon EC2 • Google Compute Engine
  • 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. 何が動くの? (ネイティブアプリ) • haproxy • memcached • MySQL • LevelDB • SQLite • twemproxy
  • 19. フットプリント (ディスクイメージサイズ) • mruby = 14MB • Ruby = 48MB • OpenJDK = 77MB
  • 20. フットプリント (最低メモリ使用量) • mruby = 65MB • Ruby = 75MB • OpenJDK = 110MB
  • 22. OSvの基本的な機能 • Linuxアプリとの限定的な互換性 • ファイルシステム(ZFS) • TCP/IP(IPv4のみ)
  • 23. OSvをプログラムから操作 「REST API」 • REST API経由でOSvに任意の操作を実行 • 従来のOS:コマンド実行やファイルの編集で設 定を変更 (手動が基本、シェルスクリプトなどで自動化) OSv:APIで設定を変更 (自動化が基本、CLIはオプション)
  • 24. OSvを対話的に操作 「Lua CLI」 • 簡易的なシェル機能を実現 • 全ての機能をREST API上に実装 • デフォルトではOSv上で実行されるが、リモー トホストで実行してSSH代わりに使用可能
  • 25. 初期化スクリプトを サーバからダウンロード&実行 「Cloud Init」 • ネットワーク上からYAMLをダウンロードしてき て、ダウンロードしたファイルに記述されてい るREST APIを順次実行
  • 26. OSv GUI • WebベースのGUI • OSの負荷、JVMのリソース情報、アプリの statisticsなどの統計情報を表示 • Virtual applianceとしてOSvを使うことを前 提にCassandra, memcached, Redisなどの アプリの情報を表示する機能を実装中
  • 27.
  • 28. 簡易デプロイツール 「Capstan」 • 色々なアプリがインストールされたOSvのVMイ メージを、コンパイルなどの難しい作業なしに手 軽に実行するツール • Linux, Mac, Windowsで動作 • VirtualBox, VMware, KVMなどに対応
  • 29. クラウドへのデプロイ • Amazon EC2 • AMIを配布中 • Google Compute Engine • capstanからアップロード可能
  • 31. OSvの設計(1) • OSvは複数のメモリ空間を持たない メモリ空間は全プロセス&カーネルで共通 • OSvはカーネルとユーザプロセス間で権限のモード切替を行わない 従って,カーネルの機能はlibc経由の関数コールで実現 • メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任 せる ネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域 を破壊するのはユーザ責任 • イメージとしては言語ランタイムをベアメタル環境に移植して いる状態に近い
  • 32. OSvの設計(2) • これにより、TLBミスやモード切替のコスト を削減しパフォーマンスを上げることが出来 る • (JVMによる制限が無ければ)ユーザプロセ スからデバイスが丸見え • むしろ「アプリからvirtioを直接扱うことに よって従来より性能を上げられる」と主張
  • 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. Linuxとの互換性 • Fedora向けのOpenJDKバイナリが動作するレベ ル • glibcの全関数が提供されている訳ではない • musl-libcから必要に応じてAPIが移植されてきて いる • 今まで必要無かったAPI、musl-libcに存在しない APIが欠けている事がある
  • 37. アプリケーション • OSvが提供するlibcの範囲で動き、-fPIC(-shared)でビルドされて いる必要がある(最近PIE Executablesをサポート) • アプリの実行=現在のメモリ空間へのapp.soのロードとmain関数 の実行 • fork() / exec()はサポートされない →内部でコマンド実行するプログラムとの互換性がない • マルチスレッドはサポートされる
  • 38. アプリ実行イメージ _lib = elf::get_program()-get_library(_command); _main = _lib-lookupint (int, char**)(“main); _main();
  • 39. 複数アプリケーションの 実行 • プロセスは1つだが、スレッドを新し く作ってapp.soをロード&実行する事 で複数アプリを実行する事は可能 • 但し、空間が共有されるため同じプロ グラムを2インスタンス起動する事が 出来ない
  • 40. JVMマルチテナント • 1つのVMでは通常1つのmainメソッドを含むプログラム しか実行出来ない • OSvは単一プロセスなので1つのJavaアプリしか起動出 来ない • クラスローダ周りでトリックを行って、複数のmainメ ソッドを含むプログラム群をロード&実行するような仕 組みを実装 • JVM自体のコードは無変更
  • 41. libc • ユーザ空間/カーネル空間の区別は存在しない • libcはカーネルにstatic linkされている • libcがシステムコールの役割を果たす • システムコールはごく一部の例外を除いて実装さ れていない(バイナリ互換のため一部必要)
  • 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. cmdline • カーネルへの引数と起動するユーザプログラム を指定 • 例: --ip=eth0,10.0.0.2,255.255.255.0 —defaultgw=10.0.0.1 —nameserver=10.0.0.1 /memcached -u root/cli/cli.so
  • 45. ramfs • カーネルイメージに埋め込まれているファイルシ ステム • ディスクに書き戻されないが書き込み可能 • 現在はlibzfs.soなどZFS関係のバイナリのみが置 かれている(ZFSはカーネルにスタティックリン クされていない) • Linuxのinitramfs相当
  • 46. ZFS • OSvのルートファイルシステムとして用いられて いる • アプリケーションなどは全てこちらに配置され る
  • 47. /dev • 互換性のためだけに一部提供 • アプリケーションから使用されるもの • console, null, random, urandom • ファイルシステムとブロックデバイス • ram0, vblk0, vblk0.1, zfs
  • 48. /proc • 互換性のためだけに一部提供 • 0/maps, 0/stat • mounts • self/ - 0/
  • 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 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
  • 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 from app • ※テスト実装無し • net channel APIをユーザプログラムから直接呼 び出し • ほぼnetmap/DPDKなどと同じことが実現可能 • これに限らず、OSvの独自APIを呼び出す前提な らばより高速化が可能
  • 58. virtio-app • ※テスト実装無し • ドライバをバイパスして直接virtio-netにアクセ スすることも可能 • 実装コストはnet_channelやPF filterより更に上 がるが、限界まで性能をだすことが出来ると考 えられる
  • 60. メモリ管理 • 汎用OSと同様の仮想メモリシステムを実装 • mmapによるアプリケーションからのメモリ要 求をサポート(CassandraなどのアプリはJVM をバイパスしてJNIでmmapを行っている) • 大きなマッピング要求ではhuge pageを使用 • スワップやpage evictionはサポートされない
  • 61. malloc() • malloc()はカーネルとユーザアプリで共通のメ モリプールからメモリが割り当てられる • リクエストサイズ別に複数のプールを持つ(slab allocatorと同じ) • プールごとに最低1ページアロケート、足りな くなったらページを足す
  • 62. mmap() • mmap()でanonymous mapping要求を受けた らリクエストサイズ分のページを割り付け • file mappingの場合はZFSへmmap要求 FreeBSD版ZFSのコードがbuffer cacheを管理
  • 63. Shrinker • OSの残りメモリ量が少なくなった時に、アプリケーショ ン側から登録したコールバックを実行、アプリケーショ ンからメモリを解放 • 足りなくなったらOSへ返す事によりメモリ不足を回避 • JVMやbuffer cacheで使用 • 他のアプリからも使用可 (OSv版memcachedなどで実装されている)
  • 64. JVM ballooning • OS起動時にほぼ全てのメモリをJVMヒープに割り当て • OS側のメモリが足りなくなってきたらShrinkerを使っ て通知、Java側でByteArrayを作成し(GC対策)、 この領域をOS側へ返還 • OSが使わないメモリ領域は引き続きJava側が使用出 来る • JVM自体のコードは無変更
  • 65. buffer cache shrinking • JVMと同じくShrinkerの通知を受けてbuffer cacheをリリース、メモリをOSに返還
  • 67. Hello Worldの例 hello.cc #include iostream int main() { std::cout Hello, world! std::endl; }
  • 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. Hello Worldの例: Capstanfile base: cloudius/osv-base cmdline: /tools/hello.so build: make files: /tools/hello.so: hello.so
  • 70. Hello World on Javaの移植 Hello.java public class Hello { public static void main(String[] args) { System.out.println(Hello, World!); } }
  • 71. Hello World on Javaの移植 Makefile module: Hello.class %.class: %.java javac $^ clean: rm -rf *.class
  • 72. Hello World on Javaの例: Capstanfile base: cloudius/osv-openjdk cmdline: /java.so Hello build: make files: /Hello.class: Hello.class
  • 73. 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
  • 75. MySQLの移植 • rootでの実行を拒否してmysqlユーザに切り替 える処理をコメントアウト • ファイルのパーミッションをチェックしてworld writableな場合実行を拒否する処理をコメントア ウト • -fPIC -sharedでビルド
  • 76. CRubyの移植 • libc関数を25個追加(うちスタブ1/3) • obstackライブラリのスタティックリンク • ./configureによるフラグ設定の調整 • OpenSSLのビルド・スタティックリンク
  • 77. Ruby on Rails on CRubyの 移植 • Bundlerが依存パッケージの解決のためRails実行 時にgemコマンドを実行するのでOSvでは動かな い • Bundlerによるライブラリロードを全削除 • 手動でパッケージ群をrequire • 全てのgemをデプロイ用ディレクトリにダウンロー ドしてきてOSvのファイルシステムへコピー
  • 79. OSvもくもく会 @ 東京 • ほぼ月一開催 • 皆でOSvで色々なアプリを動かそうとしてみる • バグが出たら僕がその場で直す • 次回は11月9日
  • 80.
  • 81.
  • 82.
  • 83. OSC • 関西と関東のOSCに出展 • 次回は10/19日(日)