自分も xhyve に挑戦した


2016-03-27 追記:

Docker 社も xhyve を採用し始める

Windows版とMac版のDockerアプリが限定ベータで登場

この記事によれば、 Docker for Mac ベータ版として、 xhyve を Docker Host に使ったものが公開されているようだ。

このベータ版が正式なものとなるのが非常に楽しみだ。

(新たなコードベースで書かれたものなのか、 Docker 社が新たに開発したドライバーなのか、私はまだ検証していない。近々検証する予定。)

2016-03-19 追記:

Homebrew 経由でインストールするのであれば、この記事を書いた時よりも、インストールするのが楽になっている。
docker-machine-driver-xhyve というパッケージが登録されていて、
とくにこの記事で書いているような変更をしなくとも、正常に扱えている。 (少なくとも私の環境では。)

boot2docker を直接使うのではなく docker-machine コマンド経由での操作も可能になっている。
(VirtualBox と同じで、建てたホストの中身自体は boot2docker 。)

$ brew install docker-machine-driver-xhyve
$ docker-machine create --driver=xhyve MACHINE_NAME

もちろん、現時点では Docker 社が公式に対応を謳っているものではないので、その点については留意しておく必要はあるだろう。

この docker-machine-driver-xhyve を作ったのは zchee さんで、
詳しい状況は Qiita 中の記事で読むことができる。

OS XのネイティブHypervisorを使うxhyveと、ネイティブDockerを立ち上げるdocker-machine-driver-xhyveを作った話

経緯

xhyve を試してみた という ひでかずさん の記事を元に、
自分も boot2docker-xhyvecoreos-xhyve に挑戦してみた。

最近 OS X を El Capitan にアップデートしたついでに、いろいろ環境を試してみたかったので。

その時のメモをこの記事に残しておく。

xhyve とは

xhyve

The xhyve hypervisor is a port of bhyve to OS X. It is built on top of Hypervisor.framework in OS X 10.10 Yosemite and higher, runs entirely in userspace, and has no other dependencies. It can run FreeBSD and vanilla Linux distributions and may gain support for other guest operating systems in the future.

FreeBSD とか ふつーの Linux を動かせる OS X 用のハイパーバイザ、らしい。

使った OS X のバージョン

OS X El Capitan 10.11

下準備

xhyve 自体のインストールは Homebrew を利用することにした。

$ brew install xhyve

coreos-xhyve

$ git clone https://github.com/coreos/coreos-xhyve.git
$ cd coreos-hyve
$ ./coreos-xhyve-fetch
$ sudo ./coreos-xhyve-run

これで立ち上がる。
終了時は CoreOS 上からシャットダウン用のコマンドを入力すれば OK

$ sudo shutdown -h now

boot2docker-xhyve

$ git clone https://github.com/ailispaw/boot2docker-xhyve
$ cd boot2docker-xhyve
$ make

SSH で接続するには make ssh 。
終了時はターミナルの別セッションから make halt とコマンドを打てば OK
もちろん両方とも Makefile の存在しているこのリポジトリのディレクトリから入力する必要がある。

VirtualBox と同時に使うと危険

ひでかずさんの元記事にも ここ にも書かれている通り、
現状では VirtualBox と同時に使うと Kernel Panic が起きるそうな。

coreos-xhyve のログレベル

coreos-xhyve はデフォルトのログレベルが指定されていない。
そのため debug や notice のレベルのログも出力されてしまう。

開発中なのでその挙動は正解だとは思う。
しかしもし、これを抑制したい場合、 CMDLINE 変数に loglevel を追加する。
↓ はその diff 。 loglevel=4 を追加したのみ。

diff --git a/coreos-xhyve-run b/coreos-xhyve-run
index dc0ead8..60e8c7d 100755
--- a/coreos-xhyve-run
+++ b/coreos-xhyve-run
@@ -34,7 +34,7 @@ VMLINUZ=${PAYLOAD}.vmlinuz
 INITRD=${PAYLOAD}_image.cpio.gz

 CMDLINE="earlyprintk=serial console=ttyS0 ${SSHKEY} coreos.autologin"
-CMDLINE="${CMDLINE} cloud-config-url=${CLOUD_CONFIG}"
+CMDLINE="${CMDLINE} loglevel=4 cloud-config-url=${CLOUD_CONFIG}"

 MEMORY=${MEMORY:-1024}
 MEM="-m ${MEMORY}M"

ログレベルの数値については https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/LoggingErrorsAndWarnings.html

メモリ使用量の比較

xhyve はかなり軽量なはずだが、実際にどれくらい削減されるのか、とても雑にチェックしてみた。

2 種類の boot2docker

2 種類で比較することにした。

  • xhyve を利用する上記の boot2docker
  • Virtualbox を利用する boot2docker

なお、 boot2docker は非推奨になり、今は Docker Machine を使えと Docker が公式に言っている。

比較方法

boot2docker を立ち上げて次のように Docker 上でさらに ubuntu を動かしてみる。

$ docker pull -t ubuntu:latest
$ docker run -it ubuntu:latest

そして OS X のアクティビティモニタでそれぞれのメモリ使用量を調べる

メモリ使用量の画像

xhyve

Virtualbox

↑だけでは、ベンチマークとして全くフェアではないが、自分なりに満足してるので良しとした。
xhyve すげー。

体感

xhyve の動作がやたら早かったような "気がする"