内核新数据结构与同步(sched_ext/maple tree/RCU)

共 45 题
#

1. sched_ext GA 之后,struct sched_ext_ops 的 select_cpu / enqueue / dispatch 在 idle CPU 选路与 rq lock 释放顺序如何避免 task starvation?

A 回调保持非阻塞且持有 rq 锁时间极短,配合 DSQ 公平语义避免饥饿 ✓ 正确答案
B `select_cpu` 返回的 CPU 是强制的,任务必须入队到该 CPU
C 回调中可以长时间阻塞睡眠以等待资源释放
D 只依赖 `dispatch` 就能保证公平,无需关心回调耗时
#

2. scx_bpf_kick_cpu 在 cross-domain wakeup 路径相对 resched IPI 的 latency 差异?

A 它不产生任何 IPI,纯软件队列
B 它只能唤醒本域 CPU,无法跨域
C 单次跨域唤醒延迟通常略高于直接 resched IPI,但支持批量聚合与惰性 kick ✓ 正确答案
D 它比 resched IPI 延迟一定更低
#

3. maple tree v3 压缩 height(10 → 8 量级)在 VMA walk(/proc/PID/maps)path 的工程价值?

A 高度降低会显著增加每次查找的节点访问次数
B 高度不变,只是换了存储介质
C 只影响插入不影响查找
D 通过提高扇出/优化节点布局降低树高,减少 VMA walk 的 cache miss 与路径深度 ✓ 正确答案
#

4. ext4 fast-commit 的 commit_tid 与 jbd2 commit 之间的一致性边界?

A fast-commit 记录可以独立于 jbd2 事务持久
B 崩溃时 fast-commit 记录必然完整,无需回退
C fast-commit 不涉及任何事务 ID
D 通过 commit_tid 将 fast-commit 记录对齐到 jbd2 事务,崩溃时先重放 fast-commit,不完整则回退到完整 jbd2 重放 ✓ 正确答案
#

5. fsconfig / fsmount / move_mount 新 mount API 在 container runtime 替代 /proc/self/mountinfo 解析的工程场景?

A 新 API 完全依赖 /proc/self/mountinfo 解析
B 通过 fsopen/fsconfig/fsmount/move_mount 构造确定性挂载并原子落位,消除 mountinfo 解析的 TOCTOU 竞态 ✓ 正确答案
C 新 API 只能用于只读挂载
D 新 API 与旧 mount(2) 没有区别
#

6. FSMOUNT_CLOEXEC 在容器场景防止 fd leak 到子进程的工程价值?

A 它让挂载上下文 fd 在 fork 时关闭
B 它用于提升挂载性能
C 它防止挂载上下文 fd 在 exec 时泄漏到子进程,保护容器权限边界 ✓ 正确答案
D 它只影响只读挂载
#

7. folio 在 page cache 的 page_ref_add/sub 在 compound page(2MB/1GB THP)的工程价值?

A folio 为每个子页单独维护 refcount
B folio 不适用于 THP
C folio 通过单一 refcount 批量管理 compound page,减少原子操作与锁竞争 ✓ 正确答案
D page_ref_add 是每次操作的必备前提
#

8. kswapd 在 MGLRU(Multi-Gen LRU)的 lru_gen_look_around 在 walk_mm 与 page_referenced 的工程价值?

A 它利用页访问局部性一次判定相邻多个页的 liveness,减少 page_referenced 的重复页表遍历 ✓ 正确答案
B 它只检查单个页的引用
C 它替代了 kswapd 的全部工作
D 它只用于匿名页
#

9. sched_ext GA 后发行版内核是否仍允许 bpf sched-ext builtin scheduler(scx_bpfland)作为 fallback?

A 发行版内核默认硬编码 scx_bpfland 为 fallback
B sched_ext 已完全移除 CFS
C 框架受 CONFIG_SCHED_CLASS_EXT 门控,scx_bpfland 需主动加载,卸载时回退到 CFS ✓ 正确答案
D 发行版一律禁用 sched_ext
#

10. epoll_wait 在 edge-triggered(EPOLLET)模式下 atomic event read 协同的工程边界?

A 内核会持续通知直到数据读完
B ET 模式无需重新武装 fd
C 用户必须用非阻塞循环读尽数据并以 EAGAIN 结束,否则会漏事件 ✓ 正确答案
D ET 模式只适用于读 fd
#

11. folio_batch(folio queue)替代 lruvec page list 在 lockless batched reclaim 操作的工程价值?

