web-dev-qa-db-ja.com

Dockerコンテナの実行時パフォーマンスコストはいくらですか?

Dockerコンテナの実行時のパフォーマンスコストを包括的に理解したいのですが。 ネットワーキングへの参照が逸話的に〜100μs遅くなっているのを見つけました

また、ランタイムコストが「無視できる」「ゼロに近い」という言及もありましたが、それらのコストとは何かをもっと正確に知りたいのです。理想的には、Dockerがパフォーマンスコストで抽象化しているものと、パフォーマンスコストなしで抽象化されているものを知りたいのです。ネットワーク、CPU、メモリなど.

さらに、抽象化コストがある場合、抽象化コストを回避する方法はありますか。たとえば、Dockerではなく、ディスクを直接マウントできます。

416
Luke Hoersten

ここ は、Felter et alによる「仮想マシンとLinuxコンテナの最新のパフォーマンス比較」というタイトルの2014年IBM研究論文です。それはベアメタル、KVM、そしてDockerコンテナの間の比較を提供します。 一般的な結果として、Dockerはネイティブパフォーマンスとほぼ同じであり、すべてのカテゴリでKVMより高速です。

これに対する例外はDockerのNATです - もしポートマッピング(例えばdocker run -p 8080:8080)を使っているのであれば、以下に示すように、レイテンシのわずかな低下が予想されます。ただし、Dockerコンテナを起動するときに、ホストネットワークスタック(例:docker run --net=Host)を使用できるようになりました。これは、Native列と同じように実行されます(Redis待ち時間の結果が下に表示されます)。

Docker NAT overhead

彼らはまたRedisのような少数の特定のサービスの待ち時間テストを走らせた。 20を超えるクライアントスレッドでは、最大の遅延オーバーヘッドがDocker NAT、次にKVM、次にDocker Host/native間の大まかな結びつきになることがわかります。

docker Redis latency overhead

本当に役に立つ論文だからこそ、他にも図があります。フルアクセスのためにそれをダウンロードしてください。

ディスクIOを見てください。

IO docker vs kvm vs native

今CPUオーバーヘッドを見て:

docker cpu overhead

今メモリのいくつかの例(詳細については論文を読んで、メモリは余分なトリッキーになることができます)

docker memory comparison

375
Hamy

Dockerは仮想化ではありません。その代わりに、さまざまなプロセスの名前空間、デバイスの名前空間などに対するカーネルのサポートに加えて抽象化されています。ある名前空間は本質的に他の名前空間よりも高価でも非効率的でもないので、実際にDockerがパフォーマンスに影響を与えるのは、実際に in それらの名前空間が何であるかの問題です。


コンテナーの名前空間を構成する方法に関するDockerの選択にはコストがかかりますが、それらのコストはすべて直接利益に関連付けられます - それらを放棄することはできますが、その際には関連する利益も放棄します。

  • 階層化されたファイルシステムは高価です - 正確にはそれぞれのコストは異なります(そしてDockerは複数のバックエンドをサポートします)、そしてあなたの使用パターン(複数の大きなディレクトリのマージまたは非常に深いファイルシステムのセットのマージ)は特に高価です。無料ではありません。一方で、Dockerの機能の大部分 - 他のゲストからコピーオンライトでゲストを構築でき、同様にストレージの利点が暗黙的に得られる - は、このコストを支払うことに重点を置いています。
  • DNATは規模が大きくなりますが、ゲストのネットワークをホストとは独立して設定でき、それらの間で必要なポートだけを転送するための便利なインターフェースを持つことができるという利点があります。これを物理インターフェースへのブリッジに置き換えることができますが、ここでも利点を失います。
  • ホストのディストリビューション、libc、および他のライブラリバージョンとは関係なく、最も便利な方法で依存関係をインストールして各ソフトウェアスタックを実行できることは大きな利点ですが、共有ライブラリを複数回ロードする必要がある場合異なる)あなたが期待するだろうコストがあります。

などなど。ネットワークアクセスパターン、メモリの制約など、これらのコストが実際に環境にどの程度影響を与えるかは、一般的な答えを提供するのが難しい項目です。

83
Charles Duffy

ここでは、Twemperfベンチマークツールを使用したDocker based memcached serverHost native memcached serverベンチマーク _接続数5000、接続数20kの場合 https://github.com/Twitter/twemperf

Dockerベースのmemcachedの接続時間のオーバーヘッドは、ネイティブの約2倍の速度で上記のホワイトペーパーと一致しているようです。

Twemperf Docker Memcached

Connection rate: 9817.9 conn/s
Connection time [ms]: avg 341.1 min 73.7 max 396.2 stddev 52.11
Connect time [ms]: avg 55.0 min 1.1 max 103.1 stddev 28.14
Request rate: 83942.7 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 83942.7 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 28.6 min 1.2 max 65.0 stddev 0.01
Response time [ms]: p25 24.0 p50 27.0 p75 29.0
Response time [ms]: p95 58.0 p99 62.0 p999 65.0

Twemperf Centmin Mod Memcached

Connection rate: 11419.3 conn/s
Connection time [ms]: avg 200.5 min 0.6 max 263.2 stddev 73.85
Connect time [ms]: avg 26.2 min 0.0 max 53.5 stddev 14.59
Request rate: 114192.6 req/s (0.0 ms/req)
Request size [B]: avg 129.0 min 129.0 max 129.0 stddev 0.00
Response rate: 114192.6 rsp/s (0.0 ms/rsp)
Response size [B]: avg 8.0 min 8.0 max 8.0 stddev 0.00
Response time [ms]: avg 17.4 min 0.0 max 28.8 stddev 0.01
Response time [ms]: p25 12.0 p50 20.0 p75 23.0
Response time [ms]: p95 28.0 p99 28.0 p999 29.0

これが memtier benchmark toolを使ったベンチマーク です

memtier_benchmark docker Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       16821.99          ---          ---      1.12600      2271.79
Gets      168035.07    159636.00      8399.07      1.12000     23884.00
Totals    184857.06    159636.00      8399.07      1.12100     26155.79

memtier_benchmark Centmin Mod Memcached

4         Threads
50        Connections per thread
10000     Requests per thread
Type        Ops/sec     Hits/sec   Misses/sec      Latency       KB/sec
------------------------------------------------------------------------
Sets       28468.13          ---          ---      0.62300      3844.59
Gets      284368.51    266547.14     17821.36      0.62200     39964.31
Totals    312836.64    266547.14     17821.36      0.62200     43808.90
17
p4guru