内核中的native_write_msr是做什么的?

2023-12-02

我有一个 python 脚本,一开始有时会很慢。我跑了perf top前几天我看到的只是:

   PerfTop:       2 irqs/sec  kernel:100.0%  exact:  0.0% [4000Hz cycles],  (target_pid: 1234)
-------------------------------------------------------------------------------------------------

   100.00%  [kernel]       [k] native_write_msr

谷歌搜索函数名称对我没有多大帮助。


native_write_msr是 x86/x86_64 特定的内核函数,允许内核代码执行 MSR 写入:https://elixir.bootlin.com/linux/v4.8/source/arch/x86/include/asm/msr.h#L118

static inline void native_write_msr(unsigned int msr,
                      unsigned low, unsigned high)
{
  asm volatile("1: wrmsr\n"
           "2:\n"
           : : "c" (msr), "a"(low), "d" (high) : "memory");
  if (msr_tracepoint_active(__tracepoint_write_msr))
      do_trace_write_msr(msr, ((u64)high << 32 | low), 0);
}

如果您想获取实际的 MSR 索引和值,您可以尝试使用以下命令激活 msr 跟踪https://www.kernel.org/doc/Documentation/trace/events-msr.txt or https://www.kernel.org/doc/html/v4.17/trace/events-msr.html指示。

native_write_msr是内核的内部实现wrmsr and wrmsl有许多可能调用的函数:https://elixir.bootlin.com/linux/v4.8/ident/wrmsr and https://elixir.bootlin.com/linux/v4.8/ident/wrmsrl正如彼得在评论中所说,其中一些用于编程性能计数器(来自arch/x86/events目录)。

对于短脚本的分析,不要使用perf top工具(它用于长时间运行的进程和整个系统分析),但尝试perf record python3 ./your-script.py将配置文件记录到perf.data文件和perf report or perf report > report.txt解码perf.data文件。这是非常短的脚本,因此我将采样频率更改为更高的值,而且我也没有分析内核(:u suffix)

echo 2 | sudo tee  /proc/sys/kernel/perf_event_paranoid
$ perf record -e cycles:u -F 20000 python3 -c 'print(1)' 
1
[ perf record: Woken up 1 times to write data ]

perf report会显示统计信息,但会丢失一些仅显示十六进制地址的符号

$ perf report            # interactive TUI
$ perf report|head -n 20|tail
#
     9.75%  python3  python3.6          [.] _PyEval_EvalFrameDefault
     2.77%  python3  python3.6          [.] 0x000000000049b284
     1.95%  python3  libc-2.27.so       [.] __strlen_avx2
     1.86%  python3  python3.6          [.] PyObject_GetAttr
     1.80%  python3  python3.6          [.] PyDict_SetDefault
     1.61%  python3  python3.6          [.] PyUnicode_New
     1.55%  python3  libc-2.27.so       [.] _int_malloc
     1.52%  python3  python3.6          [.] _PyDict_LoadGlobal
     1.41%  python3  python3.6          [.] _PyObject_GenericSetAttrWithDict

