# 1. THP(Transparent Huge Page)在 Linux 内核的角色? A THP 由内核自动将小页合并为大页,应用无需感知 ✓ 正确答案 B THP 需要应用显式调用 MAP_HUGETLB 才能使用 C THP 只能用于文件映射,不能用于匿名映射 D THP 与 hugetlbfs 完全等价,没有区别
# 2. huge page reservation(hugetlbfs)的 reserved vs free 内存? A HugePages_Total 是系统预留并固定给大页使用的总页数 ✓ 正确答案 B 预留的大页在 mmap 时动态从普通内存池分配 C HugePages_Free 表示还未被任何进程预留的大页数量 D 预留大页在空闲时可以被普通 malloc 使用
# 3. hugetlbfs 在 Linux 创建 huge page 文件系统的方法? A 先 mmap 大页,再挂载 hugetlbfs B 先预留大页(nr_hugepages),再挂载 hugetlbfs,然后 open 文件并 mmap ✓ 正确答案 C 只需设置 transparent_hugepage 即可,无需挂载 D hugetlbfs 需要在每个进程内独立创建
# 4. ARM64 64KB granule 在内存数据库下的巨大页友好度? A 64KB granule 使页表层级更多、TLB 更容易 miss B 64KB granule 通过更小的最小页增加内部碎片,非常适合随机小对象 C 64KB granule 单页覆盖更大连续内存,结合 contiguous bit 可提升 TLB 命中率 ✓ 正确答案 D 64KB granule 完全不支持大页
# 5. 为何 THP 在某些应用(Redis)下应禁用? A THP 会降低 Redis 的哈希表查找速度 B THP 无法在 Redis 上使用 C THP 使 fork 时 COW 以 2MB 为粒度复制,导致内存和 CPU 开销剧增 ✓ 正确答案 D THP 会损坏 Redis 的持久化文件
# 6. 2MB 与 1GB huge page 在内存数据库中的差异? A 1GB 大页 TLB 覆盖更大但预留门槛高、易受碎片影响 ✓ 正确答案 B 2MB 大页的 TLB 覆盖能力一定强于 1GB 大页 C 1GB 大页比 2MB 更容易预留和分配 D 两者在预留复杂度上完全相同
# 7. THP 分裂(split_huge_page)与 deferred split,内存回收、换出前为何必须把大页拆回小页,延迟分裂如何摊薄瞬时开销? A 大页换出时以整个大页为单位最省事,无需分裂 B 分裂大页没有任何开销 C 大页回收时只需更新一个 PTE 即可,无需分裂 D deferred split 通过延迟队列分批分裂大页,摊薄瞬时 CPU 开销 ✓ 正确答案
# 8. Linux 中 /proc/meminfo 中 HugePages_Total 与 HugePages_Free 含义? A HugePages_Total 表示当前空闲的大页数 B HugePages_Free 表示已分配给进程的大页数 C HugePages_Free - HugePages_Rsvd 表示真正未被使用的大页数 ✓ 正确答案 D HugePages_Total 与 nr_hugepages 无关
# 9. madvise(MADV_HUGEPAGE) 与 madvise(MADV_NOHUGEPAGE) 的应用场景? A MADV_HUGEPAGE 提示内核该区域可合并大页,MADV_NOHUGEPAGE 则禁止合并 ✓ 正确答案 B MADV_HUGEPAGE 强制内核立即分配大页,与 THP 模式无关 C 两者都只能配合 hugetlbfs 使用 D MADV_NOHUGEPAGE 会立即释放该区域的所有页
# 10. shmem(tmpfs)匿名页与 file-backed 页在 THP 下的合并策略? A THP 主要合并匿名页和 shmem 页,file-backed 页通常不合并 ✓ 正确答案 B 两者都会被 THP 合并,无区别 C file-backed 页因有文件 backing 而更容易被合并 D THP 只能合并 file-backed 页
# 11. /dev/hugepages mount 与 MAP_HUGETLB flag 的关系? A MAP_HUGETLB 需要先在 /dev/hugepages 中创建文件 B MAP_HUGETLB 与普通 4KB 页映射没有区别 C 两者只能二选一,不能同时使用 D /dev/hugepages 是 hugetlbfs 挂载点,映射其文件即可获得大页;MAP_HUGETLB 是匿名大页映射 flag ✓ 正确答案
# 12. Linux 启动参数 hugepages= 与 nr_hugepages 在 boot-time 静态预留? A 运行时调整 nr_hugepages 更容易成功预留 1GB 大页 B 启动时预留利用尚未碎片化的连续内存,更容易成功预留大页 ✓ 正确答案 C 两者在预留成功率上完全相同 D boot-time 预留会破坏普通内存分配
# 13. 大页(HugePage)的原理,如何减少 TLB miss 与页表开销? A 大页增加了页表层级,使 TLB 命中率下降 B 大页使单个 TLB entry 覆盖更大连续内存,并减少页表层级 ✓ 正确答案 C 大页只减少 TLB 容量,不减少页表内存 D 大页对 TLB miss 没有任何影响
# 14. mmap 的实现,文件映射与匿名映射、缺页处理如何? A mmap 调用时立即分配全部物理页 B 匿名映射的缺页会从磁盘读取文件内容 C mmap 只建立虚拟映射,物理页在首次访问缺页时按需分配 ✓ 正确答案 D 文件映射不会触发任何缺页
# 15. 虚拟化场景,guest 物理内存用大页 backing 如何减少 EPT 层级与 TLB miss,qemu 的 hugepages 配置有何价值? A 大页 backing 会增加 EPT 层级 B guest 物理内存用大页 backing 可减少 EPT 层级并降低 TLB miss ✓ 正确答案 C EPT 只有一级,与 TLB miss 无关 D qemu 无法配置大页 backing
# 16. khugepaged 后台扫描与 collapse,把小页合并成大页的触发与 CPU/内存代价,高负载下为何常建议关闭或按 VMA 提示控制? A collapse 将小页复制合并为大页,有 CPU 和内存开销,高负载下常建议关闭或按 VMA 控制 ✓ 正确答案 B collapse 无需复制页,开销为零 C khugepaged 只扫描 file-backed 页 D khugepaged 无法被关闭
# 17. 为何 Java -XX:+UseLargePages 在 1GB huge page 下减少 TLB miss 90%? A TLB miss 与页大小无关 B 1GB 大页比 4KB 页覆盖范围更小 C 1GB 大页使单个 TLB entry 覆盖 1GB,大堆的 TLB 覆盖大幅提升 ✓ 正确答案 D UseLargePages 只影响 GC,不影响 TLB
# 18. 透明大页(THP)与显式大页,数据库场景如何取舍? A THP 行为确定,最适合数据库 B 数据库通常选显式大页或关闭 THP,以获得确定性和低延迟 ✓ 正确答案 C 显式大页无需预留,更简单 D 两者在数据库场景下没有任何区别
# 19. 大页配置,hugepages 的预留与透明大页如何选择? A THP 也需要提前预留大页 B hugepages 是静态预留、显式使用;THP 是运行时自动合并、对应用透明 ✓ 正确答案 C 两者不能共存 D THP 通过 nr_hugepages 控制
# 20. hugetlb cgroup(hugetlb.* 限额)如何限制进程组的大页占用,与普通内存 cgroup 的差异? A hugetlb cgroup 限制的是可回收的普通内存 B hugetlb cgroup 通过 hugetlb.* 限额限制进程组的大页占用,与 memory cgroup 作用域不同 ✓ 正确答案 C 两者限定的资源完全相同 D 大页可以被 memory cgroup 回收