Slide 1

Slide 1 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに CRuby on OSᵛ orumin Jul 12th, 2014 orumin CRuby on OSᵛ

Slide 2

Slide 2 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに 1 Introduction 2 OSᵛ 3 CRuby on OSᵛ 4 さいごに orumin CRuby on OSᵛ

Slide 3

Slide 3 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Introduction orumin CRuby on OSᵛ

Slide 4

Slide 4 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Who are you? orumin 学生(今年から大阪,大破ではない) seccamp 2012 GSoC 2014 student orumin CRuby on OSᵛ

Slide 5

Slide 5 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Who are you? orumin 学生(今年から大阪,大破ではない) seccamp 2012 GSoC 2014 student orumin CRuby on OSᵛ

Slide 6

Slide 6 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに GSoCでOSᵛにCRubyを移植! OSᵛとは? 何をやったのか? orumin CRuby on OSᵛ

Slide 7

Slide 7 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに OSᵛ orumin CRuby on OSᵛ

Slide 8

Slide 8 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ Cloudius Systems イスラエルベンチャー KVMのQumranetのコアメンバーが開発 ハイパーバイザやIaaS(EC2,GCE etc)で動作 フルサイズのOSではなく“library OS” 1 app on 1 VM ログインしてから手動のコンフィグ不要,REST APIで制御 orumin CRuby on OSᵛ

Slide 9

Slide 9 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ BSDL ハイパーバイザー上で動作することを前提 単一のメモリ空間で,単一のプロセス,マルチスレッド動作 OpenJDKが移植してあり,任意のJavaアプリケーションが動作 FedoraのJVMバイナリそのまま持ってきてる ネットワークスタックとZFSをFreeBSDから移植 orumin CRuby on OSᵛ

Slide 10

Slide 10 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ コンテナ仮想化より高効率 現在のクラウドは既にハイパーバイザーが用意されている その上で汎用のOSが動いて,コンテナが動いて,アプリが…… orumin CRuby on OSᵛ

Slide 11

Slide 11 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ コンテナ仮想化より高効率 二度手間 複数インスタンス立ててスケールさせるほうが効率高 library OSであり,1 app per 1 VMであることが生きる orumin CRuby on OSᵛ

Slide 12

Slide 12 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ (image from @syuu1228’s blog) orumin CRuby on OSᵛ

Slide 13

Slide 13 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ libcがある! (musl-libc, BSDL) CFLAGS=-fPIC -shared main()がある*.soなら動く Linuxエミュレーション,たとえばunameはLinuxを返す Linuxのアプリケーションを低コストで移植可能(?) orumin CRuby on OSᵛ

Slide 14

Slide 14 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに What’s OSᵛ CRuby OSv kernel FBSD code ZFS TCP/ IP COM port virtio- blk virtio- net clock ACPI sched uler ramfs VFS MM libc ELF loader syscall emu libruby.so ruby.so Ruby app オリジナル実装(C++11) ポーティング バイナリ 非ネイティブコード orumin CRuby on OSᵛ

Slide 15

Slide 15 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application http://github.com/cloudius-systems/osv/wiki/ Porting-native-applications-to-OSv orumin CRuby on OSᵛ

Slide 16

Slide 16 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application 先述通り,libcのPOSIX APIがありLinuxエミュレーションをしているの でほぼそのまま動作 makeのときshared binaryを吐くように調節してやれば良い 巨大なアプリケーションだとちょっと辛いかもしれない…… orumin CRuby on OSᵛ

Slide 17

Slide 17 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application もう一つ,OSᵛのイメージの,ファイルレイアウトを書く必要アリ usr.manifest orumin CRuby on OSᵛ

Slide 18

Slide 18 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application Figure 1: usr.manifest orumin CRuby on OSᵛ

Slide 19

Slide 19 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application じゃあこれで誰でもすぐ移植できますね? orumin CRuby on OSᵛ

Slide 20

Slide 20 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに Porting native application アッハイ orumin CRuby on OSᵛ

Slide 21

Slide 21 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに CRuby on OSᵛ orumin CRuby on OSᵛ

Slide 22

Slide 22 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに いしょくのげんじつ 存在しない数多のAPI そもそも内部的には単一アドレス空間 直接メソッド呼んだりするので,POSIXに合わせたAPIがないこと多数 仕様上存在しない(できない?)fork(2)やexec(2) これの扱いをどうすべきか何度も議論されている 複数立ち上げるVMのELFの名前空間を共有? orumin CRuby on OSᵛ

