cgroup v2 与 namespace 隔离

共 28 题
#

1. Linux namespace 的 Mount、PID、Network、UTS、IPC、User 六种

A Mount 隔离挂载点、PID 隔离进程 ID、Network 隔离网络栈、UTS 隔离主机名、IPC 隔离 IPC、User 隔离 UID/GID ✓ 正确答案
B PID namespace 隔离网络栈
C Network namespace 隔离挂载点
D User namespace 不映射 UID
#

2. cgroup v2 的 cpu、memory、io 三大控制器 v2 形式

A memory 控制器没有 max 限制
B cpu 控制器用 io.max 控制带宽
C cpu 用 cpu.max/cpu.weight,memory 用 memory.max/high/low,io 用 io.max/io.weight 控制资源 ✓ 正确答案
D io 控制器不管设备 IO
#

3. cpu cgroup 的 cpu.max(quota + period)的带宽限制

A quota 是相对权重
B quota 是每周期可用的 CPU 时间,用尽后任务被 throttle 直到下周期 ✓ 正确答案
C period 决定 CPU 优先级
D quota 超过后可无限使用
#

4. Mount namespace 的 pivot_root 与容器根文件系统

A pivot_root 在 Mount namespace 中把根切换为容器镜像根,比 chroot 更彻底且防逃逸 ✓ 正确答案
B pivot_root 与 chroot 完全等价
C pivot_root 不改变根文件系统
D chroot 提供内核级隔离
#

5. 如何结合 PSI 与 cgroup 指标判断容器是 CPU 受限、内存受限还是 IO 受限,从而选择扩容维度?

A 无法区分三者的瓶颈
B PSI 只能看到 cpu 压力
C throttle 说明内存受限
D cpu.pressure 高且 nr_throttled 增长说明 CPU 受限,memory.pressure 与 max 事件说明内存受限,io.pressure 说明 IO 受限 ✓ 正确答案
#

6. CPU 带宽控制(cpu.max)在突发负载下为何会出现 throttle 抖动,burst 参数如何缓解?

A burst 允许突发时借用未来配额,平滑突发节流,但会从未来周期扣除 ✓ 正确答案
B burst 提高配额上限且不扣除
C burst 与 quota 无关
D burst 会永远解除限制
#

7. cgroup v2 的 namespace(cgroup namespace),容器内可见的 cgroup 路径隔离

A cgroup namespace 为容器提供伪根,隔离 /proc/self/cgroup 显示的路径,但不改变资源限制 ✓ 正确答案
B cgroup namespace 改变资源限制
C cgroup namespace 隐藏 CPU 用量
D cgroup namespace 与路径无关
#

8. io cgroup 的 io.max 与 io.stat 的 PSI 指标

A io.stat 无法观测 IO 用量
B io.max 只限制 CPU
C io.max 按设备设置 IO 绝对上限,io.stat 提供 IO 统计,io.pressure 反映 IO 压力 ✓ 正确答案
D io.pressure 反映内存压力
#

9. User namespace 的 UID/GID 映射(rootless 容器)

A uid_map 把容器内 UID 映射到宿主 UID,容器内 root 在宿主上是非 root 用户,支撑 rootless 容器 ✓ 正确答案
B 容器内 root 在宿主上也是 root
C User namespace 不映射 UID
D rootless 容器不需要 User namespace
#

10. Time namespace(Linux 5.6+)的容器内时钟偏移

A Time namespace 不影响任何时钟
B Time namespace 隔离墙上时间
C Time namespace 隔离 hostname
D Time namespace 通过偏移隔离 boottime/monotonic 时钟,支持容器迁移一致性,但不隔离 REALTIME ✓ 正确答案
#

11. cgroup v2 的 domain controller 与 threaded controller 有何区别,delegation 机制如何支持容器运行时安全分权?

A delegation 需要 root 才能管理任何子 cgroup
B domain 控制器是线程级
C threaded 控制器是进程级
D domain 控制器进程级、threaded 控制器线程级,delegation 允许在子树内安全分权管理 cgroup ✓ 正确答案
#

12. pids 控制器如何限制容器内进程与线程总数,fork bomb 如何被 pids.max 拦截?

A pids.max 只限制内存
B pids.max 限制进程/线程总数,达到上限后 fork 失败,从而拦截 fork bomb ✓ 正确答案
C fork bomb 无法被 pids 限制
D pids.max 限制 CPU 使用
#

13. memory.high 与 memory.max 在触发回收与触发 OOM 上的语义差异,为何 high 被推荐为软性节流阀?

A 两者语义完全相同
B high 超限立即 OOM
C max 超限不会 OOM
D max 超限触发回收与 OOM,high 超限触发软性节流不立即 OOM,因此 high 是软性节流阀 ✓ 正确答案
#

14. cgroup v1 与 v2 的设计哲学差异,单一 hierarchy vs 多 hierarchy

A v1 用统一 hierarchy
B v1 用多 hierarchy 每控制器独立挂载,v2 用统一 hierarchy 所有控制器挂同一棵树保证一致 ✓ 正确答案
C v2 用多 hierarchy
D 两者设计完全相同
#

15. cgroup v2 的统一层级(unified hierarchy)与 subtree_control 委派

