Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
OSv噺 
@syuu1228
OSv噺
自己紹介 
• Software Engineer at Cloudius Systems, 
Developing OSv 
• FreeBSD developer (bhyve, network stack..) 
• Software Designで「ハイパーバイザの作り 
方」を連載中
おさらい
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.
OSvの設計 
• OSvは複数のメモリ空間を持たない 
メモリ空間は全プロセス&カーネルで共通 
• OSvはカーネルとユーザプロセス間で権限のモード切替を行わない 
従って,カーネルの機能はlibc経由の関数コールで実現 
• メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任 
せる 
ネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域 
を破壊するのはユーザ責任 
• イメージとしては言語ランタイムをベアメタル環境に移植して 
いる状態に近い
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
アプリケーション 
• OSvが提供するlibcの範囲で動き、-fPIC(-shared)でビルドされて 
いる必要がある(最近PIE Executablesをサポート) 
• アプリの実行=現在のメモリ空間への<app>.soのロードとmain関数 
の実行 
• fork() / exec()はサポートされない 
→内部でコマンド実行するプログラムとの互換性がない 
• マルチスレッドはサポートされる
動作環境 
• ハイパーバイザ 
• 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
フットプリント 
(最低メモリ使用量) 
• mruby = 65MB 
• Ruby = 75MB 
• OpenJDK = 110MB
ブート時間 
• 1秒(DHCP、ZFS初期化込み)
OSvをプログラムから操作 
「REST API」 
• REST API経由でOSvに任意の操作を実行 
• 従来のOS:コマンド実行やファイルの編集で設 
定を変更 
(手動が基本、シェルスクリプトなどで自動化) 
OSv:APIで設定を変更 
(自動化が基本、CLIはオプション)
OSvを対話的に操作 
「Lua CLI」 
• 簡易的なシェル機能を実現 
• 全ての機能をREST API上に実装 
• デフォルトではOSv上で実行されるが、リモー 
トホストで実行してSSH代わりに使用可能
OSv GUI 
• WebベースのGUI 
• OSの負荷、JVMのリソース情報、アプリの 
statisticsなどの統計情報を表示 
• Virtual applianceとしてOSvを使うことを前 
提にCassandra, memcached, Redisなどの 
アプリの情報を表示する機能を実装中
OSv噺
HTTPプロトコルを通じてネッ 
トワーク越しに便利に使える 
機能が増えた
HTTPプロトコルを通じてネッ 
トワーク越しに便利に使える 
機能が増えた←
こうじゃないだろ
OSv噺
HTTPといえば
OSv噺
ついったでOSvとお話 
したい
ゆーざふれんどりぃ!
どうやって実装するか? 
• 手軽なコマンド群?←それLua CLIで(ry 
• そうだ、MentionをLua CLIに流し込もう
どんな実装でTwitterに繋ぐか? 
• CLIがLuaだからLua? 
→ ログインとツイートのサンプルコードくらいしかない 
自力でごりごり書かないと無理そう 
• JavaやCRubyなど向けのTwitterアプリ? 
→Twitterに使ってしまうとその言語ランタイムで別のア 
プリを動かすのが面倒になるので避けたい・Luaに繋ぐの 
面倒そう 
• C/C++でネイティブコードで書いてLua CLIを埋め込み? 
→これが現実解っぽい
既存実装? 
• Twitter4C 
依存性が低いのはうれしいが、ツイート投稿only 
• twitcurl 
色々なサイトで広く紹介されてる→使ってみた 
mentionのURL間違えてる(?) 
JSONパーサどこ? 
Userstreamがない→実験してたらすぐrate limit 
食らっちゃった
Userstreamは欲しい 
• 即時反応したい 
数十秒とか待ってられない 
• Rate limitひっかかりたくない
cmdline_twitter 
• https://github.com/chromabox/ 
cmdline_twitter 
• libcurl, picojsonを使ってC++で書かれた簡潔な 
terminal用Twitterクライアント 
• 一行もコード書かなくても最初からUserstream 
動いた 
• これを改造しよう
一晩くっきんぐ 
1. Lua CLIのC側コードからCLIの初期化とコマン 
ドの実行のコードを抽出、関数つくる 
void cmd_init(void) 
int cmd_run(const char *line) 
2. cmdline_twitterのUserstreamハンドラのうち 
Mention部分を乗っ取り 
文字列から「@ユーザ名」を削除して 
cmd_run()にぶち込む
でも
感想 
• コマンド出力つぶやきたい人生だった 
• 送信元ユーザ制限しないとあぶなくてしょうが 
ない

More Related Content

OSv噺