c - 如何从 C 程序访问 rdmsr?

标签 c linux performance intel

从intel software developer manual 3b,我了解到MSR(10H)等于RDTSC。所以我想在我的程序中使用如下代码验证它:

asm volatile("rdmsr":"=a"(lo),"=d"(hi):"c"(0x10));

但是当我运行我的程序时它显示段错误。然后 a 意识到它只在特权级别 0 下工作的警告。所以我再次使用 sudo 访问运行该程序。这次程序运行时没有出现段错误,但是 asm volatile(..) 之后的语句没有被执行。即便如此也无法解决问题。

我应该怎么做才能让 rdmsr 在我的程序中工作? (我在支持这些计数器的 i7 内核上使用 linux。我验证了它。)

一些相关的帖子是Cannot read back from MSRrdmsr,wrmsr from c/c++ code

最佳答案

您将 CPU/硬件权限(对执行指令的限制、内存访问)与操作系统/系统权限(操作系统功能、文件等)混淆了。根应用程序不会以与普通用户代码不同的 CPU 特权级别运行。它只是有更多的操作系统功能。

您必须从通常在 ring 0 运行的操作系统内核运行该指令。

关于c - 如何从 C 程序访问 rdmsr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160329/

相关文章:

c - 二维数组是双指针吗?

ios - Swift Ios App 性能配置

javascript - 如何使用 Excel JavaScript API office Add-IN 最大限度地提高表行添加 50K+ 行的性能

performance - 数据库速度优化 : few tables with many rows, 或多表少行?

c - 读入短语并过滤掉字符以查找数字 C

c - 查询代码意外修改数组而不是返回索引

c - 我无法向 char 数组添加偏移量,我从命令行接收字符串和整数的方法是最佳方法吗?

c - X11 应用程序无法使用/双缓冲绘制

linux - 从变量中提取文本

linux - 如何将状态代码从远程运行的 shell 脚本返回到本地 shell 脚本