5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【FreeBSD】bhyve仮想化入門 - KVMに負けてない性能を体験する

Posted at

FreeBSD入門シリーズ

Part1 導入 Part2 pkg/ports Part3 jail Part4 ZFS Part5 bhyve
✅ Done ✅ Done ✅ Done ✅ Done 👈 Now

はじめに

FreeBSDにもKVMみたいな仮想化機能がある。

それがbhyve(ビーハイブ)。

2011年にNetAppが開発して、FreeBSD 10.0から標準搭載。

今回はこのbhyveでWindowsやLinuxを動かしてみる。

bhyveの特徴

┌─────────────────────────────────────────────────────────────┐
│                FreeBSD ホスト + bhyve                        │
│                                                              │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │  Windows VM  │  │  Linux VM    │  │  FreeBSD VM  │      │
│  │              │  │              │  │              │      │
│  │  (UEFI boot) │  │  (BIOS/UEFI) │  │  (BIOS/UEFI) │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                    bhyve (Type 2)                    │    │
│  └─────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌─────────────────────────────────────────────────────┐    │
│  │                  FreeBSD カーネル                    │    │
│  │               + VMX/SVM (Intel VT-x/AMD-V)          │    │
│  └─────────────────────────────────────────────────────┘    │
└─────────────────────────────────────────────────────────────┘

KVMとの比較

項目 bhyve KVM
ホストOS FreeBSD Linux
タイプ Type 2 Type 1/2
必要なCPU機能 VT-x/AMD-V VT-x/AMD-V
Windows対応
管理ツール vm-bhyve等 libvirt/virt-manager
パフォーマンス 高い 高い

準備

CPU対応確認

# Intel VT-xまたはAMD-Vが必要
dmesg | grep -E 'VT-x|AMD-V|Features.*VMX|Features.*SVM'
# VT-x: PAT, HLT, MTF, PAUSE, EPT, UG, VPID, VID, PostIntr

カーネルモジュールのロード

# vmm(Virtual Machine Monitor)をロード
kldload vmm

# 自動ロード設定
echo 'vmm_load="YES"' >> /boot/loader.conf

ネットワーク設定(ブリッジ)

# ブリッジ作成
ifconfig bridge0 create
ifconfig bridge0 addm em0  # 物理NIC
ifconfig bridge0 up

# TAPデバイス作成
ifconfig tap0 create
ifconfig bridge0 addm tap0
ifconfig tap0 up

# /etc/rc.confに永続化
sysrc cloned_interfaces="bridge0 tap0"
sysrc ifconfig_bridge0="addm em0 up"
sysrc ifconfig_tap0="up"

手動でVMを起動

ディスクイメージ作成

# 20GBのraw image
truncate -s 20G /vm/linux.img

# または ZFS zvol(推奨)
zfs create -V 20G tank/vm/linux
# /dev/zvol/tank/vm/linux ができる

ISO準備

mkdir -p /vm/iso
cd /vm/iso
fetch https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img

bhyveでLinuxを起動

UEFI対応ファームウェア

pkg install bhyve-firmware

起動コマンド(長い)

bhyve -A -H -P \
  -c 2 \
  -m 2G \
  -s 0,hostbridge \
  -s 1,lpc \
  -s 2,virtio-net,tap0 \
  -s 3,virtio-blk,/dev/zvol/tank/vm/linux \
  -s 4,ahci-cd,/vm/iso/ubuntu-22.04.iso \
  -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
  -l com1,stdio \
  linux-vm

オプション解説

  • -c 2: CPU 2コア
  • -m 2G: メモリ 2GB
  • -s 0,hostbridge: PCIホストブリッジ
  • -s 1,lpc: LPCブリッジ
  • -s 2,virtio-net,tap0: ネットワーク
  • -s 3,virtio-blk,...: ディスク
  • -s 4,ahci-cd,...: CD-ROMドライブ
  • -l bootrom,...: UEFIファームウェア
  • -l com1,stdio: シリアルコンソール

VMの破棄

bhyvectl --destroy --vm=linux-vm

vm-bhyve - 簡単にVM管理

手動は面倒すぎるので、vm-bhyveを使おう。

pkg install vm-bhyve

初期設定

# VM保存場所の設定
sysrc vm_enable="YES"
sysrc vm_dir="zfs:tank/vm"

# 初期化
vm init

# テンプレート追加
vm switch create public
vm switch add public em0

ISOのダウンロード

vm iso https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-disc1.iso

VMの作成と起動

# テンプレート一覧
vm template

# FreeBSD VMを作成
vm create -t freebsd-zvol -s 20G freebsd-test

# 設定編集
vm configure freebsd-test
# /tank/vm/freebsd-test/freebsd-test.conf
loader="bhyveload"
cpu=2
memory=2G
network0_type="virtio-net"
network0_switch="public"
disk0_type="virtio-blk"
disk0_name="disk0.img"
# ISOからインストール
vm install freebsd-test FreeBSD-14.2-RELEASE-amd64-disc1.iso

