中文

在mmap中跳过重用页面的TLB刷新

操作系统 2024-09-18 v1 分布式、并行与集群计算

摘要

通过缓存CPU的转译后备缓冲器(TLB)中最近的地址转换,可以显著提高内存访问效率。然而,由于操作系统不知道哪个核心正在使用特定的映射,当取消映射地址时,它会在应用程序运行的所有核心上刷新TLB条目,以确保安全性和一致性。这些TLB刷新,称为TLB shootdowns,代价高昂,并造成了性能和可扩展性瓶颈。TLB shootdowns的一个关键贡献者是内存映射I/O,特别是在mmap-munmap循环和页面缓存回收期间。通常,相同的物理页面在回收后会重新分配给同一进程,这为操作系统提供了减少TLB shootdowns频率的机会。我们证明,通过稍微扩展mmap函数,可以避免这些“回收页面”的TLB shootdowns。因此,我们在mmap系统调用中引入并实现了“快速页面回收”(FPR)特性。FPR-mmap仅在页面退出其回收周期并分配给不同进程时触发TLB shootdowns,从而维护安全性。为了确保使用FPR-mmap指针时的一致性,我们对虚拟内存管理进行了微调,以避免ABA问题。与之前减轻shootdown影响的方法不同,我们的方法不需要任何硬件修改,并且在现有的Linux虚拟内存框架内透明地运行。我们在各种CPU、内存和存储设置(包括持久内存和Optane SSD)上的评估表明,FPR带来了显著的性能提升,在实际应用中提升高达28%,在微基准测试中提升高达92%。此外,我们表明TLB shootdowns是一个重要的瓶颈来源,以前被错误地归因于Linux内核的其他组件。

关键词

引用

@article{arxiv.2409.10946,
  title  = {Skip TLB flushes for reused pages within mmap's},
  author = {Frederic Schimmelpfennig and André Brinkmann and Hossein Asadi and Reza Salkhordeh},
  journal= {arXiv preprint arXiv:2409.10946},
  year   = {2024}
}