我的硬件是 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 | 61fps | (几乎是原生运行,故不加入比较) |
| nspawn | 54fps | 539MB~543MB |
| docker | 41fps | 744MB |
| podman | 40fps | 779MB~780MB |
不知道为什么感觉 docker 和 podman 对于 firefox webGL 的利用不是很好,并且内存都比 nspawn 占用更多。
接下来是 blender Benchmark 测试:
不过在 blender 基准测试中,似乎这几个容器分数都非常接近,这就很有意思了 👀 也许 firefox 测试中可能存在其他因素导致误差?
| 容器 | monster | junkshop | classroom |
|---|---|---|---|
| bwrap | 140.620968 | 94.062268 | 72.178226 |
| nspawn | 139.505754 | 94.644079 | 72.159326 |
| docker | 139.172102 | 94.891019 | 71.771857 |
| podman | 139.60.6876 | 94.030770 | 71.773574 |
如果从另一个角度看,docker / podman 也许会有一点点性能损失,但拥有海量镜像资源和管理工具,这是他们的优势。而 nspawn / bwrap 这类容器则相对轻量化并且冷启动非常快且内存占用低,但工具数量和镜像生态不如前者,好像还真不好说哪种更好,只是场景合适与否。
| 容器 | 主要特点 | 量级程度 | 便利性 |
|---|---|---|---|
| bwrap | 需要自行准备基础镜像,无特权 (root) 沙箱隔离,使用灵活可定制程度高,但是工具匮乏。 | 轻 | 差 |
| systemd-nspawn | 需要自行准备基础镜像,拥有不错的 systemd 支持,支持跨架构,相比 bwrap 拥有更多管理工具 | 中 | 还行 |
| docker | 开箱即用,docker hub 拥有海量镜像生态,复用性强,非常多的工具,使用需要提权 (sudo)。 | 重 | 好 |
| podman | 开箱即用,兼容 docker 海量镜像生态,复用性强,非常多的工具,使用无需提权。 | 重 | 好 |
有关这些容器的使用和配置参数,可以了解往期相关文章: