by shigemk2

当面は技術的なことしか書かない

kvm-clockに時間を尋ねるのは間違っているだろうか まとめ #kernelvm

  • BitVisorでマイグレーション
  • kvm-clockに翻弄された

  • Sysbenchを走らす

  • 対象は物理マシン、BitVisor、KVM
  • KVMよりもBitVisorのほうが速いという期待

  • あれ、でもKVMのほうがなんでおそいのか

  • EPT? BitVisorでも使っているけど
  • キャッシュミス? でも違う

prefやstraceで調べてみる

  • VMExit回数やブロックサイズによらずほぼ同じ

→??????

  • なぜclock_gettime()が多くなるのか Sysbenchは1イベントごとの時間を測定
  • メモリテストの1イベント
  • memory-block-sizeを小さくしてみる→イベントの数は増えるし、時間を測定する回数が増える

  • まさか時間取得が遅い?

  • システムコールがおかしい?

→KVMだけ時間取得の処理が遅い…

ブログ記事から調べてみると、そのままだし、BitVisorがとりわけ速いわけでもなく、KVMもたいして時間が変わらなかった…

  • kvm-clockで泣いた

なぜkvm-clockは遅いのか?

  • 時間の取得を共有メモリでやりとり
  • HostがWrite時にメモリロック
  • GuestからのReadをブロック

まとめ

  • kvm-clockに時間を尋ねるのは間違っているだろうか→頻繁に尋ねるのは間違っている
  • 頻繁にclocksourceを読むときはtscに変えよう
  • kvm-clockが一番優先度が高い

フラグの話 #kernelvm

フラグ

  • Sign
  • Zero
  • Carry
  • Borrow
  • Half Carry
  • Parity
  • Overflow

Carryフラグ

  • 加算して桁上がりがワードからあふれたビット

Borrow

  • Carryと同様 減算は加算に還元される
  • 減算は加算に反転

Carray/Borrow Flag

  • MIPSでは削除
  • Cフラグなしで出来るのか→出来る

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか

  • 作者: ジュニア,ヘンリー・S.ウォーレン,Jr.,Henry S. Warren,滝沢徹,玉井浩,鈴木貢,赤池英夫,葛毅,藤波順久
  • 出版社/メーカー: エスアイビーアクセス
  • 発売日: 2004/09
  • メディア: 単行本
  • 購入: 35人 クリック: 732回
  • この商品を含むブログ (126件) を見る

overflowフラグ

  • 2の補数表示で、符号ビットにCarry/Borrowが入ってしまった状態
  • 符号なし2進数の比較 減算後Borrow(Carry)フラグをみる

harf carryフラグ

  • 下位4bitからの桁溢れ(Carry)
  • BCD演算など

Parityフラグ

  • どうでもよかった

CPUシミュレータ作り

  • 計算すると高いコストなので、評価を遅延させると良いのでは
  • 参照されない値を作るのは完全な無駄

d.hatena.ne.jp

隠れオペランドコピーのちょっとした難しさ

  • フラグはスタックへpush/popが可能

評価

  • コンパイラ動く、エディタも動く
  • 27000くらいあった
  • 人間が機械語で書いた奴はフラグを捨てる傾向
  • 高級言語でかかれたプログラムはフラグを参照する傾向
  • 30%くらいのフラグが捨てられているので、フラグの遅延評価は十分に効果をあげているのでは

跳ね橋を叩いて渡る An introduction to DrawBridge まとめ #kernelvm

MSの仮想化技術の話

  • Windowsをらいぶらりで動かす
  • マイグレーション
  • Dockerとの連携
  • MSのDrawBridge

話すこと

  • ライブラリOSの研究紹介

  • セキュリティ2015講師
  • MSの回しものではない

モノリシックカーネル vs マイクロカーネル

モノリシックカーネル

  • Linuxなど、垂直にハードウェアがぶらさがっている

マイクロカーネル

  • カーネル部分を小さくして、並列に並んでいる

カーネルの歴史

  • MTS 1967
  • MINIX 1987
  • Linux 1991

マイクロカーネル論争

  • マイクロカーネルはプロセス間通信のオーバヘッドが大きすぎる(Linus)
  • モノリシックカーネルは70年代の思想で、Linuxはx86に依存しすぎ

エクソカーネル

  • 1995

  • マイクロカーネルをより小さくしたもの OSとライブラリとリンクした形

  • カーネルにたくさんのライブラリを載せる必要がない

