Build Cache
概述
Build Cache 可重用先前构建部分,从而节省时间和资源。当您运行构建时,我们将输出存储在文件缓存中。当运行将来构建时,我们需要检查缓存以免重新生成构建部分未进行更改。
这可能会产生重大影响,因为您可以重用存储在 Build Cache 的先前构建数据,从而在不影响带宽的情况下大幅缩短构建时间。
您可以通过在单台机器上创建和重复使用内容来本地使用 Build Cache,也可以为多个 Initiator 创建共享缓存(测试功能),或者同时使用本地和共享缓存。
要在运行项目时使用 Build Cache,请在构建命令中添加以下参数。这样会检查缓存中是否有有用的内容,并将您正在运行的构建存储在缓存中,以备将来使用。如果您使用共享缓存,还需要在专用机器上安装Build Cache 服务。
使用本地构建缓存需要在 Initiator 机器上占用额外的存储空间。建议您分配相当于项目输出文件夹大小两倍或更多内存。
部署类型
Build Cache 可以不同的方式部署,具体取决于客户端连接到端点的方式。单个客户端可作为自身的端点(本地),多个客户端可连接到单个端点(远程),并且也可以进行更复杂或动态的部署。
您可以同时启用本地缓存和远程缓存。如果同时启用这两个选项,Incredibuild 会在运行构建时对每个任务使用以下逻辑:
-
检查本地缓存。如果有缓存命中,就会使用。如果出现缓存未命中,则检查远程缓存。
-
如果有远程缓存命中,则使用该数据并更新本地缓存。
-
如果远程缓存未命中,则运行任务并更新本地缓存。
用例和最佳实践
开发人员机器 - 居家办公或办公室办公
对于大多数机器,我们建议同时启用本地和共享缓存。假设这些机器是永久性机器(笔记本电脑、台式电脑或永久性虚拟机),并且还有其他机器(通常是 CI 服务器)仅使用共享缓存写入该缓存。如果没有机器专门使用共享缓存进行写入,开发人员机器应仅使用本地缓存。
当您 Agent 上同时启用本地和共享缓存时,该 Agent 只能提供本地缓存。
运行构建时,首先检查本地缓存。如果命中,则使用缓存。否则,Incredibuild 会检查共享缓存。如果有命中,我们会使用并更新本地缓存,以便将来执行使用本地缓存并减少网络流量。由于上传带宽速度较低,这居家办公时特别有用。如果没有命中,则运行构建,并将信息添加到本地缓存中。
CI 机器
CI 构建通常可以被认为是“真实来源”:其通常包含值得信赖且稳定的代码,并且由其他 CI 构建和开发人员共享。在大多数情况下,合并后成为 CI 构建一部分的代码更改频率会更低。因此,其编译工件(目标文件等)可能会被其他人使用,从而提高构建缓存效率,并为每个用户提供更快的构建速度。当将机器用于 CI 用例时,我们建议仅使用共享缓存。然后,这些机器将同时读取和写入共享缓存。这可以确保即使 CI 机器被拆除(如在许多用例所示),其内容也可用。因此居家办公或办公室办公的开发人员可以共享该缓存。
共享缓存服务
对于托管共享缓存的机器,请使用以下建议以最大限度地提高性能:
-
在 Agent 上安装 Incredibuild,但不要向 Agent 分配任何许可证,以免其协助或启动任何构建。
-
请勿在这台机器上运行其他程序,该机器是一台专用机器。
-
添加 Agent 描述,以将 Agent 清楚地标识为您的共享缓存。
安装 Build Cache 服务
如果您使用共享缓存,则需要在专用机器上安装Build Cache 服务。使用以下格式:
sudo bash ./incredibuild_<version>.ubin install -Y -O <Primary_Coordinator_Machine_IP_or_Hostname> -A <Path_to_Incredibuild_Installation_Directory> -Q <size of cache>
有关更多详细信息,请参阅 Installing Components。
Build Cache 参数
可在构建命令中添加以下参数,以使用 Build Cache。即使启用了 Build Cache,您仍然需要在希望使用 Build Cache 的每次构建中使用这些参数。
参数 | 描述 | 备注 |
---|---|---|
--build-cache-local-user --build-cache-local-shared --build-cache-local-group="groupname" |
添加这三个命令之一,以使用本地构建缓存。您可以指定缓存供哪些用户访问和共享,是供本计算机上的单个用户(-user),还是该 Initiator 上的所有人(-shared),还是包括当前用户在内的特定用户组(-group)。 它可以单独使用,也可以与 Shared Cache 一起使用。 备注:这些参数在版本 3.19 中有所更改。它们曾经是 --avoid-local-user|group|shared。原始参数仍然有效,但在未来版本中可能会被弃用。 |
|
--build-cache-service[= <URL>] |
使用运行在 Build Cache 服务上的 Shared Cache,需要指定以下信息:协议,主机的 IP 地址或主机名,主机机器的端口号。例如:http://build-cache-service:8080. 协议可以是 http 或 https,但我们建议使用 http 协议以提高性能。 您可以在 Agent Settings 中或使用 CLI 定义一个默认的 Build Cache 服务。如果您已经定义了默认值,您可以在没有 URL 的情况下使用此参数。如果您定义了默认值,但在参数中使用了不同的 URL,则将使用参数中指定的值。 |
|
--build-cache-basedir=<path> |
即使文件完全相同,Incredibuild 也会将来自不同路径的文件视为缓存未命中。这个参数允许您定义路径中哪一部分不会被其他运行类似构建的用户共享。这样,Incredibuild 在判断两个文件是否相同时,就会忽略路径的这一部分。 例如,如果您将用户名作为路径的一部分(如 /home/bill_gates/windows_vista/libs/src/pm-functions.cpp),则可以将 basedir 定义为 /home/bill_gates/windows_vista/。 此参数为必填项。 注:此参数在版本 3.19 中有所更改。以前是 --avoid-basedir。原始参数仍然有效,但在未来版本中可能会被弃用。 |
构建实例
仅为 Initiator 上的所有用户运行本地缓存
ib_console --build-cache-local-shared --build-cache-basedir=/home/myuser/opencv make -j 40
运行本地和共享缓存
ib_console --build-cache-local-shared --build-cache-service=http://192.54.11.9:8080 --build-cache-basedir=/home/myuser/opencv make -j 40
本地缓存设置
您可以前往 Agent Settings > General > Local Build Cache Size 设置,编辑本地 Build Cache 大小。这也可以在安装 Initiator 时配置。
您还可以在使用本地 Build Cache 的 Initiator 上运行以下命令,以配置其他本地缓存设置:
-
返回有关您本地构建缓存位置和大小的信息:
/opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> info
-
设置本地构建缓存大小。缓存大小默认为 100 GB,不过您可以修改数值:
/opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> set_size <size in GB>
-
清除本地构建缓存:
/opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> clear
共享缓存设置
您可以在 Agent Settings > General > Build Cache Service URL 设置中定义一个默认的 Build Cache 服务。如果您使用 --build-cache-service 参数但没有提供值,则会使用此处定义的值。如果您指定了不同的值,它将覆盖 Agent Settings 中的值。
您也可以使用命令行界面修改该设置。
您还可以在 Build Cache 服务计算机上运行以下命令来配置其他设置:
-
获取共享构建缓存大小。默认情况下,大小为 100GB:
sudo /opt/incredibuild/management/build_cache_service.py get-size-limit
-
设置共享构建缓存大小。默认情况下,大小为 100GB。
sudo /opt/incredibuild/management/build_cache_service.py set-size-limit <size>
-
返回 Build Cache 服务机器上共享构建缓存的位置:
sudo /opt/incredibuild/management/build_cache_service.py get-path
-
清除共享构建缓存:
sudo /opt/incredibuild/management/build_cache_service.py clear
-
返回 Build Cache 服务主机上当前已使用的 Build Cache 大小:
sudo /opt/incredibuild/management/build_cache_service.py get-used-size
使用信息和统计数据
您可以使用以下命令,获取任何构建的缓存命中和缓存未命中信息:
/opt/incredibuild/management/show_build_cache_statistics.sh <build number>
例如
/opt/incredibuild/management/show_build_cache_statistics.sh 45
可以在 Build History 中查看构建编号。在 Build Title 数据列中,选取标题中的数字。例如,如果标题是 "Build - 45",只需使用 "45" 即可。