大页与内存映射

共 20 题
#

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 回收