Xen

  • エクソカーネルの思想の影響を受けている(2003)
  • ライブラリではなく準仮想化ドライバ(ライブラリに相当する)

エクソカーネルとハイパーバイザ

  • ベアメタルハイパーバイザで動くのがエクソカーネル
  • べアメタルハイパーバイザで動くのが汎用OS

ライブラリOS

  • エクソカーネルの↑で動作する、アプリケーションにリンクされるライブラリと一体化

クラウド時代のライブラリOS

  • ハイパーバイザに全部やらせばよいのでは
  • Dockerよりも軽量
  • ユニカーネル (OCamlで書いたやつが動くのが発祥)

ユニカーネル(2013)

  • OSv
  • Mirage OS
  • Rump Kernels
  • ClickOS

  • USeNIX ATC'

  • それはエクソカーネルとどう違うのか
  • ライブラリOS - ドライバ
  • エクソカーネル + ドライバ

  • ドライバをハイパーバイザの上に任せる

  • マイクロカーネルをさらに切り詰めたエクソカーネルとその上で動作するライブラリOS

  • エクソカーネルにドライバがないならハイパーバイザで抽象化
  • クラウドにおけるインスタンスの軽量化を目的としたライブラリOS

Drawbridge

(勝鬨橋的な)

Drawbridge(2011)

  • サンドボックスの実現としてのライブラリOS
  • アプリケーションのバイナリには手を加えない
  • 巨大なWindowsサブシステムを切り詰めるかが焦点

そのアーキテクチャ

  • Win7のアーキ。いちばんしたがカーネル win32kがとても大きい
  • Drawbridge win32kを限りなく小さく。プロセスベースのコンテナ

  • スレッディング、仮想メモリ、ファイルシステム、ネットワーキングのためのABI

  • Windows以外のホストpicoprocessが動くようになるかも?

その性能

  • Hyper-Vよりも軽量に動作する
  • 2011当時では、MSのプロダクトに組み込む予定ではなかった

コンテナ技術とライブラリOSの歴史

  • chroot 1982
  • exokernel 1995
  • drawbridge 2011
  • docker 2013
  • mirage os 2013
  • osv 2014
  • coreos 2014(最小限のLinux)

  • mirageos osvはシンプルなライブラリOS

  • drawbridgeはcoreosみたく機能の切り詰めがキモ。

Haven

  • Haven(2014 船の停留所のイメージ)
  • OSDI' 14のBest Paper
  • アプリケーションをいかに保護するか

  • 階層型のトラストモデルは不完全

  • 信頼できないクラウド条で、安全にアプリケーションを動かすには というのがモチベーション

Intel SGX

  • インテルの新しいプロセッサ拡張
  • EPCM(Enclave Page Chage Map)によるメモリ空間のアクセス制御 アプリケーションで保護したいメモリ空間(Enclave)を指定する
  • EPCMを参照
  • HavenをDrawbridgeで動かして、picoprocessのなかで保護したいものを暗号化する

Havenの性能

  • トランザクション数の現象
  • VMと比べえて、35%-65%の性能低下

Tardigrade

  • クマムシみたいなのを意味
  • 2015
  • NSDI' 15
  • VMWareのレプリケーションで障害時にロールバックできるような仕組みをライブラリOSを使うことで実現
  • 低レイテンシで実現
  • LVMによるチェックポイント
  • 例外ハンドラによるスレッドコンテキストの保存
  • セマフォ(データの重複やロックにも対処)

Tardigrade

  • Bascule上に実装
  • レイテンシの削減にはうまくいっている

Windows 10のSDKを読む

  • SDKが配布されている
  • picoprocessまわりのSDKってあるの

picoprocess

  • Windows 8.1
  • Windows 10 Build 10074
  • ただし未だにPspPicoRegistrationDisalbledとなっている(picoprocessを呼び出す機能はまだ不完全)

  • KPCR構造体の情報をたどってコード・リーディングしてみる

  • レジスタの退避
  • FS/GSレジスタにはKPCR構造体が入る

  • _PS_PICO_PROVDER_ROUTINES picoprocess化したプロセスの登録

  • _PS_PICO_ROUTINES
  • PS_PICO_CREATE_PROCESS

API

  • PspCreateなど

Server Silo Functions

  • ソレ用の構造体が用意されている
  • _CONTAINER_ID_INFO

  • SiloはSiloオブジェクト

  • APIを使ってSiloにアクセス
  • ネームスペースの分離を行う関数

