仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Dockerのストレージ検証

Dockerコンテナーのデフォルトのストレージは遅いという話をよく聞くので、実際にどれくらい差があるのか調査してみました。Fedora 21でDocker 1.6環境を構築してコンテナーを起動し、コンテナー内でdbenchを実行しました。5/26にFedora 22がリリースされましたが、検証環境の構築をしたのがリリース前だったためFedora 21を使った場合の検証結果です。

Fedora 21はLVM,BTRFS,LVM Thin Provisioning(以下LVM-Thin)モードでパーティションを作り、Dockerコンテナーを起動時に-vでそのディスク上に作ったディレクトリーをマウントしました。

2015-05-28 01:30:42 +00001

実行したコマンドは次の通りです。-vオプションでDockerホスト上の/opt/volumeをコンテナーの/opt/volumeとしてマウントしています。dbenchの作業データを-Dオプションで/opt/volumeに置くように設定しています。

# docker run --net=host --name=first -v /opt/volume:/opt/volume -it docker.io/fedora:latest /bin/bash
# yum install -y dbench && dbench -D /opt/volume 5

Dockerホストでのベンチマーク結果

まずはストレージパーティションの種類ごとの性能を比較するため、Dockerホストでベンチマークをとってみました。次がその結果です。

LVM
Throughput 52.5299 MB/sec
BTRFS
Throughput 37.9817 MB/sec
LVM-Thin
Throughput 52.3901 MB/sec

LVMとLVM-Thinは性能が変わらないようです。それと比べるとちょっとBTRFSはスループット値が低いです。

Dockerデフォルト(UnionFS)の性能

次はDockerで特になにも意識せずにコンテナーを起動した時のベンチマーク結果の比較です。

LVM
Throughput 9.4759 MB/sec
BTRFS
Throughput 32.3827 MB/sec
LVM-Thin
Throughput 8.09645 MB/sec

LVMは遅くなったのに対し、BTRFSは性能があまり変わらないという面白い結果が出ました。

-vでボリュームマウントした場合

最後にディスクをマウントした場合の結果です。-vについてはこちら

LVM
Throughput 50.6346 MB/sec
BTRFS
Throughput 37.5545 MB/sec
LVM-Thin
Throughput 47.9169 MB/sec

LVMについては-vでマウントしたディスクの読み書きはネイティブの読み書きとほぼ変わらないという結果になりました。BTRFSは-v指定しない場合と比べると、ネイティブと変わらない性能が出ているのがわかりました。

というわけで、Dockerにおける-vオプションの優位性が確認できました。ストレージ読み書きの性能が重要視されるサービスを動かす場合は-vは必須と言えそうです。