Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

LXCベースのDockerゲストマシンとホストマシンのディスクI/O性能を比較検証(Bonnie++編)

dotCloudが開発しているLinuxコンテナ型仮想ソフト「Docker」が巷で話題ですね!
これはLXCにストレージドライバとしてunionfsから派生したaufs(CentOSではLVMのThin Provisioning)を組み合わせた所がキモで、つまりファイルシステムの差分管理が出来る特徴があります。
なんだか仕組みを想像する限りディスクI/Oが遅そうな印象ですが、どの程度のものかベンチマークを取りました。

ストレージドライバ

Dockerは元々aufsで作られていたのですが、それはAUFS対応のカーネルを入れる前提です。
これはRedHatディストリビューションへの対応を行う上での大きなハードルでした。
そこで同様にCoW(CopyOnWrite)を実現出来るLVMのThin Provisioningが採用されています。

ドライバがaufsなのかLVMを扱うためのdevicemapperかはdocker infoコマンドで次のように確認できます。

$ sudo docker info
Containers: 232
Images: 297
Driver: devicemapper
 Pool Name: docker-253:0-1700795-pool
 Data file: /var/lib/docker/devicemapper/devicemapper/data
 Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
 Data Space Used: 31616.2 Mb
 Data Space Total: 102400.0 Mb
 Metadata Space Used: 40.6 Mb
 Metadata Space Total: 2048.0 Mb

devicemapperに至る経緯などに関しては次のページが参考になります。

計測方法

bonnie++を用いて計測を4回行い、その結果の平均値を利用しています。

$ wget https://github.com/y-ken/bonnie/raw/master/bonnie++
$ chmod 755 bonnie++
$ ./bonnie++ -u nobody -d /tmp/

なお、bonnie++ で I/O 性能を測定 (Linux/Unix での IO ベンチマークソフト) - drk7jpを参考に、MinTime (0.01)に変更してビルドしたものを利用しました。

計測対象

OpenStack Novaを用いたKVM VPSであるConoHa (CPU2コア メモリ1GB HDD100GB)上のCentOS6.5環境にDockerコンテナを起ち上げて計測しました。docker関連のRPMバージョンは次の通りです。

$ rpm -qa | egrep "^(lxc|docker|kernel|bridge)" | sort
bridge-utils-1.2-10.el6.x86_64
docker-io-0.7.6-2.el6.x86_64
kernel-2.6.32-431.5.1.el6.x86_64
kernel-devel-2.6.32-431.5.1.el6.x86_64
kernel-firmware-2.6.32-431.5.1.el6.noarch
kernel-headers-2.6.32-431.5.1.el6.x86_64
lxc-0.9.0-2.el6.x86_64
lxc-libs-0.9.0-2.el6.x86_64

そしてDockerコンテナで作る環境は実にシンプルで、Dockerfileの中身はFROM centosだけです。この環境にて、3種類の計測を行いました。

計測結果

差分管理する箇所へのI/Oの性能劣化は見られますが、Share Directories via Volumesを用いた場合の性能は健闘しています。

ホスト側性能を100とした場合の相対性能を比較

f:id:yoshi-ken:20140221120442p:plain

対数グラフでの比較

f:id:yoshi-ken:20140221120447p:plain

計測データはGithubのGistに載せたので、そちらをご覧ください。
https://gist.github.com/y-ken/9108610

まとめ

本日は「Docker」が使うファイルシステムベンチマークを行いました。
ディスクI/O性能は相対的に落ちるがデメリットと言うほどでも無く、体感的にも十分実用性の高い速度が出ています。
むしろポータビリティ性の高い再現可能な環境がとても容易に手に入るというメリットの方が大きいと感じました。
immutable infrastructureの一つの形であるDocker、かなり良さそうです!