2

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

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 个条目的目的是什么?

谢谢!

4

1 回答 1

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(4 KiB 件)2 MiB 页面。

于 2019-06-04T03:08:30.007 回答