Visual Studio 2019中改进的链接器基础知识

我们从用户那里听到的C++团队中,建立时间是一个痛苦的问题。我们继续致力于改进控制F5构建时间的步骤链接。快速的F5构建时间,或者说迭代构建时间,是开发人员生产力的一个关键贡献者,我们觉得这是一个巨大的机会,所以我们缩小了对那些我们认为可以将指针移动2倍或更多的更改的范围。这是在屋顶上 我们对工具链进行了重大改进,以加快链接时间 在Visual Studio 2019版本16.0发行版中。让我给你一个我们能取得的胜利的类型的挑逗。

null

Unreal Engine 4 Infiltrator demo link times.

这表明,在16.2比15.9的情况下,一年的平均成绩是3.5倍/debug:full build 发布配置的UE4渗透演示和1.6X赢使用/debug:fastlink. 考虑到我们衡量的其他工作量,这是一个中庸之道。特别是fastlink的胜利有点弱。我们做了什么?我们回到了基础。

Link.exe负责将不同的大数据集合并到可执行文件和PDB中,基本上是一个串行进程(主要是)。在VS2019 16.0中进行了更改以减小调试输入的大小,并改进了类型哈希策略之后,我们回到了基础,改进了核心数据结构和算法实现。随着这一变化,我们所有的内部数据结构都得到了更新,以提供更好的缓存性能和内存利用率,并实现中间数据的主动存储以消除冗余计算。这些变化是链接器和整个C++生态系统的基础,很高兴地显示了我们追踪的几乎所有场景的胜利。你用什么/debug:full? 速度更快。你用什么/debug:fastlink? 速度也更快。此外,使用link/incremental的重新编译场景也遵循这一趋势,而且速度更快。

与我们对MSVC工具集所做的任何更改一样,这些更改的一个关键目标是保持兼容性。我们所做的所有更改都保留了互操作性,因此如果您有与VS二进制兼容的旧库或PDB,那么一切都将继续工作。

我们希望从这项工作中获得的一个关键成果是,为我们最大的输入改进迭代构建时间。这些通常是大型dll或exe,它们将大量obj与静态lib和其他组件结合在一起。有很多地方的项目规模越来越大,但有两个主要领域,我们找到了很好的例子来分析和改进。

开源项目

有几个大型OSS项目,我们跟踪的一般正确性代表长链接时间。对于下面的每个工作负载,我们查看了构建并找到了花费最多时间的link命令,然后创建了一个 链接复制 为了它。为了模拟单个对象的重建和链接时间,这些链接复制中的每一个都是单独运行的。以下时间是每个单独的链接复制的时间,显示了VS 2017 15.9和VS 2019 16.2预览版2“全部更新”之间的比较。注意:这些表分为一个用于调试时间,另一个用于发布调试信息时间, 也描述了/debug:fastlink is 在VC博客上提供 .

Debug iteration builds time for Chrome.dll, clang.exe, mongod.exe mysqld.exe and UE4Game.exe

Release iteration builds time for chrome.dll, clang.exe, mongod.exe, mysqld.exe, and UE4Game.exe

这些是指向我们在上述实验中使用的工作负载源的链接。

AAA游戏

许多AAA游戏都是大型单体前女友的绝佳例子,由于我们与一些游戏工作室密切合作,为Xbox One开发AAA游戏,因此我们可以显示数字,但名字会被删除。”“beta”和“查利”是大型游戏,显示长的链接时间,代表了大量生产的C++源库。这些是我们最具挑战性的链接器输入。

AAA games /debug:full link times for large inhouse games.

从图中可以看出,改进可以随着输入的大小而扩展。这可能会根据项目的具体情况而改变,但我们在所有数据中都看到了这一总体趋势。

我们对组件进行了重大的更新和清理,这是迭代构建时间的主要部分。这些变化显示在2倍的范围内赢得/debug:fastlink and /增量,而/debug:full is 通常为3X-6X及以上(我们在一些工作负载上看到了10倍的胜利)。这些wins将出现在各种各样的工作负载中,并且与MSVC生成的其他二进制文件完全兼容。

链接时间仍然主导F5,我们仍在寻找加快速度的方法。在这一点上,我们认为很多低挂果实被采摘,所以我们将重点放在工具链作为一个整体如何管理中间构建产品和调试信息,所以请继续关注更多。

我们希望你能 下载Visual Studio 2019 16.2 试试看。一如既往,我们欢迎您的反馈。我们可以通过下面的评论或电子邮件联系我们( visualcpp@microsoft.com ). 如果您在使用visualstudio或MSVC时遇到问题,或者有什么建议,请告诉我们 帮助>发送反馈>报告问题/提供建议 在产品中,或 通过 开发者社区 . 你也可以在Twitter上找到我们( @视觉 )还有Facebook( msftvisualcpp软件 ).

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