Dockerコンテナのランタイムパフォーマンスコストはいくらですか? 質問する

Dockerコンテナのランタイムパフォーマンスコストはいくらですか? 質問する

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=hostDocker コンテナを起動するときにホスト ネットワーク スタック (例: ) を使用できるようになり、Native 列と同じように動作します (下の Redis レイテンシの結果に示されているように)。

Docker NAT オーバーヘッド

また、Redis などのいくつかの特定のサービスでレイテンシ テストも実行しました。クライアント スレッドが 20 を超えると、レイテンシ オーバーヘッドが最も高くなるのは Docker NAT、次に KVM、そして Docker ホスト/ネイティブがほぼ同率であることがわかります。

Docker Redis のレイテンシ オーバーヘッド

本当に役に立つ論文なので、他の図もいくつか載せておきます。フルアクセスするにはダウンロードしてください。

ディスク I/O を見てみましょう:

Docker 対 KVM 対 ネイティブ I/O パフォーマンス

CPU オーバーヘッドを見てみましょう:

Docker CPU オーバーヘッド

次に、メモリの例をいくつか示します (詳細については論文を読んでください。メモリは非常に扱いにくい場合があります)。

Docker メモリの比較

おすすめ記事