perf script将为您提供执行代码的时间表,列出来自perf record (With -F 20000采样频率约为 20 kHz)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内核中的native_write_msr是做什么的? 的相关文章

  • /arm64/Image 到 zImage 或 boot.img

    大家好 我一直在试图弄清楚如何使我的 android 内核成为 zImage 或 boot img 我试图弄清楚但没有运气 有人告诉我 zImage 不适用于我的设备 因为它是 arm64 内核 但我想我会再问一次 如果是这种情况 我会尝试
  • 定义新的套接字选项以在 TCP 内核代码中使用

    我正在尝试向 TCP 内核代码添加一些功能 在tcp input c 我希望我实现的代码仅在某些情况下运行 我想添加一个控制标志 可以从用户空间应用程序设置它 我 认为我 需要添加一个新的套接字选项 以便我可以完成以下操作setsockop
  • 破坏用户空间是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这可能是一个简单的问题 但是 我听说在内核上工作的唯一规则是不要破坏 用户空间 所以我想知道这意味着什么 打破用户空间这是怎么发生的 Ed
  • 计算 Amd Zen 2 处理器上的 L3 缓存访问事件

    我试图找出与 perf stat 命令一起使用的事件来计算 AMD Zen 2 处理器上的 L3 缓存访问次数 根据 PPR http developer amd com wordpress media 2017 11 54945 PPR
  • 如何从内核空间读取/写入 linux /proc 文件?

    我正在编写一个由用户程序和内核模块组成的程序 内核模块需要收集数据 然后将其 发送 到用户程序 这必须通过 proc 文件来完成 现在 我创建了文件 一切都很好 并且花了很长时间在互联网上寻找答案 但仍然找不到 如何读 写 proc 文件f
  • 如何使用 conda 卸载 r-essentials?

    最近 我安装了r essentials using conda命令 conda install c r r essentials正如这个网址中所描述的 https anaconda org r r essentials https anac
  • CPU缓存性能。存储未命中与加载未命中

    我使用 perf 作为基本事件计数器 我正在开发一个遭受数据缓存存储未命中的程序 其中比例高达80 我知道缓存原则上是如何工作的 它会在各种未命中情况下从内存加载 并在需要时从缓存中删除数据 我不明白的是 存储未命中和加载未命中之间有什么区
  • 如何“安装”自定义 Windows 驱动程序?

    我计划用 C 语言编写一个基本的 Windows 注册表过滤器 该过滤器的目的是挂钩所有 用户和内核特权 注册表调用 以便我可以在我的程序中使用它们 我基本上是复制 Mark Rusinovich 的 regmon 进程监视器 但更基本 我
  • 如何显示 Jupyter 笔记本的版本并在 Jupyter 笔记本中运行单元?我收到错误:错误的解释器

    我已经安装了 Anaconda 并使用 conda 环境和 conda 命令来安装软件 当我输入 jupyter notebook version 我收到以下错误 zsh Users cr517 local bin jupyter bad
  • 使用 perf 查找线程瓶颈并优化挂机时间

    对 cpu 周期进行采样perf record如果核心利用率大致恒定 则对于寻找优化候选非常有用 但对于具有并行性不同的多个阶段的代码 计算 cpu 周期将重点强调并行阶段 而低估影响挂机时间的顺序或有限并行阶段 简而言之 天真的 perf
  • “do { ... } while (0)”在内核代码中到底做了什么? [复制]

    这个问题在这里已经有答案了 可能的重复 当我们定义宏时 do while 0 有什么用 https stackoverflow com questions 923822 whats the use of do while0 when we
  • 尝试映射大页面 (1GB) 时 mmap 失败

    我做了什么 使用 root 启用大页 我的系统支持 1MB 大页 echo 20 gt proc sys vm nr hugepages 将大页文件系统挂载到 mnt hugepages mount t hugetlbfs nodev mn
  • Windows 内存映射文件

    我正在尝试研究 Windows 内核在内存映射文件 虚拟内存方面的行为 具体来说 我感兴趣的是确定内存映射文件的内容 由 Windows 刷新到磁盘的频率以及 Windows 使用什么标准来决定是时候这样做 我在网上做了一些研究 除了 MS
  • 没有设备的设备驱动程序?

    我正在创建一个需要使用一些内核级模块的应用程序 为此我将应用程序分为 2 个 一个用户级程序和一个内核级程序 在阅读了有关设备驱动程序并浏览一些教程后 我有点困惑 是否可以存在没有任何特定设备与之关联的设备驱动程序 除了设备驱动程序 内核代
  • 设置 IRQ 映射

    我正在遵循一些教程和参考文献来尝试设置我的内核 我在教程中遇到了一些不熟悉的代码 但根本没有解释它 这是我被告知映射的代码16 IRQs 0 15 到 ISR 地点32 47 void irq remap void outportb 0x2
  • 在Linux中断上下文中运行用户线程

    我正在编写一些定制的应用程序 并允许更改 Linux 内核中的中断处理程序代码 我有一个用户线程正在等待中断发生 如果发生中断 那么我要做的第一件事就是执行该用户线程 有什么办法让它发挥作用吗 Thanks 创建一个字符设备 这就是内核所做
  • 为什么这段代码会死锁?

    我在可加载模块中创建了 2 个 Linux 内核线程 并将它们绑定到在双核 Android 设备上运行的单独 CPU 内核 运行几次后 我注意到设备重新启动并重置了硬件看门狗定时器 我一直在解决这个问题 什么可能导致僵局 基本上 我需要做的
  • copy_from_user() 错误:目标大小太小

    我正在为内核模块编写 ioctl 处理程序 我想从用户空间复制数据 当我编译禁用优化的代码时 O0 gflags 编译器返回以下错误 include linux thread info h 136 17 error call to bad
  • Windows 内核中可能的最大文件名长度

    我想知道 什么是longestWindows 内核允许的可能名称长度 例如 我知道内核使用UNICODE STRING结构来保存所有对象路径 并且由于宽字符字符串的字节长度存储在USHORT 允许最大路径长度为 2 15 1 个字符 有没有
  • 如何使用 python 子进程杀死性能记录?

    我正在尝试使用性能实用程序 https www brendangregg com perf html监视我的系统 它将在 python 脚本中启动和终止 我创建了一个沙箱 如下所示 extra params F 99 g a record

