使用Profile-Guided优化(PGO)提高Windows-PHP性能

自我介绍我是 安基特阿斯塔纳 我是后端C++编译器的程序管理器。在我的前两篇博客中,我介绍了 轮廓引导优化(PGO) )都是关于 案例研究 说明了PGO是如何用来制造 SAP NetWeaver 更快。  在这个博客里,我想介绍一个关于PGO是如何被正式使用的故事 Windows PHP 二进制文件更快。 斯蒂芬扎科斯 ( Windows PHP程序管理器 ) 已经很好地为这个博客提供了内容。

null

在阅读了这个博客之后,你们应该能够进一步理解并使用这个案例研究为你们的应用程序介绍PGO。除此之外,对于有经验的PHP用户,本文 应该作为一个优化机会 进一步优化Windows-PHP在特定工作负载下的性能。我们开始吧!

正如大多数人可能已经知道的那样,PHP是一种为web开发而设计的服务器端脚本语言,但也用作通用编程语言。PHP如今被大量使用,它为数百万个网站和web服务器提供了强大的动力。除此之外,PHP还被用于支持大量的开源内容管理系统(CMS),如Joomla、WordPress和Drupal。

将Windows-PHP二进制文件升级的努力是由 微软开源技术(OSTC)集团 . OSTC的主要目标是与开源社区合作,帮助他们的软件与windowsserver和windowsazure更好地互操作或运行。确切地说,这并不是微软唯一一个使用开源的团队,但令人惊讶的是,如今这只是众多团队中的一个。这个小组工作的几个项目的例子有Windows上的PHP、Openstack with Hyper-V、CoApp(CoApp.org)以及针对Hyper-V和Azure的Linux集成服务。

为什么Windows PHP团队使用Profile-Guided优化(PGO)?

在过去的几年里,微软及其合作伙伴一直在努力与PHP社区合作,以提高PHP开发人员和用户对PHP的体验 Windows服务器 微软Azure . 因此,新版本的PHP(即php5.4)for Windows包含了巨大的改进,这些改进来自PHP核心维护人员和Microsoft之间的深入协作。一个原因是 Windows PHP 5.4和5.5 轮廓引导优化(PGO) . 这项合作的总体目标是改进Windows上的PHP,并以一种能够为PHP用户提供与其他平台上相同(或更好,如果可能)的功能的方式启用Windows特定的功能。

用水测试后 用于Windows PHP 5.3的PGO ,团队终于能够将PGO整合到 Windows PHP 5.4版 . 性能是windowspp团队的主要目标,这也是在Windows上实现PHP二进制文件PGO的关键原因。PGO提供了一个重要的机会,可以在不改变任何函数行为的情况下优化PHP解释器的性能。

Windows PHP团队在PGO’izing Windows PHP二进制文件方面执行的“关键步骤”是什么?

回顾我以前的博客,基本上有三个步骤需要PGO’izing一个应用程序(仪器,培训和优化)。记住“仪器”和“优化”步骤需要 ‘LTCG:PG仪器’ LTCG:PG优化 分别构建(有关更多信息,请查看我的上一个 博客 后)。

