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

joz*_*zko 15 performance gentoo packages

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

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

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

第一个问题:我可以从编译包中获得多少速度提升?我可以从真实世界的软件包(如 apache 或 mysql)中获得多少速度提升?即每秒查询数?

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

附加信息:

  • 我说的不是桌面,而是服务器环境。
  • 我不在乎编译时间
  • 我有更多的服务器,所以使用源代码包的速度提高15%以上是值得的
  • 请不要喷火。

eww*_*ite 10

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

Gentoo可能会提供一些优化,但为更多的管理困境、减少的思想共享、减少的供应商和驱动程序支持、稳定性问题、嘲笑和潜在的安全问题打开了大门。

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

如果您正处于流行应用程序堆栈 (LAMP) 的效率成为问题的地步,请务必优化您的服务器硬件(CPU 类型、RAM 布局)、网络基础设施、监控系统并能够识别系统瓶颈之前沿着这条路走下去。

现在遇到性能限制吗?


Fal*_*mot 7

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

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

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

值得注意的是,通过制作自己的 RPM 包或其他任何东西,您也可以使用二进制发行版来执行这些操作。管理开销是类似的。

通过从源代码编译,您基本上不会看到 15% 的速度提升。在任何合理的情况下,我都不愿意估计它甚至高达 5%。从源代码编译会给你带来一些事情:

  • 您可以使用首选的编译器版本
  • 您可以指示编译器从二进制分发包中未使用的 ISA 扩展生成指令,例如 AESNI 和 AVX

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

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

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


小智 6

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

此外,除了使用 March=native 和 LTO 之外,使用 -Ofast 编译选择包也会产生显着差异。

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


Jou*_*eek 5

这取决于您想要的系统,这里确实存在三种思想流派(对于硬件和软件都是如此)

首先,就 SF 上的大多数人而言,主流是——你想要一些你知道奏效的东西,你想要支持,而且你现在就想要。在这种情况下,使用基于 redhat 的系统(RHEL 为您提供出色的支持,而 centos 是经过良好测试的 RHEL 发行版的社区重建)。但是,您不会获得最新和最好的。在许多情况下,硬件也是如此。

第二个是“中间道路”的观点,这是中间地带 - 与 ubuntu 之类的东西一起使用。你想要新的包(以完全坚如磐石的稳定性为代价),你想要一个安装程序,以及好东西

在某些情况下,人们确实会遇到麻烦,但您有更新的软件包并且经过合理测试。虽然这里有很多人对 Ubuntu 的仇恨,但它在易于设置和合理的新软件包之间取得了很好的折衷。Debian 可能是一个稍微保守一些的选择。如今,您甚至可以使用开箱即用的低延迟内核设置 Ubuntu。我倾向于觉得 ubuntu 和 debian 对我有用,但是 ymmv。许多部署大量服务器(如 facebook 和 google)的地方都选择此选项。

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

在此处输入图片说明

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