Python:虚拟化对性能的影响

Python:虚拟化对性能的影响

我知道这个问题以前也曾被问过,但我的问题更具体,现有的问题也已经过时了。所以事情可能已经发生了很大变化(例如考虑矢量指令)。

简单来说,我有一个 Python 模块,我基本上总是需要使用它,而我的 Python 代码在虚拟机(类型 1 和 2)上运行速度要慢得多(运行时间加倍)。模块本身主要是 C 库的包装器/API,但并不广泛。

我想知道 python 本身是否受到影响,还是只有模块受到影响。那么,大家知道 python 在 VM 中运行时会受到很大影响吗?

答案1

从你的问题中无法得知你是否在进行同类比较。

在正确配置且负载合理的虚拟化环境中,我预计大多数负载的运行速度最多比裸机慢几个百分点。如果您的代码具有大规模可扩展性并且可以利用所有可用的硬件资源,我预计它在虚拟化环境中的性能会明显变差,尤其是在资源稀缺的情况下。如果您的代码依赖于特定的加速器硬件,则虚拟化的影响取决于具体实现。

答案2

你还没有证明任何事情,你还有大量未隔离的变量。Python 版本、操作系统版本、硬件资源、VM 资源配额、CPU 型号等等。


分析代码中哪些函数占用了时间。使用以下方法进行可视化火焰图基于Python的堆栈采样实现会很好,但我不知道它捕获 C 函数的效果如何。在这种情况下,您可能想尝试基于操作系统的分析器(eBPF、xperf),它们对 C 库和操作系统有更好的可见性。

详细研究哪些函数比较慢。了解它的功能,如果可能的话获取源代码。计算系统调用以衡量它对操作系统的请求。

找到限制资源:CPU、内存、磁盘、网络。通过性能监控工具在主机级别测量这些资源。

对比不同环境、裸机、不同类型的虚拟机、不同硬件上的结果。不要在虚拟机主机上过度使用资源,不要过度使用 CPU,当然也不要过度使用 RAM。与裸机专用主机相比,这是不公平的。


实际上,这是一项常规性能调查,旨在发现您环境中的限制因素是什么。使用 Python 可能只是改变代码运行时以进行分析和优化。

答案3

有可能,相关代码会进行大量上下文切换(和/或虚拟机管理程序通过将虚拟核心移到物理核心周围而加剧了上下文切换)。在虚拟机管理程序下,上下文切换的成本可能比在裸机上高出约 100 倍。由于虚拟机管理程序围绕不同的物理核心调度虚拟核心,缓存未命中也可能是一个重要因素。

为了减轻其中一些开销,将虚拟核心固定到物理核心,将底层 CPU 拓扑公开给 VM(插槽/核心/线程),将 VM 完全保留在单个 NUMA 节点内,并且如果您的代码对缓存/内存延迟敏感,就不要为客户机提供主机上的全部 CPU 核心/线程。

在虚拟机管理程序下,各种工作负载的性能可能会比裸机差很多。这些数字是几年前的,但我会定期重新测试这些数字,发现过去十年里情况并没有发生太大变化。

相关内容