A 它逐页持有 lruvec 锁
B 它只用于匿名页
C 它批量收集 folio 后统一处理,减少 lruvec 锁竞争,实现高效批量回收 ✓ 正确答案
D 它完全取消了锁
#

12. lockdep 如何通过锁获取图检测潜在死锁环,irq-safe 与 irq-unsafe 锁序混用为何会被告警?

A 只有在实际死锁发生后才告警
B lockdep 不处理中断上下文
C irq-safe 与 irq-unsafe 混用是安全的
D 通过锁获取环检测及 irq-safe/unsafe 上下文交叉提前暴露潜在死锁 ✓ 正确答案
#

13. rwsem 相比自旋读写锁在长临界区下的睡眠语义是什么,写者饥饿问题在内核实现中如何被缓解?

A rwsem 在竞争时自旋忙等
B rwsem 在长临界区下睡眠等待,通过写者优先与 handoff 机制缓解写者饥饿 ✓ 正确答案
C rwsem 只适合短临界区
D rwsem 会导致写者永远饥饿
#

14. per-CPU 变量配合 preempt_disable/this_cpu_* 提供怎样的并发保证,它与加锁相比省去了什么?

A 它提供跨 CPU 的全局一致性
B 配合 preempt_disable/this_cpu_* 在单 CPU 上无锁安全,省去锁的开销与 cacheline 争用 ✓ 正确答案
C 它必须加锁才能访问
D 它只能用于统计
#

15. raw_spinlock 与 spinlock 在 PREEMPT_RT 补丁下的行为差异是什么,为何 RT 要把多数自旋锁转为可抢占的睡眠锁?

A RT 下 spinlock 与 raw_spinlock 完全相同
B raw_spinlock 在 RT 下会睡眠
C RT 下所有锁都自旋
D RT 下 spinlock 转为可睡眠的 rt-mutex,可抢占;raw_spinlock 保持自旋,用于不可睡眠的底层路径 ✓ 正确答案
#

16. seqlock 如何在频繁读、偶发写的场景提供无锁读路径,读侧检测到写冲突时如何重试?

A 读者通过序列号无锁读取,检测到写冲突时重试;写者排他 ✓ 正确答案
B 写者无锁,读者排他
C 读者与写者都自旋
D 读者持锁读取
#

17. 中断处理中为何常用 spin_lock_irqsave 而非 spin_lock,它防止了哪类自死锁?

A 它只用于多核
B 它只用于软中断
C 它与 spin_lock 完全等价
D 它保存并禁用本地中断,防止中断处理函数重入同一把锁导致的自死锁 ✓ 正确答案
#

18. RCU 的 call_rcu 异步回收与 synchronize_rcu 同步等待在延迟与批量上如何取舍?

A call_rcu 同步阻塞等待
B synchronize_rcu 永不阻塞
C 两者完全相同
D call_rcu 异步批量回收不阻塞,延迟可接受;synchronize_rcu 同步阻塞等待直到读者退出,确定性高 ✓ 正确答案
#

19. sched_ext 与 sched_debug tracepoint 协同在生产 scheduler 行为观测的工程场景?

A sched_ext 调度决策不可观测
B sched_ext 无法结合 sched_debug
C tracepoint 只能用于 CFS
D 通过 sched tracepoint 与 BPF 观测调度回调的耗时、队列长度与公平性,支撑生产调度行为诊断与调优 ✓ 正确答案
#

20. mount_setattr 的 MOUNT_ATTR_NOSYMFOLLOW / NODEV / NOSUID / NOEXEC 在挂载点属性调整的工程价值?

A 只能在挂载时设置,无法动态调整
B 这些属性只影响性能
C 可动态对挂载点调整 NOSUID/NODEV/NOEXEC/NOSYMFOLLOW,用于容器挂载点运行时加固 ✓ 正确答案
D 只能全部设置或全部不设置
#

21. epoll_wait 的 EPOLLEXCLUSIVE 在 multi-waiter 监听同一 fd 时防止 thundering-herd wakeup 的工程价值?

A 它唤醒所有等待者
B 它使内核只唤醒一个排他 waiter,避免 multi-waiter 监听同一 fd 的惊群唤醒 ✓ 正确答案
C 它只用于写事件
D 它降低事件处理能力
#

22. ep_poll_callback 在 wake_up 路径通过 pollwake_nested 加持 smp_mb__after_atomic 在 writer-reader lock 顺序的工程价值?

A 它不需要任何内存屏障
B 它只用于单核
C pollwake_nested 处理嵌套唤醒,smp_mb__after_atomic 保证跨 CPU 事件可见性顺序,避免唤醒竞态 ✓ 正确答案
D 内存屏障只影响性能不影响正确性
#

23. epoll_wait 的 EPOLLWAKEUP 在 system suspend 期间 wakeup source 维护的工程价值?

A 它把 epoll 等待注册为唤醒源,防止挂起期间事件丢失,确保事件到达时能唤醒系统 ✓ 正确答案
B 它让系统立即挂起
C 它只影响性能
D 它与挂起无关
#

24. khugepaged 使用 mm_slots_hash 全局哈希表替代 global_mm_list 的扫描工程价值?

A 它比 global_mm_list 扫描更慢
B 它不改变扫描方式
C 它只用于单进程
D 它用哈希索引替代线性链表的 mm 扫描,降低遍历开销与锁竞争,提升 khugepaged 效率 ✓ 正确答案
#

25. spinlock 与 mutex 在中断/软中断上下文中的适用边界有何不同,为何中断上下文不能使用 mutex?

A 中断上下文不能睡眠,只能用 spinlock 等不睡眠锁;mutex 会睡眠,故不可用 ✓ 正确答案
B 中断上下文可以用 mutex
C mutex 在中断上下文自动变成自旋
D 中断上下文可以任意使用锁
#

26. sched_ext 的 kfunc scx_bpf_dsq_insert 在 FIFO/LIFO 模式对 DSCP 多队列分配的工程场景?

A 只有 FIFO 一种模式
B 支持 FIFO/LIFO 模式插入到指定 DSQ,通过多队列拓扑实现差异化调度策略 ✓ 正确答案
C 只能插入全局队列
D 它不能选择队列
#

27. maple tree 在 mmap write lock 路径通过 mt_set_rcu / mt_invalidate 在 vma_merge 失败回滚的工程场景?

A mt_set_rcu 开启 RCU 模式,mt_invalidate 使半成品节点失效并延迟回收,保证 vma_merge 失败回滚时的并发一致性 ✓ 正确答案
B 失败时无需回滚
C 回滚会阻塞所有读者
D vma_merge 不会失败
#

28. maple tree 的 ma_dead_node 在 RCU grace period 后回收的 slot 复用机制?

A 删除节点立即释放内存
B 节点标记为 dead 后脱离树,等 RCU grace period 结束后才回收,slot 此时才可安全复用 ✓ 正确答案
C 读者可继续使用 dead 节点的数据
D 节点永不回收
#

29. maple tree v3 与 xarray 在 index > 2^31 大 VMA 空间的查找复杂度差异?

A xarray 是 O(1)
B 两者都是 O(log n),maple tree 通过更紧凑的节点布局在相同空间下路径更短、cache 更好 ✓ 正确答案
C maple tree 是 O(n)
D 大 index 下 xarray 退化为线性
#

30. fast-commit 在 fc_replay 失败时 fallback 到 jbd2 full journal 的 commit_tail 路径?

A fc_replay 失败时回退到 jbd2 全量 journal 重放,通过 commit_tail 定位完整提交点,保证一致性 ✓ 正确答案
B 失败时直接丢弃 fast-commit 记录
C 失败时忽略恢复
D fast-commit 失败会导致文件系统损坏
#

31. ext4 在 6.16 引入 iomap-based fast-commit 在 extent tree updates 的 metadata 写入工程价值?

A 它仍使用 buffer_head
B 它基于 iomap 抽象捕获 extent tree 变更,简化元数据写入并提升记录紧凑性与重放效率 ✓ 正确答案
C 它只影响读路径
D 它移除了 fast-commit
#

32. fsmount_at() 在 mount namespace 之间迁移挂载点的工程边界?

A 可以任意迁移,无需权限
B 允许把构造好的挂载迁移到目标 namespace,但受挂载权限与安全校验约束,防止挂载逃逸 ✓ 正确答案
C 只能迁移只读挂载
D 迁移后无法回收
#

33. folio_flags 在 PG_reclaim/PG_referenced/PG_writeback 单一 bit 的 atomic 读写工程价值?

A 这些位不需要原子操作
B 通过原子位操作维护 PG_reclaim/PG_referenced/PG_writeback 等状态,保证回收与写回路径并发正确 ✓ 正确答案
C 这些标志只在单核有效
D 原子操作只影响性能不影响正确性
#

34. folio_put_refs 在 multi-folio large object 的 refcount batch 减计数工程价值?

A 它一次批量减去多个引用,减少原子操作与 cacheline 竞争,提升大 folio 释放效率 ✓ 正确答案
B 它只能每次减一个引用
C 它用于增加引用
D 它不保证 refcount 安全
#