Windows版DockerはDrawbridgeなのか?

  • それまで研究してきたDrawbridgeの成果を活用している
  • Silo ネームスペースを分離する機能がWindows10に乗る?

nftables: The Next Generation Firewall in Linux まとめ #kernelvm

アンケート

  • AKB48
  • SKB SocKet Buffer(今日の話はココ)
  • PCB Process Control Block(プロセスの状態をあらわすデータ構造)
  • UNPCB Unix Protocol Control Block ソケット

アジェンダ

  • nftablesについてしゃべる

  • @s1061123

  • nftablesには関係がない

nftables

  • LinuxCon2015に似たタイトルの発表がある

nftablesとは

netfilter/iptables project homepage - The netfilter.org "nftables" project

  • パケットフィルタリングコマンド
  • iptablesと同様にnetfilterを使用している

netfilterとは

  • netfilter パケットを書き換えるフレームワーク
  • iptablesもnetfilterを使っている(firewalldもこれ)
  • netfilterはLinuxカーネル内でネットワークのパケットを書き換えることが出来る

ip ip6 arp eb tables?

  • 各プロトコルについて、コマンドが存在する

なぜnftables?

  • 技術的負債の解消
  • パフォーマンスの向上

  • iptablesができたのは1999 で16年

  • 70以上のモジュールがあって、つぎ足しつぎ足し秘伝のタレ
  • プロトコルごとに別コマンド
  • シンタックスルールも複雑化

  • iptablesのパフォーマンス問題

  • ルールセット追加削除がアトミック チェインに対して、カーネルからユーザランドにコピーするから遅い
  • ルールをすべて拾って読んでいれかえる、という作業をやっている
  • ルールが増えれば処理が重くなる

  • 2008に開発

  • 2012のnetfilter.orgの人がiptables互換レイヤー
  • 2014/1カーネルメインラインにマージ

使い方

  • カーネルにNF_TABLES(と好きなオプションをつけてビルド)
  • iptablesを使う場合はiptablesを止める
  • ルールの追加は以下のように。iptablesだと全部1行だった。構造化できる
table ip filter {
  chain input {
    ....
  }
  chain forward {
    ....
  }
}

フロー

  • 関連ライブラリ nft-rule-getを見る
  • バークレーパケットフィルタ(BPF)からインスパイア
  • フィルタリング実装はpseudo-state machineとして実装されている
  • パケットに必要なフィルタリングや計算の機能が載っている

VMコードの読み方

  • nft-rule-get
  • ペイロードのところが命令
  • レジスタのところにロード
  • パケットの中に存在しない情報を、load oifでとることができる
  • libnftnlをつかうことでnftablesのルールを追加したり削除したり出来る
  • Netlink(libnml)でカーネルに送信

宣伝

  • MiniUPnPがnftablesをサポート
  • MiniUPnPはNATの内側からforwardingの穴を簡単にあけられるNATむけのIGDの実装
  • UPnPなくても安心

まとめ

nftablesを使おう!

質疑

RTXで遊ぶ まとめ #kernelvm

  • @nvsofts
  • KVMとかLLVMとか研究で触っていた

Kernel/VM経験

  • 初参加 初発表

一家に一台 ルーター

ネタ

  • ヤマハルータに搭載されているLua機能の搭載
  • 公式ではわりとまじめ ルータ上でスクリプティングできる
  • 経路ダウン時にメール送信
  • VPN接続にワンタイムパスワードを使う

Lua機能とは

  • Luaスクリプトを実行して、ルータの設定変更やアクションをプログラミングできる
  • 独自API

変な使い方できないかな

  • USBは、ある

USBの役目とは

  • USBメモリにつないでロギング
  • バックアップ回線をUSB接続
  • キーボードを接続できるので、これで遊ぼう!

あそぶためには

  • 結構おかねかかる
  • MicroSDにLuaスクリプトを入れて、USBポートにキーボードをつなぐ

使い方

  • キーボード制御
  • LEDなどと同じく rt.hw.open()を使う
  • キーボードを表す文字列は"keyboard1"
  • 戻り値などの扱いもLED光らすなどと同じ

  • キーボードの文字の読みとり

  • hwd:getc()
  • hwd:getchar()
  • hwd:gets()

ブザー音をならす

bz, err = rt.hw.open("buzzer1")でブザーを出す。音程も調整できる

遊ぶ

  • ルータからモールス信号を出してみる
  • 文字列は外部キーボードから受け取る
  • モールス信号の発信はビープ音で行う

