如果我将 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个条目的目的是什么?
谢谢!
首先,我不一定假设来自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 片段(。