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
系列函数来配置线程相关性
参考资料:
关于您的具体问题,如果两个线程共享数据,但来自不同的进程,则这些进程必须通过使用
shm_open
(创建共享内存段)和mmap
(在进程内存中映射该段)自愿共享这些页面。否则,不可能在进程之间共享数据页,但操作系统用于分叉进程的隐式(再次)写时复制机制除外,在这种情况下,每个页面在一个进程对其进行写入之前保持共享
页面的显式共享(通过shm_open
)可用于以编程方式为两个线程定义相同的CPU亲和力-可能通过两个程序中的约定将相关线程与第一个内核关联,或者通过在某个点通过共享内存对象建立的小型握手协议(例如,第一个访问内存段的线程可以将内存段的第一个字节设置为所选的cpu编号+1,0表示还没有关联)
遗憾的是,posix线程API没有提供为线程设置cpu相关性的方法。您可以使用linux平台上提供的不可移植扩展pthread\u attr\u setaffinity\u np
,以及cpuset
系列函数来配置线程相关性
参考资料: