我的硬件是 AMD Ai9H365(880m) GPU 水平大概在 1650 左右,最近在尝试四种不同的容器方案发现了一点有趣的,在测试了对于运行 firefox 时 webGL 的运行性能 鱼群测试
在驱动正常,且均挂载 /dev/dri
、 /tmp/.X11-unix
情况下,把鱼群拉到 30000,同样分辨率下(2560x1600),canvas 宽高为 1024,持续运行了 10 分钟。
以本机测试 61 fps 为基准,bwrap 几乎为本机帧数,nspawn 会少个几 fps 左右,docker 和 podman 则比本机低了 20 fps 左右,如果忽略误差的几个 fps
从 webGL 画面帧数上看 bwrap ≈ 本机 > nspawn > docker ≈ podman
从 sysfs 读取 cgroup 得到的内存占用(由于 bwrap 只是基础隔离工具,几乎是在本地运行,故不加入比较):
容器 | 内存使用 |
---|---|
docker | 744MB |
podman | 779MB~780MB |
nspawn | 539MB~543MB |
不知道为什么感觉 docker 和 podman 对于 gpu 的利用不是很好,并且内存都比 nspawn 占用更多,也许是因为隔离程度较高?👀 从另一个角度看,他们拥有海量镜像资源,如果用些许性能损失换取便利生态好像也可以接受。只是在追求极致性能时可能还是会考虑用 nspawn / bwrap 这类更轻的容器方案。
容器 | 主要特点 | 图形性能 | 量级程度 | 便利性 |
---|---|---|---|---|
bwrap | 需要自行准备基础环境,极简基础沙箱工具,只提供隔离功能,但是用起来很灵活,可定制程度高 | 接近原生 | 轻 | 差 |
systemd-nspawn | 需要自行准备基础环境,拥有不错的 systemd 支持,支持跨架构,相比 bwrap 拥有更多工具 | 非常好 | 中 | 还行 |
docker | 开箱即用,docker hub 拥有海量镜像生态,复用性强,非常多的工具 | 一般 | 重 | 好 |
podman | 开箱即用,兼容 docker 海量镜像生态,复用性强,非常多的工具 | 一般 | 重 | 好 |
有关这些容器的使用和配置参数,可以了解往期相关文章: