# 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 保证所有读者退出后旧数据才可回收,读侧近乎零开销,写侧承担等待与回收成本 ✓ 正确答案