More Related Content
More from Takuya ASADA (15)
OSv噺
- 3. 自己紹介
• Software Engineer at Cloudius Systems,
Developing OSv
• FreeBSD developer (bhyve, network stack..)
• Software Designで「ハイパーバイザの作り
方」を連載中
- 5. 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.
- 6. OSvの設計
• OSvは複数のメモリ空間を持たない
メモリ空間は全プロセス&カーネルで共通
• OSvはカーネルとユーザプロセス間で権限のモード切替を行わない
従って,カーネルの機能はlibc経由の関数コールで実現
• メモリの保護や権限の制限はハイパーバイザや言語ランタイムに任
せる
ネイティブコードがメモリ保護エラーでOSvカーネルのメモリ領域
を破壊するのはユーザ責任
• イメージとしては言語ランタイムをベアメタル環境に移植して
いる状態に近い
- 7. 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
- 9. 動作環境
• ハイパーバイザ
• KVM
• Xen
• VMware
• VirtualBox
• IaaS
• Amazon EC2
• Google Compute
Engine
- 10. 対応アプリ
(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
- 11. 対応アプリ
(Java以外)
• Ruby
• WEBRick
• Ruby on Rails
• Publify(Railsベースのブログエンジン)
• mruby
• lua
• Node.js
- 16. OSvをプログラムから操作
「REST API」
• REST API経由でOSvに任意の操作を実行
• 従来のOS:コマンド実行やファイルの編集で設
定を変更
(手動が基本、シェルスクリプトなどで自動化)
OSv:APIで設定を変更
(自動化が基本、CLIはオプション)
- 17. OSvを対話的に操作
「Lua CLI」
• 簡易的なシェル機能を実現
• 全ての機能をREST API上に実装
• デフォルトではOSv上で実行されるが、リモー
トホストで実行してSSH代わりに使用可能
- 18. OSv GUI
• WebベースのGUI
• OSの負荷、JVMのリソース情報、アプリの
statisticsなどの統計情報を表示
• Virtual applianceとしてOSvを使うことを前
提にCassandra, memcached, Redisなどの
アプリの情報を表示する機能を実装中
- 29. どんな実装でTwitterに繋ぐか?
• CLIがLuaだからLua?
→ ログインとツイートのサンプルコードくらいしかない
自力でごりごり書かないと無理そう
• JavaやCRubyなど向けのTwitterアプリ?
→Twitterに使ってしまうとその言語ランタイムで別のア
プリを動かすのが面倒になるので避けたい・Luaに繋ぐの
面倒そう
• C/C++でネイティブコードで書いてLua CLIを埋め込み?
→これが現実解っぽい
- 30. 既存実装?
• Twitter4C
依存性が低いのはうれしいが、ツイート投稿only
• twitcurl
色々なサイトで広く紹介されてる→使ってみた
mentionのURL間違えてる(?)
JSONパーサどこ?
Userstreamがない→実験してたらすぐrate limit
食らっちゃった
- 33. 一晩くっきんぐ
1. Lua CLIのC側コードからCLIの初期化とコマン
ドの実行のコードを抽出、関数つくる
void cmd_init(void)
int cmd_run(const char *line)
2. cmdline_twitterのUserstreamハンドラのうち
Mention部分を乗っ取り
文字列から「@ユーザ名」を削除して
cmd_run()にぶち込む