【发布时间】:2020-09-13 13:35:02
【问题描述】:
我正在寻找优化奇点 HPC 容器构建时间的方法。我知道我可以通过逐层构建它们来节省一些时间。但仍有优化空间。
我感兴趣的是在主机系统上使用/缓存任何有意义的东西。
- CCache 用于 C++ 构建工件缓存
- git repo 克隆
- APT 包下载
我做了一些实验,但都没有成功。
到目前为止我发现了什么:
缓存
我在容器中安装 ccache 并指示构建系统使用它。我知道因为我使用 sudo 运行 singularity build,所以缓存将在 /root 下。但是在运行构建之后,/root/.ccache 是空的。我验证了生成的 CMake 构建文件,它们肯定使用了 ccache。
我什至创建了一个包含 %post 的测试配方
touch "$HOME/.ccache/test"
但测试文件没有出现在主机系统的任何地方(不在/root 中,也不在我用户的家中)。构建步骤是否将容器支持的目录挂载到 /root 而不是主机的根目录?
要使用 ccache,还需要做些什么吗?
Git
人们建议跑步,例如git-cache-http-server (https://stackoverflow.com/a/43643622/1076564) 并使用git config --global url."http://gitcache:1234/".insteadOf https://。
由于奇异性可以读取主机文件系统的部分内容,我认为甚至可以在没有代理程序的情况下让它工作。但是,如果主机 git repos 不在 $HOME 或 /tmp 内,那么在构建过程中,奇异性如何访问它们? singularity build 没有 --bind 标志来指定额外的挂载目录。并且在配方中使用%files 部分听起来效率很低 - 每次运行构建时都复制所有内容。
APT
人们建议使用例如鱿鱼-deb-代理 (https://gist.github.com/dergachev/8441335)。同样,由于奇异性能够读取主机文件系统文件,我只想使用主机的/var/cache/apt。但是/var 默认没有挂载到容器中。所以再次出现同样的问题 - 我如何在容器构建期间挂载/var/cache/apt。总的来说这是个好主意吗?主机和容器都是基于相同版本的 Ubuntu 和架构,不会损坏主机的 APT 缓存吗?
或者奇点本身会做一些聪明的 APT 缓存吗?我刚刚注意到它在 25 秒内下载了 420 MB 的包,这在我的连接上是可能的,但考虑到 ubuntu 镜像的标准速度,这不太可能。
编辑:我在奇异性回购中创建了一个问题:https://github.com/hpcng/singularity/issues/5352。
【问题讨论】:
标签: caching singularity-container ccache