A 统一层级允许多棵独立树
B subtree_control 禁用所有控制器
C 统一层级是单棵 cgroup 树,subtree_control 决定子节点启用的控制器并实现委派 ✓ 正确答案
D 控制器在子 cgroup 默认启用
#

16. memory cgroup 的 memory.peak 与 memory.current 观测

A memory.current 是历史峰值
B memory.peak 是当前用量
C memory.current 是当前用量,memory.peak 记录历史峰值,用于合理设置内存上限 ✓ 正确答案
D 两者无法观测内存
#

17. unshare 与 clone 新 namespace 的工程应用

A clone 让当前进程进新 namespace
B clone 让子进程进入新 namespace,unshare 让当前进程进入新 namespace,两者都用 CLONE_NEW* 标志 ✓ 正确答案
C unshare 创建新进程
D 两者都不涉及 CLONE_NEW*
#

18. Network namespace 的独立网络栈与 veth pair

A veth pair 隔离网络栈
B Network namespace 隔离各自网络栈,veth pair 是一对虚拟网卡用于连通两个 namespace ✓ 正确答案
C Network namespace 共享一份 IP 表
D veth pair 无法连接容器
#

19. PID namespace 与进程 ID 隔离(独立 PID 1)

A PID namespace 隔离进程 ID 视图,容器内 PID 1 是 init,负责回收孤儿并处理信号,其退出会导致 namespace 失效 ✓ 正确答案
B 容器内 PID 1 能看到宿主所有进程
C PID 1 不负责回收
D PID namespace 不隔离进程 ID
#

20. cgroup v2 的 BPF 子系统(cgroup_skb_md)的高级用例

A cgroup_skb_md 是内存上下文
B cgroup BPF 只能监控 CPU
C BPF 程序可挂载到 cgroup,通过 cgroup_skb_md 等实现网络过滤、限速与基于 cgroup 的访问控制 ✓ 正确答案
D BPF 无法挂载到 cgroup
#

21. cgroup v2 的"委派"(delegation)机制与 systemd 协同

A delegation 与 systemd 无关
B delegation 需要 root 管理所有子 cgroup
C systemd 不用 cgroup 管服务
D delegation 把子树资源控制权委派给子 owner,systemd 通过 cgroup 管理服务并可与容器运行时协同委派 ✓ 正确答案
#

22. namespace 负责“视图隔离”、cgroup 负责“资源限额”,二者的职责边界如何划分?

A cgroup 负责视图隔离
B namespace 负责限制资源
C namespace 负责视图隔离(看什么),cgroup 负责资源限额(用多少),二者互补 ✓ 正确答案
D 两者职责完全相同
#

23. cpu.weight 比例分配与 cpu.max 绝对上限的关系,两种限制同时存在时如何共同决定 CPU 带宽?

A 实际带宽 = 权重分配 + max 上限
B 实际 CPU 带宽 = min(按权重分配的份额, cpu.max 上限),权重决定竞争份额、max 决定封顶 ✓ 正确答案
C 存在 cpu.max 时权重失效
D 两者取较大者
#

24. cgroup freezer(cgroup.freeze)如何实现容器快照与批量暂停,与 SIGSTOP 在语义上的差异?

A cgroup.freeze 与 SIGSTOP 完全相同
B cgroup.freeze 只冻结单个进程
C SIGSTOP 能冻结整个 cgroup
D cgroup.freeze 一次性冻结整个 cgroup 所有进程,适合容器快照/批量暂停,比逐进程 SIGSTOP 更原子 ✓ 正确答案
#

25. io.weight(BFQ/blkio 权重)与 io.max 分别提供按比例分配与绝对上限,各自的适用与局限是什么?

A 两者作用完全相同
B io.max 提供按比例分配
C io.weight 提供绝对上限
D io.weight 提供竞争时的按比例分配(无上限),io.max 提供硬性绝对上限(不随竞争变化) ✓ 正确答案
#

26. IOPRIO(io_priority)在 mq-deadline/bfq 调度器下如何影响请求派发,为何在 none 调度器下基本无效?

A bfq 不消费优先级
B none 调度器会处理 IOPRIO
C IOPRIO 与调度器无关
D mq-deadline/bfq 会按 IOPRIO 调度请求,none 直接透传不做优先级处理所以基本无效 ✓ 正确答案
#

27. cgroup v2 的 “no internal process” 约束为何要求控制器只作用于叶子节点,迁移进程时如何遵守?

A 父节点可拥有自己的进程
B 进程可放在任何 cgroup 节点
C 启用了控制器的 cgroup 中进程只能放叶子节点,父节点做聚合,迁移进程时需放入叶子 ✓ 正确答案
D 该约束与控制器无关
#

28. memory.swap.max 与 memory.max 的协同,swap 上限为何默认与内存上限联动,内存回收时 swap 的优先级如何?

A swap 上限默认 0 需显式启用,"内存+swap"总量限制防止绕过内存上限,回收时优先回收文件页、swappiness 决定匿名页 swap 倾向 ✓ 正确答案
B swap 上限独立于内存上限
C swap 回收优先于文件页
D swappiness 不影响 swap