随机推荐

  • %op% 运算符是什么意思?例如“%in%”?

    我尝试进行这个简单的搜索 但在百分比上找不到任何内容 R 中的 符号 什么是 in 下面代码中的意思是 time x in time y where x and y是矩阵 我如何查找帮助 in 和类似的功能遵循 stuff 模式 因为我找不
  • 如何使用 Apache htaccess 重新排序 URL 参数/查询字符串?

    我有带有多面导航 过滤 的电子商务类别 过滤可以生成数千个 有用的 URL 我想减少nr 通过始终在相同的 URL 上以相同的查询字符串参数顺序显示某些内容来显示可能的 URL 从 SEO 的角度来看 我可以使用规范标签从逻辑上消除重复的
  • primefaces 数据导出器 XLS 仅导出标题而不导出行

    我的问题是 当我单击按钮导出数据表时 它仅导出列标题 我的 Excel 文件生成时没有任何行
  • 获取 HPUX 上正在运行的进程的可执行文件的完整路径

    我想使用 C 代码在没有 root 权限的情况下获取正在运行的进程 可执行文件 的完整路径 有人可以建议一种方法来实现这一目标 在 Linux 平台上 我可以使用以下方式来做到这一点 char exepath 1024 0 char pro
  • 删除边框线上方图像的顶部部分以检测文本文档

    Using OpenCV python I am trying to remove the section of image which is above the border line white area in this sample
  • end(explode) 严格标准:只有变量应该通过引用传递

    我有这段代码来获取文件的扩展名 extension end explode FILES rfile name 这在本地主机上工作正常 但是当我上传在线托管时 它给了我这个错误 严格标准 只有变量应该通过引用传递 为什么不使用pathinfo
  • 如何从 GIT 存储库历史记录中删除文件名中包含冒号 : 的路径的所有文件?

    我在 Debian 10 Linux 上的 GIT 存储库中存储了带冒号的 ISCSI 节点文件名 Example iscsi nodes iqn 2000 01 com synology NAS01 DS916 nas ff11 111
  • 使用 R 中的 rvest 包从下拉列表提交表单后从网页下载 csv 文件

    我正在开发一个网络抓取项目 从该网页下载各种 csv 文件 https whalewisdom com filer blue harbour group lp tabholdings tab link 我希望能够以编程方式在下拉列表中选择各
  • 如何摆脱证书过期的 ssl 安全警告

    过去我有一个 ssl 证书 但现在没有了 因为我没有使用它 但是 现在我看到我网站的一些页面在 google 上使用 https 建立了索引 单击这些链接会将您定向到安全警告 我怎样才能最好地解决这个问题 我尝试调整 htaccess 文件
  • 在 Java 中将字符串从 ASCII 转换为 EBCDIC?

    我需要编写一个 简单 实用程序来从 ASCII 转换为 EBCDIC Ascii 是从 Java Web 发展到 AS400 我用谷歌搜索了一下 似乎找不到一个简单的解决方案 也许因为没有一个 我希望有一个开源实用程序或为已经编写的实用程序
  • Ruby 中方法名称有哪些限制?

    例如 我找到了方法名称bundler 在下面的代码片段中 不知道是否 字符是专门的关键字或只是方法名称的一部分 This is a predicate useful for the doc guides task of applicatio
  • ICS 中未显示选项卡分隔符

    我有一个问题 setDividerDrawable 只能在低于 Ice Cream Sandwich 的版本中工作 当我运行模拟器时 选项卡显示完美 但没有分隔线 分隔线显示 模拟较低版本的 Android 时没有问题 我正在使用此代码来创
  • 中继器中的中继器

    我的中继器里面有一个中继器 其中父中继器绑定到Datatble其中有一列带有Datatable in it 我想将子中继器绑定到父中继器数据行中的数据表列 这可能吗 我想我可以直接在aspx文件如 DataSource 但它似乎不起作用 在
  • 使用私有静态方法的优点

    创建具有内部私有方法的类时 通常是为了减少代码重复 不需要使用任何实例字段 将该方法声明为静态是否有性能或内存优势 Example foreach XmlElement element in xmlDoc DocumentElement S
  • 如何更改 R 中多个箱线图中 x 轴的顺序

    我正在尝试更改此箱线图中 x 轴的顺序 现在顺序是放大镜 显微镜 视频 我想改为显微镜 放大镜 视频 数据框示例是这样的 Label Mental Physical Temporal Performance Effort Frustrati
  • 录制/捕获当前播放的音频

    我想在 UWP 或 Windows Phone 8 1 中捕获 记录当前播放的音频 同样的事情是由 MEE dj UWP 应用程序在其应用程序中完成的 该应用程序能够捕获应用程序中当前播放的音频 有知道这方面情况的朋友请分享一下你的答案 如
  • Python/Django——“and”运算符和“&”运算符有什么区别

    我有一个有趣的 Django 问题 考虑以下 Model objects filter Q id test1 and Q id test2 这会返回预期的结果 但是 Model objects filter Q id test1 Q id
  • 我想用Java获取格式化的日期

    我想买一个新的Date对象具有SimpleDateFormat应用于它 我想做这样的事情 SimpleDateFormat myFormat new SimpleDateFormat dd MMM yyyy kkmm Date today
  • 打开 renderDataTable 中的行名称

    我正在 Shiny 中显示一个表格并想要使用渲染数据表但它没有显示对我来说很重要的行名称 渲染表显示行名称很好 但看起来不太好 I have output tab lt renderDataTable tabplot 并尝试过 output
  • 内核中的native_write_msr是做什么的?

    我有一个 python 脚本 一开始有时会很慢 我跑了perf top前几天我看到的只是 PerfTop 2 irqs sec kernel 100 0 exact 0 0 4000Hz cycles target pid 1234 100