問題発生

  • 独自APIには、スリープを行うメソッドがあるが秒単位
  • これではモールス信号が使えない
  • 1秒未満のウェイトを空ループで

すごいローテク

for k = 1, 1400000 do
end

ビープ音をモールス信号で。

  • USBキーボードのバーコードリーダー
  • ダウンロードボタンにSOSのモールス信号

まとめ

  • ヤマハルータのLua機能は不真面目な使い方もできる
  • Lua対応のヤマハルータはお高いが、Luaで遊んでみよう

RTX3500 - ルーター - ヤマハ株式会社

書いて覚えるDHCPv6-PD まとめ #kernelvm

  • CATV回線からフレッツ光回線
  • IPv6が使える
  • グローバルアドレスが使える

立ちはだかる壁

  • vyatta系ルータOSのバグ
  • 最低限の知識もない
  • IPv6のプレフィックスはなにか
  • DHCPv6-PDって何? dhcpv6-pdってデーモン立てろってことか
  • コードを書いて覚えられるのでは

事前知識

  • IPv6の構造
  • PPPoE接続後、IPv6を払い出してもらうまでの流れ
  • DHCPv6-PDの通信
  • DHCPv6-PDパケットの構造

IPv6アドレスの構造

  • プレフィックス(ISPからもらう)
  • サブネット識別子(自分で勝手に決める)
  • インターフェイス識別子(自分で勝手に決める)

  • IPv6アドレスは大量にもらえるので、NATを使って節約する必要はない

  • LAN内すべてのマシンにグローバルIPが振られることがある

DHCPv6-PDとは

  • IPv6アドレスのプレフィックスを委任
  • DHCPv6パケット タイプ 長さ トランザクションID オプション1 オプション2 メッセージ(今回はでない)

  • Solicitパケット

DUID: DHCPの固有識別子で、リンク層アドレスなどから一意に決定

  • Advertise

実装

  • Python3でやってみる

未解決

  • SolicitにPDオプションをのっけるのはどの規格にかかれているのか…
  • RFCを読めばいいのか…

ファームウェアハック(仮) 改め UEFIとのつきあいかた 敗北篇 まとめ #kernelvm

www.cosmates.jp

特定するのはやめました。

DOOM?

  • git でSDK
  • x64で動かないのか

*トレースは失敗

  • UFEI以前のgdbの使い方がダメなのでは
  • SubversionだったけどEDK2はGHでホスティングされてる
  • UEFI2.5specが今年4月公開
  • UEFIはLuaでごにょごにょしたらどんどん楽しくなるかも

ちいなさクラウド業者やってみた まとめ #kernelvm

@katsyoshi

クラウド業者をやってみた

  • お金を積まずに大量のサーバが欲しい
  • RoRが動く環境が80台ほど欲しい
  • 個人用のLinux(CentOS6.5)はあるが、容量制限がある(1GB)

必要な機能と目的

  • RoR環境 Ruby Webサーバ
  • サーバ管理(Linux環境になれる)
  • お金をかけずに大量のサーバが欲しい EC2 Heroku?
  • IPあまっているし、自前でやるか

  • 今あるマシンでやる

  • memory192GBのKVMサーバ

ターゲット

  • 1週間に4時間
  • 同時に80人からアクセス

マシン構成

  • 安いBTOマシン
  • memory16GB
  • Ubuntu 14.04
  • LXC

なぜLXC?

  • KVMよりオーバーヘッド少ない

失敗

  • 70人くらいで同時にbundle installするとものすごく時間がかかる

対応策

  • とりあえず分散 同じマシン3台で20台ずつ分散 (1台ネットワークに繋がらない…)

再構成

  • memory 32GB or 16GB
  • Ubuntu 14.04
  • LXC

実行時にメモリ量が違うけど、今回は問題なく実行終了

ベンチマーク(何が悪かったのか)

  • LXC利用しないで実行する 80並列bundle install(はやいほうは20分で終わったけど、遅いほうは5分でpingも通らなくなり、マシンがおなくなりになった)

LXCベンチマークはそのうち取りたい

まとめ

  • LXCでも100台つらい
  • 30台くらいだとなんとなく動く
  • リソース制限かければもっとうごく?

Network as a Storage まとめ #kernelvm

  • @eagle_raptor
  • メーカーでネットワーク関連

ほぼ実用性のない話

  • ネットワーク自体をメモリとして活用しよう
  • ネットワーク帯域はかなり余っている
  • パケット送信した10分後とかに勝手に届いたりしないかなー

