BHyVe ってなんや
  @syuu1228

              1
ここでちょっとおさらい


              2
3
x86 での仮想化実現方法


                4
5
x86 上で x86 を仮想化して
るんだから、命令を直接実
  CPU で実行したい!
    ※ 但し実行しちゃまずい奴はどうにかしてね♥




                             6
x86 上で x86 を仮想化して
るんだから、命令を直接実
  CPU で実行したい!
    ※ 但し実行しちゃまずい奴はどうにかしてね♥




                             7
8
9
10
11
12
直接実行しちゃマズい命令
だけ trap してエミュレー
  ションすればいい

              13
14
15
あれっ
これ無理じゃね

          16
根性でどうにかする
●   VMWare
    – 実行時にマズい命令を動的に書き換え
●   Xen
    –   手で書き換え




                          17
つらい


      18
Intel VT


           19
CPU にゲスト用のモードを追加!




                    20
21
22
VMX root mode (ハイパーバイザ側)   VMX non­root mode (ゲスト側)




                                                      23
VMX root mode (ハイパーバイザ側)   VMX non­root mode (ゲスト側)




                    VMLAUNCH
                    VMRESUME



                                                      24
VMX root mode (ハイパーバイザ側)       VMX non­root mode (ゲスト側)




                      VMExit




                                                          25
VMCS 構造体
●   Virtual Machine Control Structure
●
    4KB の構造体
●   保存するもの
    –   例外の引き起こす命令の設定
    –   プログラムカウンタの値
    –   各種レジスタの値
    –   VM のメモリ開始位置 etc...


                                        26
Intel VT でのゲスト OS 動作の流れ
1.VMCS にゲスト環境の設定をロード
2.CPU に VMCS をセット
3.VMLAUNCH でゲストモードに切り替え
4.
 ゲスト環境実行
5.
 何らかの trap 要因が発生、 VMExit する
6.VMExit 要因を調べ、要因に合わせたエミュレーション処理を行う
7.3 に戻る



                                      27
KVM の考え方


           28
VT を前提にすればハイパ
ーババイザ簡単に作れるん
     じゃね?
    ※VMWare とか Xen と比較して。




                            29
Intel VT でのゲスト OS 動作の流れ
1.VMCS にゲスト環境の設定をロード
2.CPU に VMCS をセット
3.VMLAUNCH でゲストモードに切り替え
4.
 ゲスト環境実行
5.
 何らかの trap 要因が発生、 VMExit する
6.VMExit 要因を調べ、要因に合わせたエミュレーション処理を行う
7.3 に戻る


          エミュレータが欲しいなら、 QEMU を使えばいいじゃない
                                          30
31
Intel VT でのゲスト OS 動作の流れ
1.VMCS にゲスト環境の設定をロード
2.CPU に VMCS をセット
3.VMLAUNCH でゲストモードに切り替え
4.
 ゲスト環境実行
5.
 何らかの trap 要因が発生、 VMExit する
6.VMExit 要因を調べ、要因に合わせたエミュレーション処理を行う
7.3 に戻る


    白いところを KVM がやる。黄色いところを QEMU がやる。
                                       32
簡単にハイパーバイザでき
ちゃった!しかも速い!

           33
おさらい終わり


          34
ではそろそろ
BHyVe の話に戻ろうか

                35
BHyVe ってなんやろ?




知ってる人挙手 ノ


                 36
BHyVe ってなんやろ?
●   最近出てきたばっかりのハイパーバイザ
    ( 2011/05/13 に NetApp が BSDCan で発表)
●
    FreeBSD カーネルの1機能として実装されている
    →平たく言うと Linux KVM の FreeBSD 版!
●   シンプルな構造
●
    BSD ライセンス
