我想全面了解一个 Docker 容器的运行时性能成本。我发现对 网络的引用据说慢了约 100µs 。
我还发现对运行时成本的引用“可以忽略不计”和“接近于零”,但我想更准确地知道这些成本是什么。理想情况下,我想知道 Docker 以性能成本抽象了什么,以及在没有性能成本的情况下抽象的东西。网络、CPU、内存等
此外,如果有抽象成本,有没有办法绕过抽象成本。例如,也许我可以直接挂载磁盘而不是在 Docker 中虚拟挂载。
原文由 Luke Hoersten 发布,翻译遵循 CC BY-SA 4.0 许可协议
Felter 等人在 2014 年发表的一篇出色的 IBM 研究论文“ 虚拟机和 Linux 容器的更新性能比较”。提供了裸机、KVM 和 Docker 容器之间的比较。总体结果是: Docker 几乎与原生性能相同,并且在每个类别中都比 KVM 更快。
Docker 的 NAT 是个例外——如果您使用端口映射(例如
docker run -p 8080:8080
),那么您可以预期延迟会受到轻微影响,如下所示。但是,您现在可以在启动 Docker 容器时使用主机网络堆栈(例如docker run --net=host
),这将与 Native 列相同(如下面的 Redis 延迟结果所示)。他们还对一些特定服务(例如 Redis)进行了延迟测试。您可以看到超过 20 个客户端线程,延迟开销最高的是 Docker NAT,然后是 KVM,然后是 Docker 主机/本机之间的粗略联系。
仅仅因为它是一篇非常有用的论文,这里有一些其他的数字。请下载它以获得完全访问权限。
看一下磁盘 I/O:
现在查看 CPU 开销:
现在一些内存示例(阅读论文了解详细信息,内存可能特别棘手):