我想全面了解Docker容器的运行时性能成本。我发现关于网络的参考轶事大约慢100µs
我还发现对运行时成本的引用是“可以忽略”和“接近于零”,但我想更准确地知道这些成本是什么。理想情况下,我想知道Docker以性能成本抽象了什么,以及在没有性能成本的情况下抽象了什么。网络、CPU、内存等
此外,如果存在抽象成本,是否有规避抽象成本的方法。例如,也许我可以直接挂载磁盘,而不是虚拟地在Docker中挂载
Felter等人在2014年发表的一篇优秀的IBM研究论文《虚拟机和Linux容器的更新性能比较》中对裸机、KVM和Docker容器进行了比较。总体结果是:Docker几乎与本机性能相同,在每一个类别中都比KVM更快。
例外情况是Docker的NAT — 如果您使用端口映射(例如,docker run-p8080:8080),那么您可以预期延迟会受到轻微影响,如下所示。但是,您现在可以在启动docker容器时使用主机网络堆栈(例如,docker run--net=host),该容器的执行方式与本机列相同(如下面的Redis latency results所示)
他们还对一些特定的服务进行了延迟测试,比如Redis。您可以看到,在20个客户机线程以上,延迟开销最高的是Docker NAT,然后是KVM,然后是Docker主机/本机之间的粗略连接
仅仅因为这是一篇非常有用的论文,这里还有一些其他的数据。请下载以获得完全访问权限
查看磁盘I/O:
现在来看CPU开销:
下面是一些关于记忆的例子(阅读本文了解细节,记忆可能会特别棘手):