●   絶賛開発中( http://wiki.freebsd.org/BHyVe )

                                             37
「車輪の再発明?」
「そうだね。ただし BSD
ライセンスの車輪だ。」

                38
BHyVe 動作イメージ

/usr/sbin/bhyve                      User 
                                    program
         IOCTL(VM_RUN)
                         VMExit

BSD kernel    vmm.ko              Guest kernel

                    VMLAUNCH                     39
BHyVe 詳細
●   Intel VT­x, EPT サポート必須(シャドーページング非サポート)
    → Nehalem 以降の Intel CPU のみ対応
●   AMD SVM 未対応
●   BIOS Emulation /ディスクイメージからのブート未対応
    ゲストカーネルをロードする事によって起動
    ゲストカーネルローダは FreeBSD カーネルのみ対応
●   ブロックデバイスは virtio­blk にのみ対応
●   イーサネットデバイスは virtio­net にのみ対応
●   コンソールデバイスは独自ドライバが必要、 UART コンソールは絶賛実装中
●   VGA デバイス・ PS/2 デバイス・ USB デバイスなどは未対応
●
    Intel VT­d に対応、 PCI passthrough 可能
●   MSI 割り込みのみ対応→ Legacy 割り込み/ MSI­X 割り込み未対応



                                                    40
もしかして:
めっちゃ機能少ない

            41
前向きに考えよう


           42
今ならハイパーバイザの
  コードが簡単に
  全行読破出来る!

              43
今なら簡単なパッチで
ハイパーバイザの開発に
   参加し放題!

              44
BHyVe 利用例
●   参考資料:
    http://callfortesting.org/bhyve/
    から http://people.freebsd.org/~neel/bhyve/vm1.tar.gz  を
    ダウンロード、 vmrun.sh を参照

    kldload vmm.ko
    /usr/sbin/bhyveload ­m ${lowmem} ­M {highmem} ­h {bootdir} ${vmname}
    /usr/sbin/bhyve ­c ${cpus} ­m ${lowmem} ­M{highmem} 
    ­s 1,virtio­net,tap0 ­s 2,virtio­blk,${diskdev}



                                                                           45
KVM 利用例(比較)
modprobe kvm_intel.ko
kvm ­m 512 ­vnc :0 
­drive file=/foo/bar.img,if=virtio,index=0,boot=on 
­net nic,model=virtio,macaddr=00:11:22:33:44:55 
­net tap,ifname=tap0




                                                       46
bhyveload??
●   参考資料: http://callfortesting.org/bhyve/

    kldload vmm.ko
    /usr/sbin/bhyveload ­m ${lowmem} ­M {highmem} ­h {bootdir}  
    ${vmname}
    /usr/sbin/bhyve ­c ${cpus} ­m ${lowmem} ­M{highmem} 
    ­s 1,virtio­net,tap0 ­s 2,virtio­blk,${diskdev} ${vmname}


                      お前何者だ?                                        47
各コマンドの役割分担
●   /usr/sbin/bhyveload
    VM インスタンスを作成し、 BSD カーネルを VM インスタンスのメモリ領域にロ
    ードして起動可能な状態を作る
●   /usr/sbin/bhyve
    bhyveload が初期化した VM インスタンスを実行し、ディスク、 NIC 、コンソール
    などのデバイスエミュレーション処理を行う

    VM インスタンスの状態は、プロセス内ではなく /dev/vmm/${vmname} というデバ
    イス上、つまりカーネル内に保持される。
    このファイルへ read(), write(), mmap() する事により VM 内のメモリ空間にアクセ
    ス出来る。


                                                            48
なにそれこわい
●   YES WE CAN!!
    dd if=/dev/vmm/testvm of=memdump bs=1024 count=1024
●   僕が狂ったこと言ってるんじゃなく、
    BSDCan で NetApp が発表したスライドに出てくる




                                                          49
bhyveload の動作
●   sysctl(“hw.vmm.create”, vm_name)
    → /dev/vmm/${vm_name} を作成
●   open(/dev/vmm/${vm_name})
●   seg.gpa = 0
    seg.len = mem_size
    ioctl(fd, VM_MAP_MEMORY, seg)
    membase = mmap(NULL, mem_size, PROT_READ|PROT_WRITE, 
    MAP_SHARED, fd, 0)
●
    userboot.so を使って membase の領域へ BSD カーネルを memcpy()


                                                            50
bhyve の動作
●   open(/dev/vmm/${vm_name})
●   デバイス初期化
●   pthread_create(fbsdrun_start_thread)
    fbsdrun_start_thread() {
       while(1) {
       ioctl(VM_RUN, &vmexit)
       handler[vmexit.exitcode](&vmexit, &vcpu);
       }
    }
●   メイン関数はデバイスエミュレーションの処理要求イベントを kevent() で待つ



                                                   51

More Related Content

PDF
スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~
PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
大規模サービスを支えるネットワークインフラの全貌
PDF
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
AlmaLinux と Rocky Linux の誕生経緯&比較
PDF
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
PPTX
本当は恐ろしい分散システムの話
PDF
エンジニアも知っておきたいAI倫理のはなし
スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
大規模サービスを支えるネットワークインフラの全貌
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlmaLinux と Rocky Linux の誕生経緯&比較
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
本当は恐ろしい分散システムの話
エンジニアも知っておきたいAI倫理のはなし

What's hot (20)

PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
PDF
その ionice、ほんとに効いてますか?
PDF
例外設計における大罪
PDF
ChatGPTは思ったほど賢くない
PPTX
Selenium×PostgreSQL15×Grafanaで思い出を保存&分析するプロジェクト(第35回PostgreSQLアンカンファレンス@オンライン...
PDF
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
PPTX
MLOpsはバズワード
PDF
MySQLの文字コード事情 2017版
PDF
(今ちゃんと振り返る) ゴール指向要求分析 入門
PDF
[DL輪読会]Network Deconvolution
PDF
グラフデータの機械学習における特徴表現の設計と学習
PDF
マイクロにしすぎた結果がこれだよ!
PDF
オブジェクト指向できていますか?
PDF
Where狙いのキー、order by狙いのキー
PDF
ぐるなびが活用するElastic Cloud
PPTX
最近のやられアプリを試してみた
PDF
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
Scala 初心者が米田の補題を Scala で考えてみた
PPTX
私がなぜZscalerに?
RSA暗号運用でやってはいけない n のこと #ssmjp
その ionice、ほんとに効いてますか?
例外設計における大罪
ChatGPTは思ったほど賢くない
Selenium×PostgreSQL15×Grafanaで思い出を保存&分析するプロジェクト(第35回PostgreSQLアンカンファレンス@オンライン...
インテルMEの秘密 - チップセットに隠されたコードと、それが一体何をするかを見出す方法 - by イゴール・スコチンスキー - Igor Skochinsky
MLOpsはバズワード
MySQLの文字コード事情 2017版
(今ちゃんと振り返る) ゴール指向要求分析 入門
[DL輪読会]Network Deconvolution
グラフデータの機械学習における特徴表現の設計と学習
マイクロにしすぎた結果がこれだよ!
オブジェクト指向できていますか?
Where狙いのキー、order by狙いのキー
ぐるなびが活用するElastic Cloud
最近のやられアプリを試してみた
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
Dockerfile を書くためのベストプラクティス解説編
Scala 初心者が米田の補題を Scala で考えてみた
私がなぜZscalerに?
Ad

Viewers also liked (20)

ODP
Bhyve Internals
ODP
Bhyve code reading
PDF
BHyVe: The BSD Hypervisor
PDF
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
PPTX
Seastar in 歌舞伎座.tech#8「C++初心者会」
PDF
Free bsd jail入門
ODP
Two iconvs
PPT
MHAを検証して導入した話
PDF
MySQL 5.7が魅せる新しい運用の形
PDF
2章 Linuxカーネル - メモリ管理1
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
PDF
Kubernetesを触ってみた
PPS
Secondthoughts
PPT
Smooth blends: How to add live online training to the e-learning mix
PPTX
Total learning: Communities - Learning through Knowledge Sharing
KEY
An idea of bios emulation on b hy ve
PDF
รายงานคู่มือการใช้งาน
PPTX
Which Customers are You Building the Right Product For PCA9
PPTX
Online presentation sharing with Slideshare
PDF
Bridge Detailed Construction
Bhyve Internals
Bhyve code reading
BHyVe: The BSD Hypervisor
BHyVeでOSvを起動したい
〜BIOSがなくてもこの先生きのこるには〜
Seastar in 歌舞伎座.tech#8「C++初心者会」
Free bsd jail入門
Two iconvs
MHAを検証して導入した話
MySQL 5.7が魅せる新しい運用の形
2章 Linuxカーネル - メモリ管理1
0章 Linuxカーネルを読む前に最低限知っておくべきこと
Kubernetesを触ってみた
Secondthoughts
Smooth blends: How to add live online training to the e-learning mix
Total learning: Communities - Learning through Knowledge Sharing
An idea of bios emulation on b hy ve
รายงานคู่มือการใช้งาน
Which Customers are You Building the Right Product For PCA9
Online presentation sharing with Slideshare
Bridge Detailed Construction
Ad

Similar to BHyVeってなんや (20)

PDF
Unsafe Nested Virtualization on Intel CPU
PPTX
勉強会0614 vagrant
PDF
コンテナ型仮想化とはなんだったのか
KEY
物理マシンをケチる技術
PPT
PDF
UEFI時代のブートローダ
PDF
コンテナ今昔物語_2021_12_22
PDF
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
PDF
Lxc cf201207-presen
PDF
ソフトウェア工学2023 06 コンテナ仮想化
PDF
Eucalyptus on OpenStack
PDF
OpenIndiana+KVMによる仮想マシン
PDF
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
PDF
NetBSD on Google Compute Engine
PDF
Osc2009 Do Xen Hara
PDF
VIOPS04: Intel VT ~仮想化を支える基礎技術~
KEY
軽快なBHyVe
PDF
OSC 2011 Hokkaido 自宅SAN友の会(後半)
PDF
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
PDF
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)
Unsafe Nested Virtualization on Intel CPU
勉強会0614 vagrant
コンテナ型仮想化とはなんだったのか
物理マシンをケチる技術
UEFI時代のブートローダ
コンテナ今昔物語_2021_12_22
Backdoor!! vmware-tools と 統合サービスに見るハイパーバイザの呼び出し方
Lxc cf201207-presen
ソフトウェア工学2023 06 コンテナ仮想化
Eucalyptus on OpenStack
OpenIndiana+KVMによる仮想マシン
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSD on Google Compute Engine
Osc2009 Do Xen Hara
VIOPS04: Intel VT ~仮想化を支える基礎技術~
軽快なBHyVe
OSC 2011 Hokkaido 自宅SAN友の会(後半)
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
エンジニアなら知っておきたい「仮想マシン」のしくみ (BPStudy38)

More from Takuya ASADA (20)

PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
PDF
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
PDF
ヤマノススメ〜秋山郷 de ハッカソン〜
PDF
OSvのご紹介 in 
Java 8 HotSpot meeting
PDF
OSvパンフレット v3
PDF
OSvのご紹介 in OSC2014 Tokyo/Fall
PDF
OSv噺
PDF
OSvの概要と実装
PDF
Linux network stack
PDF
Ethernetの受信処理
PDF
Presentation on your terminal
PDF
僕のIntel nucが起動しないわけがない
PDF
Interrupt Affinityについて
PDF
OSvパンフレット
PDF
「ハイパーバイザの作り方」読書会#2
PDF
「ハイパーバイザの作り方」読書会#1
PDF
10GbE時代のネットワークI/O高速化
PDF
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
PDF
仮想化環境での利用者公平性
PDF
仮想化環境におけるパケットフォワーディング
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
高スループットなサーバアプリケーションの為の新しいフレームワーク
「Seastar」
ヤマノススメ〜秋山郷 de ハッカソン〜
OSvのご紹介 in 
Java 8 HotSpot meeting
OSvパンフレット v3
OSvのご紹介 in OSC2014 Tokyo/Fall
OSv噺
OSvの概要と実装
Linux network stack
Ethernetの受信処理
Presentation on your terminal
僕のIntel nucが起動しないわけがない
Interrupt Affinityについて
OSvパンフレット
「ハイパーバイザの作り方」読書会#2
「ハイパーバイザの作り方」読書会#1
10GbE時代のネットワークI/O高速化
Implements BIOS emulation support for BHyVe: A BSD Hypervisor
仮想化環境での利用者公平性
仮想化環境におけるパケットフォワーディング

Recently uploaded (7)

PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
Working as an OSS Developer at Ruby Association Activity Report 2025
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。

BHyVeってなんや