Location via proxy:
[ UP ]
[Report a bug]
[Manage cookies]
No cookies
No scripts
No ads
No referrer
Show this form
Submit Search
OSv噺
•
3 likes
•
2,680 views
Takuya ASADA
Follow
OSv噺
Read less
Read more
Gallery
Report
Share
Gallery
Report
Share
1 of 35
Download now
Download to read offline
More Related Content
OSv噺
1.
OSv噺 @syuu1228
3.
自己紹介 • Software
Engineer at Cloudius Systems, Developing OSv • FreeBSD developer (bhyve, network stack..) • Software Designで「ハイパーバイザの作り 方」を連載中
4.
おさらい
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
8.
アプリケーション • OSvが提供するlibcの範囲で動き、-fPIC(-shared)でビルドされて
いる必要がある(最近PIE Executablesをサポート) • アプリの実行=現在のメモリ空間への<app>.soのロードとmain関数 の実行 • fork() / exec()はサポートされない →内部でコマンド実行するプログラムとの互換性がない • マルチスレッドはサポートされる
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
12.
何が動くの? (ネイティブアプリ) •
haproxy • memcached • MySQL • LevelDB • SQLite • twemproxy
13.
フットプリント (ディスクイメージサイズ) •
mruby = 14MB • Ruby = 48MB • OpenJDK = 77MB
14.
フットプリント (最低メモリ使用量) •
mruby = 65MB • Ruby = 75MB • OpenJDK = 110MB
15.
ブート時間 • 1秒(DHCP、ZFS初期化込み)
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などの アプリの情報を表示する機能を実装中
20.
HTTPプロトコルを通じてネッ トワーク越しに便利に使える 機能が増えた
21.
HTTPプロトコルを通じてネッ トワーク越しに便利に使える 機能が増えた←
22.
こうじゃないだろ
24.
HTTPといえば
26.
ついったでOSvとお話 したい
27.
ゆーざふれんどりぃ!
28.
どうやって実装するか? • 手軽なコマンド群?←それLua
CLIで(ry • そうだ、MentionをLua CLIに流し込もう
29.
どんな実装でTwitterに繋ぐか? • CLIがLuaだからLua?
→ ログインとツイートのサンプルコードくらいしかない 自力でごりごり書かないと無理そう • JavaやCRubyなど向けのTwitterアプリ? →Twitterに使ってしまうとその言語ランタイムで別のア プリを動かすのが面倒になるので避けたい・Luaに繋ぐの 面倒そう • C/C++でネイティブコードで書いてLua CLIを埋め込み? →これが現実解っぽい
30.
既存実装? • Twitter4C
依存性が低いのはうれしいが、ツイート投稿only • twitcurl 色々なサイトで広く紹介されてる→使ってみた mentionのURL間違えてる(?) JSONパーサどこ? Userstreamがない→実験してたらすぐrate limit 食らっちゃった
31.
Userstreamは欲しい • 即時反応したい
数十秒とか待ってられない • Rate limitひっかかりたくない
32.
cmdline_twitter • https://github.com/chromabox/
cmdline_twitter • libcurl, picojsonを使ってC++で書かれた簡潔な terminal用Twitterクライアント • 一行もコード書かなくても最初からUserstream 動いた • これを改造しよう
33.
一晩くっきんぐ 1. Lua
CLIのC側コードからCLIの初期化とコマン ドの実行のコードを抽出、関数つくる void cmd_init(void) int cmd_run(const char *line) 2. cmdline_twitterのUserstreamハンドラのうち Mention部分を乗っ取り 文字列から「@ユーザ名」を削除して cmd_run()にぶち込む
34.
でも
35.
感想 • コマンド出力つぶやきたい人生だった
• 送信元ユーザ制限しないとあぶなくてしょうが ない
Download now