论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB


此次分享的是发表在ISCA'17的题为《Rethinking TLB Designs in Virtualized Environments: A Very Large Part-of-Memory TLB》的论文。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
一 Introduction


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

在虚拟化环境中,造成性能开销的主要原因之一是内存虚拟化。在guest OS上执行的应用程序将生成需要转换为host physical addresses(hPA)的guest virtual addresses(gVA)。由于physical memory只受到hypervisor的控制,因此在guest OS上的应用程序完成一次完整的内存访问之前,需要浏览两组page tables:一个由guest OS实现(gVA->gPA),另一个由hypervisor实现(gPA->hPA)。

随着cores和大数据集数量的增加,传统的L2 SRAM TLBs不能保存工作集中所有pages的翻译entry。通过增加L2 TLB大小以减少TLB翻译entry丢失是不可取的,因为更大的SRAM TLB会造成更高的访问延迟。

文章提出了POM-TLB,这是一个L3 TLB,属于内存的一部分。虽然TLB是专用结构,通常不可寻址,但POM-TLB被映射到内存地址空间,并存储在DRAM,它可以容纳更多的翻译entry。

通过将POM-TLB作为内存的一部分,就可以自动利用不断增长的L2和L3的data cache。虽然data cache已经缓存了page table,但每次翻译都需要多个page table,而一个POM-TLB就足以完成虚拟化转换。因此,缓存TLB entry比缓存page table更有效益。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
System Level Organization


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

大多数现代处理器都拥有私有的多级TLB,文章假设TLB组织类似于Intel Skylake,拥有两个级别的TLB。Figure 1显示了POM-TLB的总体框架,文章在私有L2 TLB后面增加了一个共享的Large L3 TLB。一个L2 TLB在miss后会查找Large L3 TLB,如果依旧miss,就会启动一个page walk。在集成于处理器上的新兴的一种die-stacked DRAM中实现POM-TLB提供了带宽和可能较小的延迟优势。die-stacked DRAM具有类似于DRAM的组织,通常具有访问粒度,比如64B。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

Figure 1: POM-TLB Overview


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
三 POM-TLB Organization


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

Figure 2展示了在具有多个bank的die-stacked DRAM的单个channel中,POM-TLB的元数据格式。每行可以容纳多个TLB entry(行大小为2KB),每一个entry都有一个vaild、VM ID、Process ID、PA和VA,为了方便在虚拟化平台上的翻译,还使用了VM ID来区分不同的虚拟机地址。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

Figure 2: Metadata Format for POM-TLB


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
四 Support for Two Page Sizes


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

为了同时支持small page(4KB)和large page(2MB)的TLB entry,并避免在一个单一的TLB结构中处理两种page size的复杂性,文章简单地将TLB划分为两个entry,一个专门用于容纳4KB的page entry(POM_TLBSmall)和一个专门容纳2MB的page entry(POM_TLBLarge)。在文章中,它们大小是静态设置且不变的。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
五 Caching TLB Entries


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

虽然L1 TLB和L2 TLB是为快速查找而设计的,但POM-TLB是为更大的覆盖率而设计的,这样基于DRAM的实现会导致更高的访问延迟。为了缓解这一点,文章将POM-TLB映射到物理地址空间中。通过使TLB可寻址,实现了在date cache中缓存TLB entry的好处。POM_TLBSmall和POM_TLBLarge都是被分配的地址范围。一个包含N个集合的POM-TLB被分配一个64*N字节的地址范围,因为每个集合包含16字节的TLB entry。通过提取VA的log2N位(在使用VM ID位进行XOR均匀分布集映射之后),将L2 TLB被miss的VA转换为POM_TLB索引集。对于POM_TLBSmall,VA映射到的集合内存地址为:


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB



其中,Base_AddrPOM_TLB为POM_TLB的起始地址。Base_AddrPOM_TLB地址根据页面大小而不同,因为POM_TLB在物理上是在large page和small page之间划分的。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB




论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
Cache Bypass Prediction


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

在工作负载中,数据负载/存储对data cache的访问率远远超过L2 TLB丢失的速率,cache往往包含很少的POM-TLB条目,因为它们被驱逐,为填补数据丢失腾出空间。在这种情况下,在到达POM-TLB之前查找data cache在功率和延迟方面都是浪费的。因此,文章合并了一个1-bit bypass predictor来绕过cache。如Figure 3所示,cache旁路预测在POM-TLB地址生成后生效,因为需要这个新地址来访问POM-TLB。一旦生效,该请求将通过在data cache中保存数十个查找周期来直接访问POM-TLB。

文章的方案依赖于L3 TLB可寻址,以实现在data cache中的高命中率以及降低访问延迟。Figure 3显示了POM-TLB的总体流程。L2 TLB misses首先访问page size predictor。如果predictor指示了cache bypass,那么MMU将根据预测的页面大小直接访问预测的POM-TLB。如果找到一个translation entry,则返回PFN(Physical Page Frame)。如果没有指示bypass,则MMU将检查data cache中的POM-TLB entry。在常见的情况下,predictor并不能绕过cache。首先对L2D$进行预测的POM-TLB集合位置的地址进行探测。如果找到与正确的VA,VM_ID相匹配,则通过返回相应的PFN,使用单个cache访问来完成翻译。如果没有找到匹配项,那么MMU将类似地探测L3D$。如果探测到的POM-TLB地址在L2D$和L3D$中都没有丢失,那么MMU将计算一个新的POM-TLB地址(对应于未预测的大小),并启动cache查找。如果新的POM-TLB地址在两个级别的数据缓存中都未丢失,则会启动page walk。


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

Figure 3: POM-TLB Access Flow Chart


论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

若有理解不当之处,还请批评指正。



论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB
END


原文始发于微信公众号(COMPASS Lab):论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB

版权声明:admin 发表于 2022年11月4日 下午5:20。
转载请注明:论文分享 | 重新思考虚拟化环境中的 TLB 设计:A Very Large Part-of-Memory TLB | CTF导航

相关文章

暂无评论

暂无评论...