linux - Docker 容器的运行时性能成本是多少?

标签 linux docker performance virtual-machine containerd

我想全面了解 Docker 容器的运行时性能成本。我找到了对 networking anecdotally being ~100µs slower 的引用.

我还发现运行时成本“可以忽略不计”和“接近于零”,但我想更准确地知道这些成本是多少。理想情况下,我想知道 Docker 以性能成本抽象了什么,以及在没有性能成本的情况下抽象的东西。网络、CPU、内存等

此外,如果有抽象成本,有没有办法绕过抽象成本。例如,也许我可以直接挂载磁盘而不是在 Docker 中虚拟挂载。

最佳答案

IBM 2014 年优秀研究论文“An Updated Performance Comparison of Virtual Machines and Linux Containers ”由费尔特等人撰写。提供了裸机、KVM 和 Docker 容器之间的比较。总体结果是:Docker 的性能几乎与原生性能相同,并且在每个类别中都比 KVM 更快。

Docker 的 NAT 是个异常(exception) — 如果您使用端口映射(例如,docker run -p 8080:8080),那么您可以预期延迟会受到轻微影响,如下所示。但是,您现在可以在启动 Docker 容器时使用主机网络堆栈(例如,docker run --net=host),这将与 Native 列相同(如 Redis 延迟结果所示)降低)。

Docker NAT overhead

他们还对一些特定服务(例如 Redis)进行了延迟测试。您可以看到超过 20 个客户端线程,延迟开销最高的是 Docker NAT,然后是 KVM,然后是 Docker 主机/ native 之间的粗略联系。

Docker Redis Latency Overhead

仅仅因为它是一篇非常有用的论文,这里有一些其他的数字。请下载它以获得完全访问权限。

看看磁盘 I/O:

Docker vs. KVM vs. Native I/O Performance

现在查看 CPU 开销:

Docker CPU Overhead

现在是一些内存的例子(阅读论文了解详细信息,内存可能特别棘手):

Docker Memory Comparison

关于linux - Docker 容器的运行时性能成本是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21889053/

相关文章:

java - 有没有更快的方法来比较 Java 中的两个 Int 数组?

linux - pthread 中的参数传递错误

security - 我可以在不使用 --privileged 标志的情况下运行 Docker-in-Docker

spring - Keycloak:作为 docker 服务运行时无效的 token 颁发者

sql - 如何衡量 Informix 上的查询性能?

java - ThreadLocalRandom与共享静态Random实例性能对比测试

c++ - 如何在 Linux 上为 C++ 应用程序分配 "huge"页面

python - 从非常大的文件中删除稀有词

linux - 用于在 ubuntu/linux 上测试移动浏览器的模拟器/仿真器

Docker 并在不退出的情况下运行 ktutil