CPUID与Cache信息的获取

CPUID与Cache信息的获取

 

上周一位同事问道getconf与sysconf()在Xeon E5620机器上获取的Cache相关信息为全0的问题。通过分析glibc中sysconf()的实现,现已查明。

在我们的环境中,glibc的版本为2.5。而实现sysconf()函数时,采用了CPUID指令。但是并没有考虑到该指令最新的变化。故在E5620处理器上得到的Cache相关信息全部为0。

我们首先说一下CPUID指令。在是X86平台上用于获取处理器相关信息的指令。比如处理器的字符串标识、支持的功能集合、Cache信息、TLB信息等。在较老的处理器上,我们使用此指令获取Cache信息的方法为:将EAX寄存器置为2,然后调用CPUID指令。指令的返回值保存在EAX、EBX、ECX、EDX寄存器中。看官可尝试使用以下代码。

voidget_cache_info()

{

    unsigned int eax = 0;

    unsignedint ebx = 0;

    unsigned int ecx = 0;

    unsigned int edx = 0;

    asm volatile ("mov $2, %%eax; cpuid" : "=a"(eax), "=r" (ebx),

                            "=c" (ecx), "=d" (edx) :);

 

       printf("eax: %x\n", eax);

       printf("ebx: %x\n", ebx);

       printf("ecx: %x\n", ecx);

<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值