当我检查CPUID 0x80000001u:EDX:26时,我得到1,即我的CPU说它支持1g -page。但是当我做CPUID 0x80000019u EAX - EDX为零时,即我的CPU说没有任何大页面tlb (Ryzen 7 1800X, Ubuntu Linux)。另一台PC (Phenom X4 945, Debian)报告1G-pages)。
你检查过勘误表了吗?您是否检查过Wikichip或其他CPU架构详细信息页面,看看是否有专用的TLB条目,或者它们是否由TLB条目处理,也可以处理2M大的页面或其他东西?
https://www.7-cpu.com/cpu/Zen.html表示没有用于1G页面的L2 ITLB项,但是L0I和L1I TLB项可以保存任何页面大小。
对于数据tlb, 1G页可以由L1dTLB处理,但不能由L2dTLB处理,同样根据7个cpu的测试和解码CPUID结果和/或其他发布的数据。
Wikichip同意:
ITLB:
- 8条目L0 TLB,所有页面大小
- 64项L1 TLB,所有页面大小
- 512项L2 TLB,没有1G页
- 平价保护
DTLB
- 64条目L1 TLB,所有页面大小
- 1,532项L2 TLB,无1G页
IDK这些信息应该如何反映在CPUID结果中,但这是Zen 1所拥有的,并且您应该根据CPUID结果寻找解释。(如果没有任何关于错误的TLB信息的勘误表)
请注意,Zen 1上没有TLB条目可以只能缓存1G转换;任何能够缓存1G大页条目的条目都能够容纳其他大小的条目。
(Intel的做法不同,对于不同的页面大小有单独的tlb。https://www.7-cpu.com/cpu/Skylake.html/https://en.wikichip.org/wiki/intel/microarchitectures/skylake_(client)#Memory_Hierarchy -为每个不同大小的页面单独的L1i和d tlb(除了1G页面没有L1iTLB)。统一的L2TLB,又名STLB,有大量的4k+2M条目,1G页面有16个条目。