PGO’ize Windows PHP二进制文件的步骤基本上与PGO’ize任何通用应用程序一致,如下所示:

  • 创建Windows PHP二进制文件的插入指令的构建(即插入指令阶段) 对于那些想在这方面获得一些第一手经验的人来说,创建Windows PHP二进制文件的插入指令版本需要用户通过额外的 –启用pgi ‘参数 配置 脚本。在运行 配置 脚本只是用 ‘制作快照’ . 有关如何设置的更详细说明,请参阅 博客文章 .
  • 收集培训数据(即培训阶段) 这一步可以简单到用IIS设置PHP或用PHP应用程序设置Apache,然后通过web浏览器访问应用程序。一个好的培训课程应该练习用户最常遇到的工作流。Windows-PHP团队目前的培训方式是为IIS和Apache(在Windows上)预先配置一些PHP应用程序,然后通过请求特定页面(通常对最常用的页面多次)来运行这些应用程序,以获得广泛的覆盖范围。从今天起,WindowsPHP团队将对PHP二进制文件的每个快照和发布版本进行培训。

    快照构建一天可以发生多次(取决于特定日期的提交次数)。  PHP5.4、5.5和主分支的每个快照都是自动化的,构建自动化过程包括创建插入指令的二进制文件、设置IIS和Apache、运行一系列应用程序以生成训练数据、将这些数据复制回PHPBuild目录,然后最终重建优化的PHP。

    培训阶段的最终结果是“*.pgc”文件,它本质上是培训数据文件,包含“优化阶段”所需的所有信息。您需要将这些文件复制回PHP构建目录中,以便在构建的下一阶段使用。

  • 构建优化的Windows-PHP二进制文件(即优化阶段)

    用户可以构建PHP二进制文件的优化版本 遵循下面列出的简单步骤: 答。将*.pgc文件复制回PHP构建目录 b。运行命令“nmake–clean pgo”来清理生成目录(而不是.pgc文件) c。重新运行configure脚本,但删除“–enable pgi”参数,而是添加“–with pgo”参数 d。运行“nmake”,然后运行“nmakesnap”来构建最终优化的PHP

整个过程可能需要几个小时,这取决于构建机器的速度。为了获得最佳结果(即更高的构建吞吐量和最大的PGO性能增益),请使用Visual Studio 2012 RTM。

在对Windows-PHP二进制文件进行PGO时,Windows-PHP团队面临哪些“关键挑战”?

对PHP进行PGO’izing的工作开始于概念验证练习。WindowsPHP团队几年前做了一些工作来测试PGO,看看他们如何利用它来开发PHP。这个练习有助于发现以下问题 一些关键挑战 在为PHP5.4启用PGO时,团队解决了以下问题:

  • 如何训练PHP二进制文件: 起初,windowspp团队很难理解如何最好地训练PHP-Windows二进制文件。特别是,“要运行什么样的培训场景?”、“培训多长时间?”以及“要使用什么样的应用程序进行培训?”
  • 吸收更长的构建时间: 为了节省工时,Windows PHP PGO构建过程的每一部分都是自动化的。将PGO添加到构建过程是一个相当简单的练习,但是这里的主要挑战是处理所需的额外构建时间。考虑到Windows PHP有各种构建(线程安全的、非线程的,现在是php5.5的x86和x64),以吸收添加更多/更快构建系统所需的额外构建时间,并改进构建自动化以支持并发构建 .
  • 需要额外的质量保证: 验证您的PGO培训方案的有效性是至关重要的,在获得最大性能增益方面起着重要作用。良好的测试仍然是PGO在PHP中成功的关键。  在PHP5.4发布时,WindowsPHP团队有相当好的测试自动化,因此能够识别使用PGO改变PHP行为的问题。  这些问题通过使用pragma语句得到了缓解。

Windows PHP团队通过对二进制文件进行PGO’izing所获得的性能提升是什么?

为了测试PHP性能,Drupal、Mediawiki、WordPress和Joomla等应用程序部署在IIS和Apache web服务器上。然后使用加载代理和各种度量(如 每秒事务数(TPS) 记录和报告。为了更好地展示PGO带来的性能改进,下表列出了这些应用程序的“TPS”,包括/不包括PGO化的PHP二进制文件:

图片[1]-使用Profile-Guided优化(PGO)提高Windows-PHP性能-yiteyi-C++库

表1:利用PGO化WindowsPHP5.5的应用程序的性能增益

正如你所看到的,这些结果中有一些是相当不错的 令人印象深刻的 ! 可以找到这些结果的详细摘要,其中包括用于生成这些结果的一些细节 在这里 .

总结

虽然Profile-Guided Optimization(PGO)是一项复杂的技术,但是我希望这个博客能为您提供更多关于PGO有用性的证据,并且在解释Windows-PHP团队PGO如何实现Windows-PHP二进制文件方面做得很好。在我未来的博客中,我将讨论PGO是如何在引擎盖下工作的,以提供大量产品所带来的性能提升。

所以请继续关注!此外,如果您想让我们在博客上介绍一些其他与PGO相关的场景或只是一些古玩,并且对PGO还有一些问题,请随时联系我们 . 我会尽力回答他们。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享