Slide 23

Slide 23 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに いしょくのげんじつ _人人人人人人人人人人人人人_ > 多くのwork arround必至 <  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ orumin CRuby on OSᵛ

Slide 24

Slide 24 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに missing symbol Failed looking up symbol __register_atfork [backtrace] 0x31a7f3 0x35fbb3 <__elf_resolve_pltgot+47> 0x31c8e5 0x3b7734 0x3b7b80 >, i +576> 0x20d366 > const&) +246> 0x20ef10 0x3fd6a6 0x3a246b orumin CRuby on OSᵛ

Slide 25

Slide 25 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに missing symbol 大概こうなる みたことのないlibc APIをいっぱい知ることできるよ! orumin CRuby on OSᵛ

Slide 26

Slide 26 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに missing symbol 解決策 関数を呼び出すだけのAPI実装 存在しないシステムコールは,OSᵛが内部的に持っててlibcにないだけの ことも musl-libcから移植 OSᵛの持つクラスにパブリックメソッドを追加 メモリ管理やptreadあたりはC++11で実装されている stubをつくる どうしようもないときの対処 orumin CRuby on OSᵛ

Slide 27

Slide 27 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに missing symbol libcとの格闘がGSoCで大部分占めてます orumin CRuby on OSᵛ

Slide 28

Slide 28 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな libc以外のOSᵛ固有の問題でハマる Alphaだけあってそもそもの実装バグを踏む Rubyやbundlerの振舞いでもハマる rquire ’bundler/setup’するとシステムコマンド叩くのかexec(2)で落ちる Windowsはfork(2)とか持ってないはずだから回避方法はあるはず……? 現在進行形でもハマってる EC2,GCEでRubyなサーバー走らせようとしたらOpenSSLのseedに失敗 RDRAND,virtio-rngがない? (ローカルでは問題ないのに……) orumin CRuby on OSᵛ

Slide 29

Slide 29 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな ローカルだとgdbでアタッチできる https://github.com/cloudius-systems/osv/wiki/Debugging-OSv IaaSのリモート上だと……? orumin CRuby on OSᵛ

Slide 30

Slide 30 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな ローカルだとgdbでアタッチできる https://github.com/cloudius-systems/osv/wiki/Debugging-OSv IaaSのリモート上だと……? 色々REST APIが増えてるらしい(でもドキュメント……) orumin CRuby on OSᵛ

Slide 31

Slide 31 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな Figure 2: world_is_mine orumin CRuby on OSᵛ

Slide 32

Slide 32 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな ローカルで動作するならIaaSにデプロイ するだけで動く orumin CRuby on OSᵛ

Slide 33

Slide 33 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに おとしぁな orumin CRuby on OSᵛ

Slide 34

Slide 34 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに デモ デモあります! orumin CRuby on OSᵛ

Slide 35

Slide 35 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに デモ http://osv.orum.in/ orumin CRuby on OSᵛ

Slide 36

Slide 36 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに さいごに orumin CRuby on OSᵛ

Slide 37

Slide 37 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに さいごに http://github.com/cloudius-systems/osv/wiki/Latest-EC2-AMI-list orumin CRuby on OSᵛ

Slide 38

Slide 38 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに さいごに Amazon EC2用のAMIが公開されています! おそらくt2.microでも動作 EC2アカウントお持ちの方は試してみよう! orumin CRuby on OSᵛ

Slide 39

Slide 39 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに さいごに そのうちPublifyのAMIとかも公開できるかも…… orumin CRuby on OSᵛ

Slide 40

Slide 40 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに 宣伝 Kernel/VM探検隊ブログやりませんか orumin CRuby on OSᵛ

Slide 41

Slide 41 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに 宣伝 Kernel/VM探検隊ブログやりませんか 発表補足 低レイヤ連載 美味しいお店紹介とかでもOK? orumin CRuby on OSᵛ

Slide 42

Slide 42 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに 宣伝 ブログシステムのバックエンドにOSᵛ,使えたらいいな orumin CRuby on OSᵛ

Slide 43

Slide 43 text

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction OSᵛ CRuby on OSᵛ さいごに 宣伝 興味ある人は@kotatsu_miとかに連絡下さい orumin CRuby on OSᵛ