找回密码
 立即注册
查看: 379|回复: 0

UE5 FastBuild联合编译计时 | PCH问题导致无法落地

[复制链接]
发表于 2022-10-8 14:35 | 显示全部楼层 |阅读模式
一、问题

虚幻引擎编译速度一直是独立开发者令人揪心的问题。Windows平台纵然有XGE这种商业解决方案,但是价格不菲。Mac/Linux上一直没有什么好的联合编译软件。
UE从4.26开始支持一款叫FASTBuild的联合编译软件,已经集成在UE中,引擎中路径如下\Engine\Extras\ThirdPartyNotUE\FASTBuild\。
先讲UE做了什么改动,再讲测试结果,最后说明一下FASTBuild联合编译无法落地的原因。
二、UE 魔改

UE4.26魔改了FASTBuild v0.99版本(2019年发布),添加了一个端口监听服务FASTBuildCoordinator.exe,用来更方便的注册上线/下线的工作机。使用方式是在局域网单一台主机上打开监听服务,然后其余主机设置环境变量FASTBUILD_COORDINATOR 等于那台机器的局域网IP。然后工作机的注册就可以自动进行了,不需要更多配置。
FASTBUILD对于注册工作机,原来的逻辑是在某个共享文件下(环境变量FASTBUILD_BROKERAGE_PATH),写入名为局域网IP地址的文件。工作机上/下线,会生成/销毁对应文件。可能UE觉得这个方法不太适合它们。我用下里觉得没问题。
然而,对于接下来要讲的FASTbuild分布式编译的问题,UE也没有去解决。所以到了UE5时,对FASTbuild的支持依然停留在那个早前的版本。估计时UE也发现了FASTbuild的这个问题,但是没心思去解决吧。
三、完整编译Editor耗时

配置UE5联合编译请参考:保姆式教你使用FASTBuild对UE4进行联机编译 - 知乎 (zhihu.com)
PS : UE5已经配置了FastBuild相关的Graph Executor,上文中手撸的.cs代码可以无视。同时修改了一下FASTBuild和FASTBuildDashboard(GUI)的源码,更容易上手[1][2]
  --- Summary -----------------------------------------------------
                                   /----- Cache -----\
  Build:          Seen    Built   Hit     Miss    Store   CPU
   - Exec       : 2843    2838    -       -       -       1h:33m 30.420s
   - File       : 67312   2685    -       -       -       0.045s
   - Object     : 2704    2703    0       2704    0       21h:39m 19.945s
   - Alias      : 1       0       -       -       -       0.000s
   - Compiler   : 1       1       -       -       -       0.087s
   - ObjectList : 2704    2703    -       -       -       0.000s
  Cache:
   - Hits       : 0 (0.0 %)
   - Misses     : 2704
   - Stores     : 0
  Time:
   - Real       : 1h:27m 39.417s
   - Local CPU  : 23h:12m 50.492s (15.9:1)
   - Remote CPU : 1 days, 20h:56m 33.047s (30.8:1)
  -----------------------------------------------------------------16 + 32 核心 : 1小时27分钟
  --- Summary -----------------------------------------------------
                                   /----- Cache -----\
  Build:          Seen    Built   Hit     Miss    Store   CPU
   - Exec       : 3025    3025    -       -       -       1h:43m 21.568s
   - File       : 67852   2813    -       -       -       0.100s
   - Object     : 2836    2836    0       2836    0       2 days, 22h:9m 45.859s
   - Alias      : 1       1       -       -       -       0.000s
   - Compiler   : 1       1       -       -       -       0.031s
   - ObjectList : 2836    2836    -       -       -       0.000s
  Cache:
   - Hits       : 0 (0.0 %)
   - Misses     : 2836
   - Stores     : 0
  Time:
   - Real       : 4h:31m 46.910s
   - Local CPU  : 2 days, 23h:53m 7.547s (15.9:1)
   - Remote CPU : 0.000s (0.0:1)
  -----------------------------------------------------------------16 核心 : 4小时31分钟
  --- Summary -----------------------------------------------------
                                   /----- Cache -----\
  Build:          Seen    Built   Hit     Miss    Store   CPU
   - Exec       : 3083    3078    -       -       -       3h:7m 35.915s
   - File       : 70484   2975    -       -       -       0.050s
   - Object     : 2998    2997    0       2998    0       2 days, 13h:6m 32.078s
   - Alias      : 1       0       -       -       -       0.000s
   - Compiler   : 1       1       -       -       -       0.053s
   - ObjectList : 2998    2997    -       -       -       0.000s
  Cache:
   - Hits       : 0 (0.0 %)
   - Misses     : 2998
   - Stores     : 0
  Time:
   - Real       : 2h:37.271s
   - Local CPU  : 2 days, 16h:14m 8.094s (32.0:1)
   - Remote CPU : 0.000s (0.0:1)
  -----------------------------------------------------------------16 核心 : 2小时37分钟
测试总结:
FASTBuild联合编译与CPU核心数量呈线性关系,符合预期。但是一旦命令行使用了-dist参数,速度反而要比Baseline(即ParallelExecutor和FASTBuildExecturo的单机版)慢了整整3倍,同时峰值内存的消耗是原来的2倍(最高大约在~90G/128G)。
CPU数量耗时 (UE5编辑器完整编译)是否联合编译
16逻辑核心4小时31分是(但是只有本机一个worker)
32逻辑核心2小时37分是(但是只有本机一个worker)
16 + 32 逻辑核心1小时27分是(两个worker)
16逻辑核心1小时16分
32逻辑核心0小时38分
四、分布式无法开启PCH

浏览了一下Issue,是分布式编译没有开启PCH的缘故:
Building UE 4.24: slower with FASTBuild · Issue #725 · fastbuild/fastbuild (github.com)
Unreal engine integration and PCH usage · Issue #823 · fastbuild/fastbuild (github.com)
试了一下强行让工作机器使用PCH,会报错。同时,如果采取本地编译使用PCH,而工作机使用preprocessor时,工作机返回的结果,作为新的依赖,在本地进行后续编译时,也会报错。
总而言之,开启了分布式编译,PCH就不工作了。作者说ta本地有解决方法,但是需要修改preprocessor,同时ta提到XGE的解决方法是运行了一套虚拟文件系统,而FASTBuild没有这个特性。这两点可能在UE看来,都不如继续使用XGE吧。
五、附录

[1],yhyu13/fastbuild: High performance build system for Windows, OSX and Linux. Supporting caching, network distribution and more. (github.com)
[2],yhyu13/FASTBuild-Dashboard: A GUI for FASTBuild (github.com)
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-21 22:01 , Processed in 0.089271 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表