re:annkara

日々学んだことを書き留めておく。

DockerのRedisと非コンテナRedisのベンチマーク比較

これはなに??

Kubernetes上で稼働するRedisの性能が思った以上に出ないと言われ、Redis単体のベンチマークやアプリケーションのパフォーマンステストを実施している。
その際にふと、Dockerのコンテナ上で稼働するRedisと非コンテナプロセスのRedisではどれくらい性能差がでるのか気になったので、自宅のPCを利用してベンチマークを取得し比較してみた。
ローカル環境かつ、結果もざっくり把握しているのであまり正確ではない。

実行環境
  • 実行ホスト
    • カーネル : Linux version 4.17.11-arch1
    • CPU
      • Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
      • 物理コア数 2 仮想コア数 4
  • Docker
    • バージョン 18.05.0-ce
  • Redis
    • バージョン 4.0.11
    • Docker Image redis:4.0.11
実行方法
  • Docker
    • ブリッジネットワーク(デフォルト)
      • docker run --rm -p 6379:6379 redis:4.0.11
    • ホストネットワーク
      • docker run --rm -p 6379:6379 --net=host redis:4.0.11
  • 非コンテナ
    • make実行後、srcフォルダで./redis-serverを実行。
計測方法

redis-benchmarkを利用して計測した。
redisのプロセスとredis-benchmarkのプロセスの実行CPUをあまり意識せずに計測してしまったので、本当ならCPUを指定して実行するべきだったかも。
3回ずつbenchmarkツールを実行して、ざっくり振れ幅が少ないことを確認して計測を終えている。

比較結果

実行結果はここにおいている。
最初、デフォルトのブリッジネットワークで実行していたのだけど、非コンテナのベンチマーク結果と比較して1/3程度の結果になっていた。
ある程度の性能差は出てくるとは思っていたのだけど、単なるプロセスにすぎないコンテナでそんなにも差が出てくるのはおかしいと思い、試しにホストネットワークモードでも計測してみた。
結果、なんとなくこんなもんかなーくらいの性能差になった。

感想

Dockerのデフォルトブリッジを介すことによる性能劣化がこんなにも生じるのか、ちょっと自身が持てないがNATによる影響は少なからずあるのだと思う。
今回はRedisでやってみたけど、シンプルなアプリケーションで試してみたらよりわかりやすくなるかもしれない。
仕事でRedis周りを利用したアプリケーションの運用をすることになりそうなので、併せてRedis周りの知識を身に着けていきたい。

ざっくりと以上。