Rootless 与 UserNS Remap 的性能差异测试方法
解读
国内云原生面试中,**“Rootless Docker”与“UserNS Remap”**常被混为一谈,但二者实现路径不同:
- Rootless 模式全程以非特权用户运行 dockerd,依赖 slirp4netns、fuse-overlayfs、rootlesskit 等用户态组件,存在系统调用截获与网络栈转换开销。
- UserNS Remap 仍以特权 dockerd 运行,仅通过 /etc/subuid 把容器内 uid 0 映射到宿主机高阶 uid,内核路径基本不变,理论上更接近原生性能。
面试官想确认候选人能否:
- 设计可复现、贴近生产的基准;
- 排除宿主机背景噪声;
- 给出量化结论与调优建议;
- 熟悉国内主流内核(5.4/5.10)与发行版(CentOS 7.9、AlibabaCloud Linux 3、Ubuntu 20.04)的已知缺陷。
知识点
- Rootless 模式启动链:systemd --user → dockerd-rootless.sh → rootlesskit → slirp4netns → containerd → runc。
- UserNS Remap 内核路径:dockerd → containerd → runc → /proc/self/uid_map 完成 id-mapping,不经过 slirp4netns。
- 性能干扰因子:
– slirp4netns 用户态网络,每包两次拷贝;
– fuse-overlayfs 比内核 overlayfs 多一次 FUSE 往返;
– seccomp、selinux、audit 在 Rootless 下默认策略更严;
– CentOS 7 默认内核 3.10,UserNS 支持不完整,需升级到 5.4+ 才能公平比较。 - 国内监管要求:等保 2.0 要求容器运行时开启 audit 与 cis 1.2.0 规则,测试时需同步打开以贴近真实场景。
答案
测试目标:量化 Rootless 与 UserNS Remap 在 CPU、内存、网络、存储、启动延迟五维度的差异,给出百分比比值与P99 置信区间。
环境准备:
- 同一台物理机(Intel 8269CY 2.5 GHz,32 C,128 GB,NVMe),关闭 Turbo、NUMA balancing、irqbalance;
- 双系统盘,**分别安装 AlibabaCloud Linux 3(内核 5.10)**与 CentOS 7.9(内核 5.4,elrepo),grub2 切换,排除发行版干扰;
- Docker 版本统一 24.0.2,cgroup v2 统一开启;
- 使用 tuned-adm throughput-performance 与 cpufreq-set performance 锁定频率。
测试工具与用例:
- CPU/内存:使用 sysbench cpu/oltp_read_write,容器内 8 线程,运行 300 s,取 ops/s 与 P99 延迟;
- 网络:
– 同宿主机 veth pair 场景:使用 netserver/netperf,测试 TCP_RR、TCP_CRR、UDP_RR,报文大小 1 B/1 K/16 K;
– 跨宿主机 10 Gbps 网络,使用 qperf,排除 slirp4netns 本身带宽上限(~3 Gbps)影响; - 存储:
– fio 4 K 随机读写,iodepth 32,numjobs 8,测试 overlayfs vs fuse-overlayfs;
– 额外测试 Docker build 上下文 1 GB,多阶段构建耗时; - 启动延迟:使用 crictl pull + crictl run 100 次,取 P50/P99;
- 监控:
– perf stat -e cache-misses,cycles,instructions 采集 CPU 微架构事件;
– sar -n DEV 1 采集软中断;
– slirp4netns 自带 --metrics-port 导出用户态网络延迟直方图。
结果判读:
- 若 Rootless TCP_RR P99 延迟高于 UserNS Remap 15 % 以上,且 perf 显示 slirp4netns 进程占用 25 % CPU,即可判定网络栈为瓶颈;
- 若 fuse-overlayfs 4 K 写延迟高 30 % 且 fio 显示 usr_cpu 翻倍,则存储为瓶颈;
- 若 sysbench 差异 < 5 %,说明 CPU/内存 基本无损;
- 最终输出 Markdown 报告,给出 “Rootless 适合 Dev/测试,UserNS Remap 适合生产高并发” 的结论,并附 tuned 调优参数与 systemd 切片示例。
拓展思考
- 国内混合云场景:部分金融客户使用 麒麟 V10(内核 4.19),Rootless 模式因 缺少 overlayfs in UserNS 补丁,强制回退到 fuse-overlayfs,性能下降 40 % 以上,此时应直接放弃 Rootless,改用 UserNS Remap + 自定义 seccomp 满足等保。
- K8s 集成:Rootless 模式在 kubelet 1.28 仍属实验特性,CNI 插件需支持 userns,否则 portmap 失败;面试可补充“在 ACK 托管版中,目前仅支持 UserNS Remap 的节点池”。
- 未来趋势:内核 6.2+ 的 overlayfs idmapped mounts 可让 Rootless 直接使用内核 overlayfs,fuse-overlayfs 将成为历史;建议候选人关注 moby/moby #42333 与 alibaba/cloud-kernel 的 backport 计划,提前验证 idmapped mounts + slirp4netns 的组合性能,为明年双 11 大促做技术储备。