编译和二进制 Linux 发行版/软件包之间的性能差异

编译和二进制 Linux 发行版/软件包之间的性能差异

我在网上搜索了很多,却找不到确切的答案。

像 Gentoo(或 FreeBSD)这样的发行版不附带二进制文件,而只附带包(端口)的源代码。

大多数发行版使用二进制支持(debian 等)。

第一个问题:编译后的软件包能带来多少速度提升?实际的软件包(如 apache 或 mysql)能带来多少速度提升?例如每秒查询数?

第二个问题:二进制包是否意味着它不使用第一个 AMD 64 位 CPU 之后引入的任何 CPU 指令?对于 32 位包,是否意味着该包将在 386 上运行,并且基本上不使用大多数现代 CPU 指令?

附加信息:

  • 我说的不是桌面,而是服务器环境。
  • 我不关心编译时间
  • 我有更多的服务器,因此使用源代码包可以提高 15% 以上的速度
  • 请不要挑起论战。

答案1

在几乎所有情况下,性能差异都是微不足道的,不值得。使用源发行版(同时滚动您自己的二进制包,因为 gentoo 的 bindist 系统允许)的充分理由包括:

  • 部署您自己的自定义补丁
  • 轻松定制你的内核
  • 打包您自己的更新

如果您不做任何这些事情,则不需要源代码发行版。对于个人使用来说,它们非常方便,因为它们允许您随意逐步升级,而不必过多担心二进制兼容性,而这在企业环境中并不是我经常看到的问题。

值得注意的是,您也可以使用二进制发行版来做这些事情,通过制作自己的 RPM 包或其他方式。管理开销是相似的。

通过源代码编译,您基本上不会看到 15% 的速度提升。在任何合理的情况下,我都不愿意将其估计为高达 5%。从源代码编译可以为您带来以下好处:

  • 你可以使用你喜欢的编译器版本
  • 您可以指示编译器从二进制发行版软件包中未使用的 ISA 扩展生成指令,例如 AESNI 和 AVX

但是,编译器实际上很少会生成这些,并且当将应用程序的性能作为一个整体考虑时,使用它们带来的总体节省通常非常小。诸如 RAM 访问(和延迟)以及磁盘和设备延迟之类的因素是更大的因素,您应该真正从那里开始。

应用程序可能受益于只能在相对较新的 Intel core i7 或 i5 上运行的自定义编译,包括执行大量矢量数学运算的编译和执行大量 AES 加密和解密的编译,或需要大量随机数的编译。如果您想使用 Intel DRBG,您目前也需要这样做。

如果这些都不适用于您,那么您会对任何基于 debian 或 red hat 的发行版感到非常满意,并且维护开销会少很多。

答案2

简短回答... 许多大规模和速度/延迟敏感的应用程序在标准 Linux 发行版上运行。Red Hat、CentOS、Debian、Ubuntu... 它们在大多数情况下都运行良好。大多数收益来自应用程序调优、标准内核和操作系统优化以及基础设施。

Gentoo可能会提供一些优化,但会带来更多的管理问题,减少注意力,减少供应商和驱动程序支持,稳定性问题,嘲笑以及潜在的安全问题。

我曾在高频金融交易环境中管理基于 Gentoo 的服务器。尽管 Gentoo 的性能略有优势,但我还是转向了 Red Hat 和 CentOS。Gentoo 纸面上的优势很容易被更智能的硬件选择、更好的服务器制造商/硬件集成支持、Red Hat 工程师更智能的修补以及更深奥的技术所克服,例如内核旁路...

如果您发现流行应用程序堆栈(LAMP)的效率存在问题,请确保在采取此措施之前优化您的服务器硬件(CPU 类型、RAM 布局)、网络基础设施、监控系统,并能够识别系统瓶颈。

您是否遇到了性能限制现在

答案3

当然,所有的观点都是正确的。我只是想对 5%-15% 的性能提升无法实现这一观点提出一些异议,尤其是对于现代版本的 GCC,这实际上取决于 CPU 架构以及它与二进制发行版目标基线的接近程度。除了使用 ISA 扩展之外,GCCs -march=native 还将针对 L1 和 L2 缓存/行大小进行优化。正确对齐的代码(针对您的 CPU)可以更快,尤其是当还使用 -flto 时,这样编译器就可以知道它需要考虑的所有事情。[不幸的是,一些软件包目前无法与 LTO 兼容]

此外,除了 march=native 和 LTO 之外,使用 -Ofast 编译选定包也会产生显著的差异。

未来,如果GCC的石墨基础设施稳定下来,将有可能获得更大的收益。

答案4

这取决于你的系统需要什么,实际上这里有三种思想流派(对于硬件和软件都是如此)

首先,对于大多数科幻迷来说,主流是你想要一些你知道的东西将要工作,你想要支持你想要它现在。在这种情况下,使用基于 redhat 的系统(RHEL 为您提供出色的支持,而 centos 是经过充分测试的 RHEL 发行版的社区重建)。但是,您将无法获得最新和最好的。在许多情况下,硬件也是如此。

第二种观点是“中间路线”,即中间立场——使用类似 ubuntu 的东西。你想要新的软件包(以牺牲绝对的稳定性为代价),你想要一个安装程序,并且好东西

在某些情况下,人们确实会遇到麻烦,但你有更新的软件包,事情就会变得经过合理测试。虽然很多人讨厌 Ubuntu,但它在易于安装和相当新的软件包之间取得了很好的折衷。Debian 可能是一个稍微保守的选择。如今,您甚至可以使用开箱即用的低延迟内核来设置 Ubuntu。我倾向于认为 ubuntu 和 debian 对我来说很合适,但 ymmv。很多地方部署了一个很多像 Facebook 和 Google 这样的服务器都选择了这个选项。

最后还有基于源代码的发行版。在大多数情况下,初始设置是一件非常麻烦的事情。你在设置内核时犯了一个错误?哎呀,花几个小时重新编译。你也没有安装程序 - 那是给新手的。你经常会得到最前沿的应用程序,以及根据需要编译它们的选项(例如,包括能够选择速度或内存使用的优化),以及滚动发布。如果你有非常具体、深奥的需求,gentoo 就很棒。如果你需要推出几十个系统并希望自动化它……祝你好运。基于源代码的发行版根本无法很好地扩展。你获得了很大的灵活性,*一些**额外的速度,但在我看来,可维护性不如基于包的发行版。你不是可能会获得 15% 的额外速度,并且你最终可能会浪费时间尝试调整硬件的编译标志,如果你搞砸了某件事,花时间找出什么确切地失败的。

在此处输入图片描述

BSD 是一个独立的家庭操作系统。有些人对它们深信不疑(至少有一个通讯室的常客是 freebsd 用户),不同的 BSD 有不同的重点 - 例如 openbsd 痴迷于安全,而 freebsd 是“主流”操作系统。在某些情况下,它们可能没有与 linux 相同的硬件支持,但这取决于很多因素。

相关内容