我想全面了解Docker容器的运行时性能成本.我找到了networking anecdotally being ~100µs slower条参考文献.
我还发现运行时成本是"可忽略的"和"接近于零",但我想更准确地知道这些成本是什么.理想情况下,我想知道Docker在用性能成本抽象什么,以及在没有性能成本的情况下抽象什么.网络、CPU、内存等.
此外,如果存在抽象成本,有没有办法规避抽象成本.例如,也许我可以直接挂载磁盘,而不是虚拟地在Docker中挂载.
我想全面了解Docker容器的运行时性能成本.我找到了networking anecdotally being ~100µs slower条参考文献.
我还发现运行时成本是"可忽略的"和"接近于零",但我想更准确地知道这些成本是什么.理想情况下,我想知道Docker在用性能成本抽象什么,以及在没有性能成本的情况下抽象什么.网络、CPU、内存等.
此外,如果存在抽象成本,有没有办法规避抽象成本.例如,也许我可以直接挂载磁盘,而不是虚拟地在Docker中挂载.
An excellent 2014 IBM research paper “An Updated Performance Comparison of Virtual Machines and Linux Containers” by Felter et al. provides a comparison between bare metal, KVM, and Docker containers. The general result is: Docker is nearly identical to native performance and faster than KVM in every category.
例外是Docker的NAT — 如果您使用端口映射(例如docker run -p 8080:8080
),那么您可以预期延迟会受到轻微影响,如下所示.但是,您现在可以在启动Docker容器时使用主机网络堆栈(例如docker run --net=host
),它的性能与本机列相同(如下面的Redis latency results所示).
他们还对一些特定的服务进行了延迟测试,比如Redis.您可以看到,在20个客户机线程以上,延迟开销最高的是Docker NAT,然后是KVM,然后是Docker主机/本机之间的粗略连接.
仅仅因为这是一篇非常有用的论文,这里还有一些其他的数据.请下载以获得完全访问权限.
看看磁盘I/O:
现在来看CPU开销:
下面是一些关于记忆的例子(阅读本文了解细节,记忆可能非常棘手):