gpt4 book ai didi

docker - 在 docker 容器下运行时程序的性能 : same or slower?

转载 作者:行者123 更新时间:2023-12-02 18:52:32 32 4
gpt4 key购买 nike

我正在使用基于 ubuntu 构建的 Docker 镜像,其中包含我在 future 几个月的工作中将需要的标准软件。

假设我有一个耗时的程序来对用 C++ 编写的十亿个数字进行排序。假设我想比较笔记本电脑上可执行程序的性能,以及在同一台笔记本电脑上的 ubuntu 容器内运行可执行文件时的性能。

总体来说,性能会有什么不同吗?对于我尝试过的一些粗略实验,关于对一百万个数字进行排序,性能似乎没有差异。对于其他更一般的计算,例如数字运算或字符串处理,这是否正确?

我知道 docker 容器应该是“轻量级”的,因为它们可以快速启动(与虚拟机不同),但我不知道每个容器是否在金属和运行的代码之间施加了某种“屏障”容器内。抱歉,如果最后一句话没有多大意义,我对容器和虚拟机不是很精通。

最佳答案

ObDisclaimer:性能问题的唯一真正答案是实际编写、运行和测量基准。

ObDisclaimer 2:在现代硬件上,除非您绝对有理由,否则不要强调性能。人们一直在共享租赁硬件上的虚拟机上运行用解释语言编写的生产级工作负载,他们并没有真正注意到它比裸机上的优化 C 慢 100-200 倍。

对于您所描述的工作负载,它受计算限制且数据集位于内存中,我希望裸机、Docker 和虚拟机之间的整体性能非常相似。

Docker 努力变得非常轻量级,并且在很大程度上依赖于内核级的支持来实现它的魔力。如果您正在执行文件 I/O,则主要在内核中会有另一层间接;如果你在做网络 I/O,Docker 会引入一个 NAT 层。 (当你说“在 Docker 中读取 /foo/bar 时,内核会做一些内部间接表示“哦,你的意思是 /var/lib/docker 下的这个文件”。)如果你可以测量这种差异并且它对你来说真的很重要,那么你需要在裸机上运行您的应用程序;您的应用程序代码可能会获得更大的 yield 。

虚拟机必须模拟所有可能使它们变慢的“硬件”,尤其是对于磁盘绑定(bind)的工作负载。如果您正在执行文件或网络 I/O,它看起来像是对磁盘的真实写入,但随后该磁盘设备是在软件中模拟的。再一次,在过去的几十年里有很多工作来优化这一点,应用程序级缓存层可以大大改善事情(即使在裸机上,磁盘和网络是系统中最慢的部分) .

无论哪种方式,纯算法代码直接在处理器上运行,而内存控制(确保您的进程/VM 的内存无法到达另一个进程/VM)是在硬件中实现的。

关于docker - 在 docker 容器下运行时程序的性能 : same or slower?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53735274/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com