如何使用 cpuid 获取 TLB 页面大小

Posted

技术标签:

【中文标题】如何使用 cpuid 获取 TLB 页面大小【英文标题】:How to get TLB page size with cpuid 【发布时间】:2012-05-22 09:34:47 【问题描述】:

对于英特尔,我使用:

mov, eax, 2h
cpuid

它给出“描述符解码值” - 好的;

对于 AMD,我使用:

mov, eax, 80000005h
cpuid

它给出了 eax 中 4MB(ebx 中 4KB)的关联性和条目。

这里是:

EAX = FF30FF10 EBX = FF30FF20" FF - 全副。数据,48d 条目数据,FF - 完整关联。 instr, 16d 条目 instr

所以我有 4KB 和 4MB 还是什么?

附:我是对的,TLB 页面和 L1 缓存 - 不同的东西?或者也许是 L1 指令。缓存大小是我需要的?

【问题讨论】:

据我了解,现代架构同时提供 4kB 和 4MB。 这意味着如果我在 EAX\EBX 中得到正确的输出,我可以说它的 4MB\4KB? 我的小姐,amd 文档说“对于 2Mb 或 4MB 页面”。 “TLB 缓存大小为 64 项”表示如果 L1=64kb,那么 TLB 页面大小=64*64kb? 感谢帮助,但现在我很困惑 :) 我有一个 TLB 任务:1)关联性,2)条目,3)大小。我应该如何回答尺寸? 【参考方案1】:

这个entry on wikipedia 可以帮助您消除一些关于不同 TLB 大小的困惑。它在“多个 TLB”的标题下:

例如,英特尔的 Nehalem 微架构具有四路集关联 L1 DTLB,其中 64 个条目用于 4 KiB 页面,32 个条目用于 2/4 MiB 页面,L1 ITLB 具有 128 个条目用于 4 KiB 页面,使用四向关联和 14 个用于 2/4 MiB 页面的完全关联条目(ITLB 的两个部分在两个线程之间静态划分)1 和一个用于 4 KiB 页面的统一 512 条目 L2 TLB,[2] 都是 4 路关联的。[3 ]

【讨论】:

以上是关于如何使用 cpuid 获取 TLB 页面大小的主要内容,如果未能解决你的问题,请参考以下文章

汇编实现获取CPU信息

如何使用 CPUID 指令正确获取 x86 CPU 功能? [复制]

如何使用 CPUID 查找主板信息?

WMI 如何获取 ProcessorId?

__get_cpuid 的可移植性如何?

如何调用 CPUID 叶 7 和子叶 0?