35. khugepaged 在 collapse_pte_mapped_thp 通过 hugepage_vma_check 的 VMA flag 校验工程价值?

A 折叠前不校验 VMA
B 所有 VMA 都可折叠
C 通过 hugepage_vma_check 校验 VMA flag,禁止对 VM_NO_THP/VM_SPECIAL 等区间折叠,保证折叠安全 ✓ 正确答案
D 校验只影响性能
#

36. khugepaged 在 defer scan 通过 hugepage_defrag_ratio 在 MADV_COLLAPSE 触发时机工程价值?

A 它控制 khugepaged 在碎片整理时机的激进程度,权衡扫描开销与折叠成功率 ✓ 正确答案
B 比例越高越激进地移动页
C 它只影响 MADV_COLLAPSE 的返回值
D 它与 khugepaged 无关
#

37. khugepaged 在 COW 路径与 collapse 失败的 khugepaged_collapse_pte_mapped_thp 回退工程边界?

A 失败时保留半折叠状态
B 折叠前检查 COW 等条件,失败时回退到原 PTE 映射,保证不破坏 COW 语义与映射正确性 ✓ 正确答案
C 折叠会破坏 COW
D 折叠失败会导致内核崩溃
#

38. kswapd 的 shrink_node_memcgs 在 cgroup-aware reclaim 的 PG_scanned 计数工程价值?

A 通过 PG_scanned 标记已扫描页,追踪回收进度,支撑多 cgroup 间公平、高效的回收 ✓ 正确答案
B 它不按 cgroup 回收
C PG_scanned 只用于统计不用于回收
D 每个 cgroup 独立重复扫描所有页
#

39. kswapd 在 balance_pgdat 通过 pgdat->kswapd_high 在 zone balance 的工程价值?

A kswapd_high 是回收的上限
B kswapd_high 与 kswapd 的回收阈值无关
C 当 zone 空闲内存达到 high 水位即停止回收,balance_pgdat 据此在 zone 间平衡回收 ✓ 正确答案
D 回收会一直进行,永不停止
#

40. kswapd 在 nr_to_reclaim 目标的 per-zone reclaim budget 计算工程边界?

A 每个 zone 都回收相同数量
B 回收预算无上限
C 回收预算与 zone 无关
D 按各 zone 压力与水位分配回收预算,受 nr_to_reclaim 总量与 high 水位约束,避免过度回收 ✓ 正确答案
#

41. mm_struct 重构将 mm_count(ref count)与 mm_users 拆分后的 mmput 与 mmdrop 的工程价值?

A mm_users 管理用户态上下文计数,mmput 在归零时清理;mm_count 管理结构体引用,mmdrop 在归零时释放结构体 ✓ 正确答案
B mm_users 决定结构体释放,mm_count 决定用户清理
C 两者完全相同
D mmdrop 只影响用户态
#

42. mm_owner 在 cgroup memory accounting(memory.peak)的工程价值?

A mm_owner 与内存记账无关
B mm_owner 只影响用户态
C memory.peak 记录的是当前值而非峰值
D mm_owner 确定 mm 内存归属的 cgroup,memory.peak 记录内存峰值,共同支撑准确的 cgroup 内存记账与监控 ✓ 正确答案
#

43. mm_struct 在 CONFIG_PER_VMA_LOCK 的 mm_lock_seq 在 vma lock reader 的工程价值?

A mm_lock_seq 记录 VMA 锁版本,读者检测到变化即回退到 mmap 写锁重新查找,支持 per-VMA lock 下的安全只读访问 ✓ 正确答案
B 读者不需要检测 VMA 变化
C mm_lock_seq 只用于写路径
D 读者永远使用缓存值
#

44. mm_struct 的 mm_flags 在 MMF_INIT_MASK 在 dup_mmap 的初始化工程价值?

A 它定义 fork 时需从父 mm 继承的标志位掩码,精确控制 mm_flags 的继承与重置,保证子 mm 状态正确 ✓ 正确答案
B 它复制所有标志位到子 mm
C 它不参与 mm 复制
D 它只影响文件系统
#

45. RCU 的 grace period 与 synchronize_rcu 的回收语义是什么,读侧与写侧各自承担怎样的开销?

A 读侧需要加锁
B 读侧需要等待 grace period
C 写侧开销极低
D grace period 保证所有读者退出后旧数据才可回收,读侧近乎零开销,写侧承担等待与回收成本 ✓ 正确答案