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


13

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

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

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

第一个问题:编译后的程序包可以提高多少速度?我可以从apache或mysql之类的实际程序包中获得多少速度提升?即每秒查询?

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

附加信息:

  • 我说的不是台式机,而是服务器环境。
  • 我不在乎编译时间
  • 我有更多的服务器,因此使用源代码包值得将速度提高15%以上
  • 请不要打架。

1
只是为了纠正一个错误的假设:FreeBSD确实带有端口树(源)和二进制包。请参阅man (1) pkg_addftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/
Hennes

Answers:


7

在几乎所有情况下,性能差异都是最小的并且不值得。使用源代码分发的充分理由(在滚动自己的二进制软件包时,如gentoo的bindist系统允许的那样)包括:

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

如果您不执行任何这些操作,则不需要源分发。对于个人使用,它们非常方便,因为它们使您可以随意进行增量升级,而不必担心二进制兼容性,这在企业环境中并不是我经常看到的问题。

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

通过源代码编译,您基本上看不到速度提高15%。在任何合理的情况下,我都不愿意估计它高达5%。从源代码进行编译可以使您获得一些好处:

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

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

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

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


9

简短答案...许多大型且对速度/延迟敏感的应用程序都在标准Linux发行版上运行。Red Hat,CentOS,Debian,Ubuntu ...在大多数情况下,它们都能正常工作。大多数收益来自应用程序调整,标准内核和操作系统优化以及基础架构。

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

我已经在高频金融交易环境中管理了基于Gentoo的服务器。尽管Gentoo在性能上有一些细微的好处,但我仍然转向Red Hat和CentOS。更灵活的硬件选择,更好的服务器制造商/硬件集成支持,红帽工程师更聪明的修补程序以及更深奥的技术(例如内核绕过)可以轻松克服Gentoo在纸上的优势。

如果您正处于流行应用程序堆栈(LAMP)效率问题的时刻,请确保已优化服务器硬件(CPU类型,RAM布局),网络基础结构,监控系统,并能够在发现系统瓶颈之前走这条路。

现在遇到性能限制吗?


5

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

此外,除了march = native和LTO之外,还使用-Ofast编译精选软件包可能会产生重大影响。

将来,如果海湾合作委员会(GCC)的石墨基础设施能够稳定下来,则有可能获得更大的收益。


支持此答案的轶事:我与Cairo和Pixman一起-march=native在Skylake(客户端)CPU上运行的一些基准测试比二进制发行版快5至20%。(对于编译器来说,这些软件包可能相对容易进行自动矢量化。)-fno-semantic-interposition就像是一样,是另一个不错的尝试-falign-functions
ZachB

4

这取决于您在系统中想要的东西,实际上这里有三种思路(对于硬件和软件都是如此)

首先,主流尽可能在SF大多数人去-你想让你知道的事工作,你需要支持,你想它现在。在这种情况下,请使用基于Redhat的系统(RHEL为您提供了出色的支持,centos是经过良好测试的RHEL发行版的社区重建)。但是,您将不会获得最新和最伟大的信息。在许多情况下,硬件也是如此。

第二个是“道路中间”的观点,这是中间立场-与诸如ubuntu之类的东西一起去。您需要新的软件包(要付出一点点坚如磐石的稳定性),需要安装程序以及其他好东西

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

最后是基于源的发行版。在大多数情况下,初始设置是后部完全疼痛。您在设置内核时犯了一个错误?糟糕,请花几个小时重新编译。您也没有安装程序-n00bs。您经常会得到最前沿的应用程序,并可以根据需要对其进行编译(包括能够针对速度或内存使用进行优化),以及滚动发布。如果您有非常具体,深奥的需求,那么gentoo很棒。如果您需要推出几十个系统并希望使其自动化...祝您好运。基于源的发行版根本无法扩展。您将获得很大的灵活性,(有些)额外的速度,但可维护性却不能与基于软件包的发行版IMO处于同一水平。你不是可能会获得15%的额外速度,并且最终可能会浪费时间来尝试调整硬件的编译标志,并且如果您搞砸了,就要花点时间找出真正失败的地方。

在此处输入图片说明

而BSD是一个独立的家族操作系统的。他们向某些人发誓(至少一个通勤室的常规用户是freebsd用户),并且不同的BSD具有不同的关注点-例如,openbsd被安全困扰,而freebsd是“主流”用户。在某些情况下,它们可能没有Linux所提供的相同类型的硬件支持,但这取决于许多因素。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.