首页 > 解决方案 > Mac 和 Linux 上 C++ 的性能差异(Linux 上比 Mac 慢)

问题描述

我有一个用 C++ 编写的 API,我使用 Xcode IDE 进行开发,并使用Silicon Framework作为 Web 框架,使用ODB作为 ORM 来连接 MySQL(读写)和 SQLite(只读)数据库。我使用 CMake 和 GNU 编译器编译 API,以将其部署到 Debian 或 Ubuntu VM。我的问题是在 Xcode 上运行我的 API 和在 VM 上运行它之间存在很大的性能差异,我无法将差异最小化。

当我在 Xcode 上运行时,我使用的是 MacBook Pro 13 英寸、四核 Core i5 处理器、16GB RAM 和 512GB SSD,Apple clang 版本 11.0.3。

在 VM 上运行时,我使用具有 2vCPU、7.5GB RAM 和 50GB 标准永久性磁盘的 Google Compute Instance (GCE),并且使用 docker 引擎、一个用于 C++ API 的容器和另一个用于 MySQL 的容器运行。这些规范足以让 API 按预期运行。

我使用 curl 来计算执行时间,始终在同一设备上以消除与连接相关的任何延迟,并且所有测试都是针对相同的请求和相同的数据完成的,时间是 10 个连续请求的平均值。

Debian 或 Ubuntu 上的所有测试都是在使用 CMake 编译后完成的,所有链接的库都是静态的,除了 mysqlclient 是动态链接的,并且使用:

CMAKE_CXX_FLAGS="-w -O3 -flto -frtti -fno-common -fstrict-aliasing -fexceptions"

C++14 用于 Xcode 和 CMake 中的编译。

以下是测试和结果列表:

我也尝试将 SSD 磁盘用于 GCE,但这并不影响结果。并且将编译器从 GNU 更改为 Clang 会导致性能下降。

我的理想情况是继续使用 Docker 运行。但即使不使用 docker,我使用 CMake 编译时的执行时间也是使用 Xcode 时的两倍。

知道为什么存在这种性能差异吗?可以最小化吗?如果我有一个研究和测试的起点,那就太好了。

标签: c++cmakeg++gnuodb

解决方案


推荐阅读