Mutagen-based cachingによる速度改善を測定したmmj blog

エンジニア 上田
2020年06月11日

Docker for Macには以前からvolumeをホストにマウントした際にファイル書き込みが遅くなる問題があった。Docker for Mac Edgeにてを解決するアップデートが来たのでどれほど改善したのか実際に自分のパソコン上で試してみた。

TL;DR;

本記事での測定方法では64%ほど改善。(4.5s -> 2.9s)

私が関わっている実際のプロジェクトでは83.4sから61.4sにビルド時間が短縮して12sほどの改善が見られた。

前提

ホストマシン

方法

ホストにマウントしたvolumeに対して

for i in $(seq 1 1000); do dd if=/dev/urandom of=random_file_$i bs=10000 count=1; done

ddを使って1000回ほど書き込みをする。
Mutagen-based cachingを使った場合と使っていない場合の両方で10回ほど計測して速度を比較する。
比較する方法は3つ用意した。

方法 説明
not mount ホストにマウントしない状態でのvolume化、ネイティヴと同様の速度が出る
volumed ホストにマウント
cached ホストにマウントする際にcachedフラグを使用

実際に計測に使用したファイルはgithub上に公開した。
https://github.com/ginzro/mutagen-speed-test

結果

100kbのファイルを100回書き込み

方法 平均(秒)
not mount 1.5
volumed 1.7
cached 1.7
not mount(mutagen) 1.5
volumed(mutagen) 1.6
cached(mutagen) 1.6

10kbのファイルを1000回書き込み

方法 平均(秒)
not mount 2.4
volumed 4.5
delegated 4.5
not mount(mutagen) 2.9
volumed(mutagen) 2.9
cached(mutagen) 3

感想

1000回ほどホストとVMをやり取りして初めて差が出てきました。

詳細は載せられませんが実際にホストに対してマウントしているプロジェクトで使ってみたところ12sほどのビルド時間の短縮があったので使っていこうと思います。

ただ、Mutagen-cased caching使う際に指定したディレクトリ以下のファイルが変更されるたびに常にバックグラウンドでファイルの同期が走っている上、これがたまに失敗します…

基本的にはvolumeを使わないようにして安定性を犠牲にしてホストにマウントするという基本姿勢は変わりませんねー。もちろんedge版の話なのでstableにリリースされるとまた変わるかもしれません。

参考

https://github.com/docker/for-mac/issues/2707#issuecomment-631641183
https://qiita.com/nanasess/items/16ab9274c34bdc34e567

2020年06月11日

エンジニア 上田 |

« »
このページのトップへ