Dockerコンテナの実行時パフォーマンスコストを包括的に理解したいのですが、参考文献を見つけました。ネットワークは100µsほど遅くなると言われている。
実行時のコストが「無視できる」とか「ゼロに近い」という記述も見つかりましたが、それらのコストがどの程度なのかもっと正確に知りたいです。理想的には、Docker がパフォーマンス コストをかけて抽象化しているものと、パフォーマンス コストをかけずに抽象化しているものを知りたいです。ネットワーク、CPU、メモリなどです。
さらに、抽象化コストがある場合、その抽象化コストを回避する方法はありますか。たとえば、Docker でディスクを仮想的にマウントするのではなく、直接マウントできるかもしれません。
ベストアンサー1
2014年のIBMの優れた研究論文「仮想マシンと Linux コンテナの最新のパフォーマンス比較Felter らによる「」では、ベアメタル、KVM、Docker コンテナの比較が提供されています。一般的な結果は、Docker はネイティブ パフォーマンスとほぼ同じで、すべてのカテゴリで KVM よりも高速であるということです。
例外は Docker の NAT です。ポート マッピング (例: docker run -p 8080:8080
) を使用する場合は、以下に示すように、レイテンシがわずかに低下することが予想されます。ただし、docker run --net=host
Docker コンテナを起動するときにホスト ネットワーク スタック (例: ) を使用できるようになり、Native 列と同じように動作します (下の Redis レイテンシの結果に示されているように)。
また、Redis などのいくつかの特定のサービスでレイテンシ テストも実行しました。クライアント スレッドが 20 を超えると、レイテンシ オーバーヘッドが最も高くなるのは Docker NAT、次に KVM、そして Docker ホスト/ネイティブがほぼ同率であることがわかります。
本当に役に立つ論文なので、他の図もいくつか載せておきます。フルアクセスするにはダウンロードしてください。
ディスク I/O を見てみましょう:
CPU オーバーヘッドを見てみましょう:
次に、メモリの例をいくつか示します (詳細については論文を読んでください。メモリは非常に扱いにくい場合があります)。