Linux 将多个用户空间线程固定到隔离 cpu 列表中的一个核心

问题描述 投票:0回答:1

我正在Ubuntu 7.9上做实验。我的 C++ 应用程序使用 pthread_setaffinity_np 将一个线程固定到一个核心(例如 18,来自隔离的 cpu 列表,从 /sys/devices/system/cpu/isolated 中选取)。

当我的应用程序运行时,top 确实确认核心 18 为 100%,并且我的应用程序线程正在那里运行。 但是,我可以多次运行以下命令,这表明多个用户空间线程也可以固定到核心 18。顶部证实了这一点。

taskset -c 18 sleep 200000 &

我很好奇为什么允许这样做?给定的核心 18 在隔离的 cpu 列表中。

谢谢, 弗兰克

linux cpu pinning
1个回答
0
投票

CPU 关联设置一个掩码,限制给定线程可以调度到哪些 CPU。它不保证线程将独占使用核心;它限制线程无法在其他地方调度。

因此,您没有理由不能指定固定到单个核心的任意数量的线程。这样做可能会适得其反,但在语义上是完全合法的。

请参阅底层系统调用的文档:

    sched_setaffinity
  • pthread_setaffinity_np
  • 
        
© www.soinside.com 2019 - 2024. All rights reserved.