Linux CPU 隔离和互斥
Linux CPU isolation and mutexes
我目前正在研究使用 isolcpus 的选项,以便隔离一些内核并将它们专用于某些具有实时约束的进程。
查看 isolcpus 的文档,它说明了这一点
Description Remove the specified CPUs, as defined by the cpu_number values, from the general kernel SMP balancing and scheduler algroithms.
我的进程假设有 4 个线程,我隔离了 2 个内核(忽略 HT),它们需要使用某种 linux OS 同步原语(互斥锁、信号量、cond var 等)进行同步).如果按照文档中的说明从调度算法中移除内核,并且其中一个线程阻塞并进入睡眠状态,那么谁会在线程解除阻塞时将其调度回隔离的 CPU?
谢谢。
That CPUs are "Remove[d ...] from the general kernel SMP balancing and scheduler algroithms"意味着内核不会选择那些(逻辑)CPUs来调度general任务,这实际上意味着那些没有为那些 CPU 专门分配 CPU 亲和力的那些,例如通过 taskset
或 cset
命令。同样,安排在其中一个或多个 CPU 上的任务将 运行 仅在分配的 CPU 上执行,甚至不会在隔离集中的任何其他任务上执行,如果有的话,无论相对 CPU 负载。
然而,这并不意味着内核放弃明确分配给孤立 CPU 的调度任务的责任。它像安排任何其他任务一样安排它们,但仅限于为它们分配亲缘关系的 CPUs。您不需要安排分配给孤立 CPUs 的任务的特殊调度。
另外,顺便说一句,当你说
I isolate 2 cores (ignore HT)
,我怀疑你可能有误会。 Linux 将启用超线程的内核分别作为两个独立的内核进行处理,尽管实际上它们共享处理资源。因此,如果 HT 已启用,您不能安全地忽略它。事实上,您需要非常仔细地考虑它,至少在选择要隔离多少个内核和哪些内核时是这样。
我目前正在研究使用 isolcpus 的选项,以便隔离一些内核并将它们专用于某些具有实时约束的进程。 查看 isolcpus 的文档,它说明了这一点
Description Remove the specified CPUs, as defined by the cpu_number values, from the general kernel SMP balancing and scheduler algroithms.
我的进程假设有 4 个线程,我隔离了 2 个内核(忽略 HT),它们需要使用某种 linux OS 同步原语(互斥锁、信号量、cond var 等)进行同步).如果按照文档中的说明从调度算法中移除内核,并且其中一个线程阻塞并进入睡眠状态,那么谁会在线程解除阻塞时将其调度回隔离的 CPU?
谢谢。
That CPUs are "Remove[d ...] from the general kernel SMP balancing and scheduler algroithms"意味着内核不会选择那些(逻辑)CPUs来调度general任务,这实际上意味着那些没有为那些 CPU 专门分配 CPU 亲和力的那些,例如通过 taskset
或 cset
命令。同样,安排在其中一个或多个 CPU 上的任务将 运行 仅在分配的 CPU 上执行,甚至不会在隔离集中的任何其他任务上执行,如果有的话,无论相对 CPU 负载。
然而,这并不意味着内核放弃明确分配给孤立 CPU 的调度任务的责任。它像安排任何其他任务一样安排它们,但仅限于为它们分配亲缘关系的 CPUs。您不需要安排分配给孤立 CPUs 的任务的特殊调度。
另外,顺便说一句,当你说
I isolate 2 cores (ignore HT)
,我怀疑你可能有误会。 Linux 将启用超线程的内核分别作为两个独立的内核进行处理,尽管实际上它们共享处理资源。因此,如果 HT 已启用,您不能安全地忽略它。事实上,您需要非常仔细地考虑它,至少在选择要隔离多少个内核和哪些内核时是这样。