FastPass

  • FastPass Arbitor
  • Timesolot Allocation

  • 経路上のキューの集合がデータを保持

水銀遅延線

  • 水銀の入った筒で電気信号を送る

水銀遅延線の場合

  • 光ネットワークにおける遅延線
  • 実際に光バッファとして遅延線が今も現役
  • 光のままデータを保持したいニーズ
  • 水銀→ファイバ 音波→光
  • 遅延時間→ファイバ長さ、周回数sなど

  • 詳細は検索して欲しい

Ethernetではどうなのか(電気)

  • 転送はStore and Forward
  • エンドツーエンド通信中は経路上のバッファのところにデータがいる
  • 基本的には相手に届く
  • メモリとして使うための要件
  • ループさせればよさそう

Ethernet上でのループ

  • 自立分散の世界におけるループ=死
  • 集中分散ならけそう→OpenFlow

  • 制御の方針

  • ネットワーク上に閉ループを意図的に構成
  • 保持しておきたいデータは底で回しておく
  • 必要になったら取り出し

OpenFlow

インターネット10分講座:OpenFlow - JPNIC

  • コントローラから集中制御でループを構成
  • 任意のち円を持ったネットワークを作る
  • 単一ホスト

具体的な実装

  • ループを意図的に作る
  • ループへの入り口/出口を作る

ループ脱出

  • 任意のタイミング(ルールの変更)
  • 任意の時間での取り出し(ハードタイムアウトとプライオリティ)

メモリとしての利用

  • FUSEでファイルシステム作成
  • フィアル名をOpenFlowのマッチ条件にエンコード
  • 格納されたデータをファイル名をエンコードしたヘッダを持つパケットとしてループ

実際に動くの?

  • 動くけどスイッチがめちゃくちゃ熱くなる
  • 体験したい場合はそのへんのL2スイッチをループさせてみよう
  • サーバ単体でもnetns+openvswitchなど

おわりに

  • 有益なユースケースがない
  • QoS別キューや適切なポリサーを使ってレートコントロールできれば熱くならない?
  • トークンのないリングバスにも見える
  • 宛先の決まらないうちにパケットをアウトオブオーダーで投げるとかに使える?

宣伝

NSDIの読み会を6/20にやります。

おまけ

プログラムカウンタを使う まとめ #kernelvm

デバッガ

  • 実行中のプログラムを表示してくれる画期的な便利ツール
  • 使っているのか?
  • どうやって情報をアレしているのか

デバッグ情報とプログラム・カウンタ

  • デバッグ情報=プログラム・カウンタとプログラムの状態の対応をとるテーブル
  • そんな感じの図になっている

デバッグ情報の仲間(プロファイラ)

  • サンプリング型プロファイラ
  • 一定時間(1ms)ごとにPCを収集
  • それとデバッグ情報を対応させて、ソースコード行ごとの処理時間を推測

デバッグ情報の仲間(例外)

Linuxのget_user()

  • Linuxのget_user()

  • テーブル化

  • 要因を調べる
  • フォールとしない場合はゼロコスト

  • OSXのPFZ(preemption free zone)

  • pthread_mutex_lockのように、他のスレッドの処理を待つ処理

  • PFZ

  • 割り込み処理の中でEIPがPFZ

まとめ

  • プログラムカウンタと情報の対応付けはコンパイル時に決められる(ある程度リッチな情報をつけられる)
  • プログラム・カウンタは実行中に自動的に更新される
  • コストゼロで情報が作れる

PCIeの話 まとめ #kernelvm

speakerdeck.com

PCI is 何

  • 周辺機器の総合接続
  • 仕様としてのPCIの話は後述
  • PCI-DSSの話はしない

PCI-Expressってなに

  • 周辺機器の相互接続のための仕様

決めているのは誰

  • PCI-SIGという団体
  • 仕様の策定
  • カンファレンス開催
  • VendorIDの割り当て

その歴史

  • ISA PCI PCI-X
  • 本ずじがPCI→PCIe

バスアーキテクチャとパラレルIO

遅い、電気的なノイズが発生しやすい 同じようにデータが届くとは限らない。ので、辛い。

PCIe

  • パラレルIO→シリアルIO
  • バスアーキテクチャ→Point-to-PointなLink

モノが2個あったら、専用の線をつなぐ

シリアルIO

  • 送信時にクロックとデータを混ぜる
  • 受信時にクロックとデータを分離する
  • クロックを省けるということが論理的に言えた。クロックを一緒に送らなくてもいい。
  • という計算方法で作られたのがシリアルIO

  • Gen1 Gen2まで使われていた

