从源代码编译或从存储库安装时,软件包的性能是否会有所不同?如果在系统上编译软件包,那么在编译过程中,软件包是否会“更适应”(性能、稳定性)您的系统?
答案1
除非您在构建过程中进行认真的优化,或者对正在构建的功能进行重大更改,否则对于非常复杂的程序,您不太可能看到任何性能优势。即使进行了认真的优化,您仍然只会看到微小的改进。在 Ubuntu 上,以这种方式构建应用程序在大多数情况下没有真正的优势。
答案2
你会不是如果你在系统上重新编译东西,性能就不会得到提升,除非你的 Ubuntu 是高度定制的,比如使用来自其他来源的大量核心库。
诀窍在于,所有针对 Ubuntu 的软件包都是在真实的Ubuntu 系统,它使用和你相同的包。这意味着建筑环境是100%相同的系统,所有图书馆都有完全相同的绑定等,只有用户配置不同。因此,在构建二进制包时,可以应用大量积极的优化,并且它们仍然在您的系统上有效。这样 Ubuntu 就可以为用户提供性能最大化的包。
自行编译的软件包性能更佳的可能性非常低。它们甚至可能运行得更慢,因为在为 Ubuntu 存储库构建软件包时会手动触发许多默认未启用的优化。
至于稳定性,理由也是一样的。因为软件包是在 Ubuntu 系统上构建的,该系统具有完全相同的库正如您所做的那样(假设您从存储库中获取它们),它们的行为不会有任何区别。
最后,不期望任何利润当您自己构建应用程序时。
但是,如果您使用自定义、修改过的库或核心包(并非源自 Ubuntu 存储库),则重建使用它们的应用程序可能会有所帮助。但是,差异很可能很小,难以察觉,因此可能不值得这么麻烦。
答案3
我是一名使用 R 的统计员。我使用的是双启动系统(Ubuntu/Windows 7)。当我从 Ubuntu 存储库(r-base、r-base-dev 等)安装 R 时,其性能非常糟糕!运行某个脚本(循环计算粒子的轨迹)所花的时间比在 Windows 上长 50%!灰心丧气的我清除了 Ubuntu 提供的 R 版本,并使用"-march=native -O3"
所有编译器的标志(CFLAGS
、、、、、 )编译了自己的CXXFLAGS
版本,结果……至少可以说令人印象深刻。我的脚本的运行速度是 Windows 7 的两倍。除此之外,有时官方存储库FFLAGS
包含库的旧版本,开发人员可能每次都想编译全新的库。OBJCFLAGS
FCFLAGS
除此之外,我还编译了 Linux 内核,但收益要小得多(5%)。所以这真的取决于软件,以及使用本机架构能获得多少收益等。一些国际象棋引擎(如 Stockfish)依赖于sse
和popcnt
指令,因此如果默认编译的二进制文件(所有处理器的杰克,最古老的处理器的主人)不支持您的处理器能够实现的酷炫新功能,请考虑编译它。
答案4
一般来说不是,但也有例外。
- 使用标志“-march=native -pipe -O2”从源代码编译 Firefox 18 似乎减少了页面加载期间的那些短暂的无响应时间,但其他方面没有任何变化。使用标志“-march=native -pipe -Os”编译它使其占用的 RAM 减少了 16.5MB。因此,它的启动速度明显更快,并且在打开 30 多个选项卡的情况下似乎占用的 RAM 更少,但所有菜单选项似乎都需要很长时间。
- 使用标志“-march=native -pipe -O2”从源代码编译 OpenArena 可将平均帧率从 28.7(timedemo 结果)提高到 33.4(与从存储库安装相比)。这是一个很大的进步。
我从源代码编译的所有其他内容要么有,运行大致相同,要么有时会中断/运行得很糟糕。