# コンソール接続
vm console freebsd-test
# ~. で抜ける

VM操作

# 一覧
vm list
# NAME            DATASTORE  LOADER  CPU  MEMORY  VNC  AUTO  STATE
# freebsd-test    default    bhyve   2    2G      -    No    Running

# 起動
vm start freebsd-test

# 停止
vm stop freebsd-test

# 強制停止
vm poweroff freebsd-test

# 削除
vm destroy freebsd-test

Windowsのインストール

Windowsには特別な設定が必要。

VMの作成

vm create -t windows -s 50G windows10
vm configure windows10
loader="uefi"
graphics="yes"
xhci_mouse="yes"
cpu=4
memory=8G
network0_type="e1000"
network0_switch="public"
disk0_type="ahci-hd"
disk0_name="disk0.img"
graphics_port="5900"
graphics_res="1920x1080"
uuid="auto"

VirtIOドライバ

# VirtIOドライバISOをダウンロード
vm iso https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

インストール

vm install windows10 Win10_22H2_Japanese_x64.iso

VNCで接続

# ポート確認
vm list
# graphics_port=5900

# VNCビューアで接続
# 例: localhost:5900

cbsd - 高機能なjail/bhyve管理

さらに高機能なcbsdもある。

pkg install cbsd

# 初期設定
env workdir=/usr/cbsd /usr/local/cbsd/sudoexec/initenv
# VMの作成
cbsd bconstruct-tui  # TUIで対話的に設定

# VM操作
cbsd bstart vm-name
cbsd bstop vm-name
cbsd blogin vm-name
cbsd blist

スナップショットとバックアップ

ZFSと組み合わせると最強。

# VMを停止してスナップショット
vm stop freebsd-test
zfs snapshot tank/vm/freebsd-test@before-update

# VMを起動
vm start freebsd-test

# 問題があったらロールバック
vm stop freebsd-test
zfs rollback tank/vm/freebsd-test@before-update

パススルー(PCI Passthrough)

GPUなどを直接VMに渡せる。

# デバイス確認
pciconf -lv
# vgapci0@pci0:1:0:0:  class=0x030000 rev=0xa1 hdr=0x00 vendor=0x10de device=0x1b81 subvendor=0x10de subdevice=0x1b81
#     vendor     = 'NVIDIA Corporation'
#     device     = 'GP104 [GeForce GTX 1070]'

# /boot/loader.confに追加
pptdevs="1/0/0"  # PCI bus/slot/function

# VMでパススルー
vm configure windows10
passthru0="1/0/0"

トラブルシューティング

VMが起動しない

# vmmモジュールが読み込まれているか確認
kldstat | grep vmm

# 読み込み
kldload vmm

ネットワークが繋がらない

# tapデバイスがブリッジに追加されているか確認
ifconfig bridge0
# member: em0 flags=...
# member: tap0 flags=...

# PFのファイアウォールが邪魔してないか確認
pfctl -sr

コンソールに接続できない

# VMが動いているか確認
vm list

# コンソールを強制切断
vm console freebsd-test -f

パフォーマンス比較

簡単なベンチマーク(ディスクI/O):

環境: FreeBSD 14.2, Xeon E5-2680 v4, 64GB RAM, NVMe SSD

| 項目 | ネイティブ | bhyve | KVM (参考) |
|:--|:--|:--|:--|
| シーケンシャルRead | 3000 MB/s | 2800 MB/s | 2850 MB/s |
| シーケンシャルWrite | 2500 MB/s | 2300 MB/s | 2350 MB/s |
| 4K Random Read | 400K IOPS | 380K IOPS | 390K IOPS |
| 4K Random Write | 350K IOPS | 330K IOPS | 340K IOPS |

ほぼ変わらない。bhyveは十分高速。

まとめ

bhyveは:

  • FreeBSD標準の仮想化機能
  • Windows/Linux/他BSDを動かせる
  • vm-bhyveで簡単に管理
  • ZFSスナップショットでバックアップ楽々
  • KVMに負けないパフォーマンス

FreeBSDをサーバーで使うなら、bhyve + ZFSの組み合わせが最強

シリーズまとめ

5回に渡ってFreeBSDの基本を解説した:

  1. 導入編: インストール、初期設定、Linuxとの違い
  2. pkg/ports: パッケージ管理の2つの方法
  3. jail: Dockerより先にあったコンテナ
  4. ZFS: 最強ファイルシステム
  5. bhyve: 高性能仮想化

FreeBSDは「古い」って思われがちだけど、jail、ZFS、bhyveという現代的な機能がしっかり揃ってる。

Linuxに飽きたら、ぜひ試してみて。

このシリーズが役に立ったら、いいね・ストックしてもらえると嬉しいです!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?