【问题标题】:Given the Process ID can I know whether it has accessed the cache memory of CPU recently?给定进程ID,我可以知道它最近是否访问过CPU的缓存吗?
【发布时间】:2014-11-10 12:17:08
【问题描述】:

我知道进程 X 的进程 ID。在我的进程再次被调度时被抢占后,我可以确定进程 X 是在那段时间之间调度的吗?

我可以知道进程 X 是否更新了缓存内存或没有给出它的进程 ID?

在 linux 中是否有汇编代码或 API 来执行此操作?任何人都可以建议编码示例或任何技术吗?

【问题讨论】:

  • Can I determine that process X was scheduled in between that time? 他们有相同的调度类吗?他们上什么课?
  • Can I know if process X updated the Cache Memory or not given its process ID?你是说文件缓存还是CPU缓存?
  • 我知道进程 X 有一个大的全局声明数组。当数组被访问时,该数组被缓存在 CPU 缓存中。现在我想从不同的进程 Y 中知道天气进程 X 是否访问了 CPU 缓存,因为进程 X 和进程 Y 具有不同的虚拟地址,缓存具有查看哪个进程数据在哪个缓存行中的机制?

标签: linux caching operating-system assemblies virtual-memory


【解决方案1】:

我可以知道进程 X 是否更新了缓存内存或没有给出它的进程 ID?

如果您在谈论 CPU 缓存,那么不是。数据缓存和指令缓存对系统都是透明的。无法确定它是否由程序 x 更新。但是是的,它肯定会用于加快执行速度。

【讨论】:

    【解决方案2】:

    它不是访问CPU cache 的“进程”。它是在 CPU 内核上执行任何机器指令。

    特别是,当内核在内核模式下运行时,根据定义,它不是在进程中运行,而且显然是在使用 CPU 缓存(因为每次内存访问都通过缓存)

    所以你的问题没有任何意义,如果你说的是 CPU 缓存。

    文件系统缓存(有时称为page cache)由内核管理,您不能真正将其归因于某个特定进程(例如,读取同一文件的两个进程将使用相同的缓存数据)。它与访问文件数据的单纯动作(通过任何过程)有关。参见例如linuxatemyram

    您可能会通过proc(5)(另见oprofile)获得一些关于CPU 缓存或文件系统缓存的系统范围指标

    【讨论】:

    • 我知道进程 X 有一个大的全局声明数组。当数组被访问时,该数组被缓存在 CPU 缓存中。现在我想从不同的进程 Y 知道天气进程 X 是否访问了 CPU 缓存,因为进程 X 和进程 Y 具有不同的虚拟地址,缓存具有查看哪个进程数据在哪个缓存行中的机制?
    猜你喜欢
    • 2011-09-03
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 2019-08-13
    • 2022-09-23
    • 2017-10-31
    • 2013-10-09
    相关资源
    最近更新 更多