TLB Shootdown 与 IPI 风暴

共 18 题
#

1. TLB shootdown 在多核页表修改时跨核 invalidate 的 IPI 风暴工程价值?

A TLB 是全局共享的,无需跨核失效
B IPI 风暴只影响单核系统
C 页表修改后需通过 IPI 让其他核失效对应 TLB,频繁操作会形成 IPI 风暴,工程上通过批处理与按需失效缓解 ✓ 正确答案
D TLB shootdown 只发生在你主动调用时,与页表修改无关
#

2. ARM64 TLB invalidation by VA(TLBI)指令与 x86 INVLPGB / INVPCID 的实现差异?

A INVPCID 负责广播失效所有地址
B 两者都完全依赖软件 IPI
C ARM64 靠硬件广播的 TLBI 完成跨核失效,x86 传统依赖软件 IPI,INVLPGB 是 x86 的硬件广播演进 ✓ 正确答案
D ARM64 的 TLBI 无法按虚拟地址失效
#

3. mm-tlb shootdown 在 Linux kernel 的 mm_tlb_flush_nested vs mm_tlb_flush_sync 接口?

A flush_sync 强制同步失效,flush_nested 用嵌套计数避免重复 shootdown ✓ 正确答案
B 两者都用于非同步失效,从不等待
C flush_nested 会强制发出更多 IPI
D 两者只在 ARM64 上存在
#

4. ASID 复用与 broadcast TLB flush 在频繁进程切换的开销?

A ASID 复用不需要任何 flush,直接切换
B ASID 复用前需广播失效旧 ASID 的 TLB 条目,频繁复用会产生跨核 flush 开销 ✓ 正确答案
C ASID 数量无限,永不复用
D broadcast flush 只在单核系统上发生
#

5. TLB shootdown 在 cgroup v2 memory 压力下的延迟放大?

A cgroup 内存压力不会触发任何回收
B 内存压力下 TLB 会自动失效,无需 shootdown
C shootdown 只发生在空闲核上,不影响延迟
D 回收触发的 unmap 会引发大量 shootdown 与 IPI,叠加延迟形成放大效应 ✓ 正确答案
#

6. Linux 的 lazy TLB 与 deferred shootdown,为什么切换回原进程时若 TLB 未失效可以跳过 IPI,mm refcount 如何辅助判断?

A 进程切出后 TLB 必须立即全量失效
B 进程切出后其 TLB 可保持 lazy,若切回前无其他核修改该 mm 则复用旧 TLB 跳过 IPI,mm refcount 帮助判断是否仍有活跃核 ✓ 正确答案
C mm refcount 无法用于判断是否需要 flush
D lazy TLB 只在单核系统上有效
#

7. shrinker API(如 struct shrinker)注册 callback 减少 cache 的工程价值?

A 它只在系统启动时调用一次
B 它允许子系统注册回调,在内存压力下统一回收各自缓存 ✓ 正确答案
C 它只用于回收进程页,不涉及缓存
D 它禁止内核在内存紧张时回收缓存
#

8. slab shrinker(kmem_cache_reclaim)与 page cache shrinker(drop_pagecache)的工程差异?

A slab shrinker 回收内核对象缓存,page cache shrinker 回收文件页缓存,两者实现粒度不同 ✓ 正确答案
B 两者回收完全相同的对象
C page cache shrinker 只回收内核对象
D slab shrinker 不参与内存回收
#

9. vmscan 的 scan balance(anon vs file inactive)策略?

A vmscan 总是先回收 anon 页,与 file 无关
B swappiness 决定 anon 与 file 的扫描倾斜,默认倾向优先回收 file 页而少 swap anon 页 ✓ 正确答案
C swappiness 只影响文件缓存大小,不影响 anon
D vmscan 从不回收文件页
#

10. memory.events 的 low、high、max、oom 计数在 SLA 监控的工程价值?

A 通过 low/high/max/oom 事件计数量化内存压力,用于 SLA 监控与告警 ✓ 正确答案
B 它只记录 CPU 使用率,与内存无关
C 它每个事件只记录一次,无法统计
D 它只在 OOM 时才有意义
#

11. memory.lowmax(保护等级上限)的工程边界?

A memory.lowmax 与 memory.low 无关
B memory.lowmax 是硬上限,超过即 OOM
C memory.lowmax 限制 cgroup 可获得保护量的上限,防止保护无限放大挤占兄弟 cgroup ✓ 正确答案
D memory.lowmax 只影响文件缓存
#

12. cgroup v2 memory.low(soft guarantee)与 memory.high(soft limit)的边界?

A 两者含义完全相同
B low 是硬保证,内存再缺也不回收
C high 超过立即 OOM 杀进程
D low 是软保护下限,high 是软上限(超了触发回收与 throttle),两者都非强制 OOM ✓ 正确答案
#

13. memory.low 的"protection"语义与 memory.min 的强制 guarantee 差异?

A min 只在超过后触发回收
B low 比 min 更强制
C 两者都允许任何情况下被回收
D min 是强制保证不可回收,low 是软保护尽力而为 ✓ 正确答案
#

14. memory.high 触发 reclaim(throttle)vs memory.max 触发 OOM kill 的工程价值?

A 两者都只影响文件缓存
B 两者都在超限时立即 OOM kill
C high 是硬上限,max 是软上限
D high 触发 reclaim + throttle 减速,max 触发 OOM kill,形成从慢到停的分级策略 ✓ 正确答案
#

15. flush_tlb_range 与 flush_tlb_mm 的代价差异,为什么只失效部分地址空间可能比全量失效更复杂,何时应选择全量失效?

A 全量失效总是比范围失效代价高
B 范围失效需精确逐条定位、实现更复杂,范围很大时全量失效反而更简单高效 ✓ 正确答案
C 范围失效无法按地址失效 TLB
D flush_tlb_mm 只失效一个页面
#

16. ARM64 为何能用硬件广播的 TLBI 免去软件 IPI,与 x86 软件 shootdown 在可扩展性上的差异?

A 两者在可扩展性上完全相同
B x86 完全没有软件 IPI,全靠硬件广播
C ARM64 的 TLBI 不能广播,需逐核发 IPI
D ARM64 用硬件广播 TLBI 免去软件 IPI,x86 传统靠软件 IPI 精确选择核,两者在广播/精确间取舍 ✓ 正确答案
#

17. cgroup v2 memory reclaim 在 hierarchical 的逐级传播?

A 每个 cgroup 独立回收,互不影响
B reclaim 只作用于叶子 cgroup,忽略父级
C reclaim 沿 cgroup 树逐级传播,按各子 cgroup 的保护等级分配回收压力 ✓ 正确答案
D 层级化 reclaim 不支持继承限制
#

18. Linux 直接回收(direct reclaim)触发 shrink_inactive_list 与 kswapd 的协同?

A direct reclaim 是后台线程,kswapd 是同步回收
B kswapd 后台提前回收维持水位,direct reclaim 在分配失败时由分配线程同步回收兜底 ✓ 正确答案
C 两者从不共享扫描逻辑
D kswapd 只在进程退出时运行