Linkの帯域

  • レーン数は4本あれば4倍になる。
  • Gen1→Gen3までに指数関数的にスペックが上がってきてる

Componentとトポロジ

  • Componentは3つ
  • root complexを頂点としたツリー

レイヤ

  • Transaction Layer
  • Data Link Layer
  • Physical Layer

アドレスの種類とレジスタ

  • Configuration
  • Memory
  • I/O 互換性のために残す

まとめ

  • パケットのフォーマットルーティング
  • lspciの読み方
  • PCIについては、メンバーになっている会社は仕様書をダウンロードできる

ブートストラッピングで言語処理系を作った話 まとめ #kernelvm

  • 実装言語はアセンブリ(Cなどは使わない)
  • 既存ライブラリは使わない(libcなど)
  • コード生成ツールは使わない
  • ブートストラッピング→Amber→Amberでセルフホスティング

何の意味があるのか

  • 純粋に楽しみとして
  • 知識技術ノウハウを磨くのに役立つかも
  • ツール群を作った先人への感謝

ダイジェスト

  • アセンブリ言語でrowl0を作る(rlc) トークンの正規表現から状態遷移図からパーサ
  • メモリ管理が面倒なのでヒープない
  • 変数管理ない
  • 関数引数はp0 p1 p2
  • ローカル変数はスタックメモリを確保してから参照

  • インタプリタrowl-coreをつくる(LISPをつくる) レキサパーサを作る

  • libc使わないのでmalloc freeないのでメモリ管理まだしていない
  • 不要になったメモリを回収しないので、動かし続けると死ぬ

  • rowl-coreでVM記述用言語を作る

  • LISPの活用して言語内DSLを作る(VM用コンパイラを書く) 言語内DSLでVMのコードを書く

  • メタプログラミングの活用

  • テーブルを作っておいて、その命令テーブルから色々と自動生成する。命令の追加削除を自動的に反映
  • LISPだとこういう仕組みを作るのが楽な気がする

  • 多倍長整数演算は必須なので用意する

  • 例外機構 継続なども用意

  • 仮想マシン rlvmが完成

  • 186命令
  • スタックマシン
  • コピーGC
  • 例外機構

VM用のツールチェインを作る

  • VMは出来たがプログラミング環境がない
  • VM用中級言語
  • アセンブラ
  • ディスアセンブラ
  • コンパイラ
  • リンカ VM上で動く。リンカはメモリを食うのでGCのある環境でやりたかった

VM上でプログラミングが可能に。

普通を楽しめるよろこび。

rowl1でAmberの実装に入る。

  • 動的スクリプティング言語
  • インターベースオブジェクト指向
  • 動的パターンマッチングエンジンと部分関数の融合プログラム

  • VM→オブジェクトシステム→パターンマッチングエンジン→コンパイラ→パーサ(通常はVMの上にコンパイラは作らない)

  • VM上で動作

  • すごく高級になってきた

Amberのモジュール

  • 自己拡張性の追求
  • Amberの文法は標準ライブラリで定義されている
  • 起動時に自身の文法を構築する
  • マクロで文法増強
  • リッチな構文
  • オブジェクトシステム増強→継承が使える
  • ここで開発が止まる…

まとめ

だいぶ高級なところまで到達できたので満足

OS*: OSv on * #kernelvm

BitVisor

  • ハイパーバイザのレイヤでカプセリングなど

bitvisor / bitvisor — Bitbucket

github.com

  • OSvとBitVisorを組み合わせたり出来る(OSb)
  • パススルーでおーけー
  • Virtioを見せればおーけー
  • OSv

Para Pass-through Virtio

  • Virtioリングだけ取り繕う
  • パススルー
  • 性能評価(forループ)をしてみると、OSbとLinuxではOSbのほうが速い。

OSpデザイン

  • App OSv HardWare

ゆるい実装の解説

  • 送受信の基本的な流れ
  • デバイスの初期化
  • 送信処理の実装
  • 受信処理の実装

Intel NIC送信の基本

  • I/O Registers Ring Buffer

送信処理の実装

  • OSv -> Driver
  • OSvはキューに積む処理を期待
  • OSvはProducerの更新を期待
  • このあたりを実装することでパケットが飛ぶ

受信処理の実装

  • Driver -> OSv Reception

残念ながらゆるい実装

  • ポーリング
  • 現在ではあまりスループットが高くないので、改善したい

まとめ

OSv OSb OSp