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に至る経緯などに関しては次のページが参考になります。
- Docker ストレージドライバによる RHEL/CentOS 対応について - Shin x blog
http://www.1x1.jp/blog/2013/12/storage-driver-on-docker07.html - Red Hat and Docker Collaborate | Docker Blog
http://blog.docker.io/2013/09/red-hat-and-docker-collaborate/
計測方法
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種類の計測を行いました。
Guest local
Guestのローカルディレクトリに対するベンチマーク結果Guest shared
ホスト側のディレクトリをGuestのローカルファイルシステムに重ねた(マウントでは無い)ディレクトリのベンチマーク結果
参考記事:Dockerでコンテナからホストのディレクトリをマウントする - cpw's diaryHost
ホスト側のローカルディレクトリに対するベンチマーク結果
計測結果
差分管理する箇所へのI/Oの性能劣化は見られますが、Share Directories via Volumesを用いた場合の性能は健闘しています。
ホスト側性能を100とした場合の相対性能を比較
対数グラフでの比較
計測データはGithubのGistに載せたので、そちらをご覧ください。
https://gist.github.com/y-ken/9108610
まとめ
本日は「Docker」が使うファイルシステムのベンチマークを行いました。
ディスクI/O性能は相対的に落ちるがデメリットと言うほどでも無く、体感的にも十分実用性の高い速度が出ています。
むしろポータビリティ性の高い再現可能な環境がとても容易に手に入るというメリットの方が大きいと感じました。
immutable infrastructureの一つの形であるDocker、かなり良さそうです!