TLB,CPUID和大页面?

时间:2019-06-03 15:11:52

标签: c linux huge-pages

如果我将64MB的2MB大页面装载到/ mnt / huge2mb,那么这些页面正在使用哪些TLB条目?我在自己的C程序中mmap()编辑了它们。

cpuid的输出:

   cache and TLB information (2):
      0x63: data TLB: 1G pages, 4-way, 4 entries
      0x03: data TLB: 4K pages, 4-way, 64 entries
      0x76: instruction TLB: 2M/4M pages, fully, 8 entries
      0xff: cache data is in CPUID 4
      0xb6: instruction TLB: 4K, 8-way, 128 entries
      0xf0: 64 byte prefetching
      0xc3: L2 TLB: 4K/2M pages, 6-way, 1536 entries

我相信这些2MB的巨大页面属于数据,因此它们使用数据TLB条目。

但是,数据TLB条目适用于1G和4K页面。

那么,对于那些2MB的大页面使用了什么TLB条目? L2 TLB条目?如果是,那么L2 TLB是什么?是否同时用于数据和指令?如果是,则4K页的数据重叠-数据TLB和L2 TLB。那么,用于4K页面的额外64个条目的目的是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,我不一定要假设来自CPUID本身的数据是正确的(多年来存在各种各样的勘误),如果CPUID的数据正确,则我不一定会假设Linux中的代码正确地对其进行了解释(多年来,确定高速缓存特征已变得一团糟)。

不知道CPU是什么(并且无法检查CPUID和Linux是否正确报告了信息);根据显示的信息,我很容易怀疑0xc3: L2 TLB: 4K/2M pages, 6-way, 1536 entries用于指令和数据,并将用于您的2个MiB页面,但是当使用这2个MiB页面时,CPU也会拆分2个MiB TLB条目分成几部分,并使用0x03: data TLB: 4K pages, 4-way, 64 entries来表示2个MiB页面中的(4 KiB个)。