从英特尔软件开发人员手册3b,我开始认识MSR(10H)等于RDTSC。所以我想在程序中使用以下代码验证它:
asm volatile("rdmsr":"=a"(lo),"=d"(hi):"c"(0x10));
但是当我运行我的程序时,它显示出分段错误。然后意识到它只在特权级别0工作的警告。所以我用sudo访问再次运行程序。这次程序在没有seg错误的情况下运行,但asm volatile(..)之后的语句没有被执行。即使它有效。
如何让rdmsr在我的程序中工作? (我在支持这些计数器的i7核心上使用linux。我验证了它。)
部分相关帖子为Cannot read back from MSR和rdmsr,wrmsr from c/c++ code
答案 0 :(得分:2)
您将CPU /硬件权限(对执行指令,内存访问的限制)与OS /系统权限(操作系统功能,文件等)混淆。根应用程序不会以与普通用户的代码不同的CPU权限级别运行。它只是有更多的操作系统功能。
您必须从OS内核运行该指令,该内核通常在环0运行。