我想知道在什么情况下有设置CPU亲和力的价值。
一般来说,CPU关联用于进程隔离或减less对资源的争用。 高频交易是我使用CPU集合和CPU屏蔽的应用程序,但我也看到了在科学/计算计算(HPC),实时应用程序和电子商务中的应用程序。 专业audio应用程序是另一个常见的例子,需要实时内核和CPU亲和力集。
在基本级别上, taskset命令用于分配亲和性。
这是一个教程,用于使用cset创build特定应用程序/进程的CPU组,这比taskset更有组织性。 https://rt.wiki.kernel.org/index.php/Cpuset_management_utility/tutorial
在两种情况下,CPU关联性很重要:最常见的情况是,当CPU工作负载从CPU高速caching中获益很多时,CPU资源争用足以导致作业在核心或CPU之间移动,导致每个CPU都需要使其caching失效并重build。 在具有非统一内存体系结构(NUMA)的系统上,会出现更极端的版本,其中,RAM库与物理上连接到特定CPU的CPU不同,后者将始终可以更快地访问该内存。
一般来说,对于这样的问题,你首先需要监视它是否是一个问题 – 如果你的应用程序是I / O绑定,那么CPU调度就没有意义了 – 这可以像运行顶部一样简单, CPU列以查看工作是否在弹跳。 还有一些基本的系统configuration工作,确保您存取的任何内存块实际上可以适合任何一个CPU附带的数量。
对于testing,设置亲和力的最简单方法是使用taskset实用程序。 因为numactl为CPU和内存分配提供了独立的控制,所以您可能还需要查看libnuma 。更重要的是,libnuma库为您的应用程序提供了一个程序化的方式来请求有利的分配:例如,您可能希望请求一组共享某些数据结构的线程可以分配给同一个CPU上的其他内核,而不必承担通过互连的性能冲击。