Caching 查找通过线程访问的页面

Caching 查找通过线程访问的页面,caching,memory,operating-system,scheduling,shared-memory,Caching,Memory,Operating System,Scheduling,Shared Memory,我正在寻找一些基于线程访问的数据的调度选项。是否有任何方法可以找到由特定线程访问的缓存页。 如果我有来自两个不同进程的两个线程,是否有可能找到两个线程访问的公共数据/页面来自同一进程的两个线程可能共享整个进程内存空间。如果程序不限制线程对内存某些区域的访问,那么可能很难确切地知道应该将哪个线程分配给哪个cpu 对于更多的线程,问题变得更加困难,因为一个线程可能与多个不同的线程共享不同的数据,并创建一个关系网络。如果两个线程之间的关系要求它们与给定的cpu核心具有亲和力,那么通过传递性,它们关系网

我正在寻找一些基于线程访问的数据的调度选项。是否有任何方法可以找到由特定线程访问的缓存页。
如果我有来自两个不同进程的两个线程,是否有可能找到两个线程访问的公共数据/页面

来自同一进程的两个线程可能共享整个进程内存空间。如果程序不限制线程对内存某些区域的访问,那么可能很难确切地知道应该将哪个线程分配给哪个cpu

对于更多的线程,问题变得更加困难,因为一个线程可能与多个不同的线程共享不同的数据,并创建一个关系网络。如果两个线程之间的关系要求它们与给定的cpu核心具有亲和力,那么通过传递性,它们关系网络中的所有线程也应该绑定到同一个核心。 也许关系的数量,或者某种形式的聚类分析(双连通性)会有所帮助


关于您的特定问题,如果两个线程共享数据,但来自不同的进程,则这些进程必须通过使用
shm_open
(创建共享内存段)和
mmap
(在进程内存中映射该段)自愿共享这些页面。否则就不可能在进程之间共享数据页,除非操作系统对分叉进程使用隐式(再次)写时复制机制,在这种情况下,每个页面都保持共享,直到一个进程对其进行写入

页面的显式共享(通过
shm_open
)可用于以编程方式为两个线程定义相同的CPU亲和力-可能通过两个程序中的约定将相关线程与第一个内核关联,或者通过在某个点通过共享内存对象建立的小型握手协议(例如,第一个访问内存段的线程可以将内存段的第一个字节设置为所选的cpu编号+1,0表示还没有关联)

遗憾的是,posix线程API没有提供为线程设置cpu相关性的方法。您可以使用linux平台上提供的不可移植扩展
pthread\u attr\u setaffinity\u np
,以及
cpuset
系列函数来配置线程相关性

参考资料:


来自同一进程的两个线程可能共享整个进程的内存空间。如果程序不限制线程访问某些内存区域,则可能很难确切地知道应将哪个线程分配给哪个cpu

对于更多的线程,问题变得更加困难,因为一个线程可能与多个不同的线程共享不同的数据,并创建一个关系网络。如果两个线程之间的关系要求它们与给定的cpu核心具有亲和力,则通过传递性,它们关系网络中的所有线程都应该绑定到与我们相同的核心陆上通信线。 也许关系的数量,或者某种形式的聚类分析(双连通性)会有所帮助


关于您的具体问题,如果两个线程共享数据,但来自不同的进程,则这些进程必须通过使用
shm_open
(创建共享内存段)和
mmap
(在进程内存中映射该段)自愿共享这些页面。否则,不可能在进程之间共享数据页,但操作系统用于分叉进程的隐式(再次)写时复制机制除外,在这种情况下,每个页面在一个进程对其进行写入之前保持共享

页面的显式共享(通过
shm_open
)可用于以编程方式为两个线程定义相同的CPU亲和力-可能通过两个程序中的约定将相关线程与第一个内核关联,或者通过在某个点通过共享内存对象建立的小型握手协议(例如,第一个访问内存段的线程可以将内存段的第一个字节设置为所选的cpu编号+1,0表示还没有关联)

遗憾的是,posix线程API没有提供为线程设置cpu相关性的方法。您可以使用linux平台上提供的不可移植扩展
pthread\u attr\u setaffinity\u np
,以及
cpuset
系列函数来配置线程相关性

参考资料:


我在linux上使用intel xeon x5675 cpu。它有性能监控单元和HPC。你想实现什么?如果两个线程过于亲密(共享大量数据),则@didierc,它们可能被安排在同一个cpu内核或类似的内核中。我需要知道线程的共享模式您所说的缓存页是什么意思?cpu缓存?我在linux上使用的是intel xeon x5675 cpu。它有性能监控单元和HPC。您试图实现什么?如果两个线程太亲密(共享大量数据),则@didierc,它们可能被安排在同一个cpu内核中,或者类似的。我需要知道线程的共享模式。你说的缓存页是什么意思?cpu缓存?@didierc即使共享数据的线程可以进入线程网络,我只关心彼此之间密切共享数据的线程。我修正了一些阈值,以使这些线程HyRead集群。有一个动态的进程读取了其他线程的数据访问信息,添加了我没有考虑的分叉进程上下文中共享页面的情况。a可以引入线程网络,我只关注线程之间密切共享数据的情况。我设置了一些阈值来引入这些线程集群。是否有从进程读取数据的动态访问通知