Linux 2.6.31调度程序和多线程作业

Linux 2.6.31调度程序和多线程作业,第1张

概述我在具有24个内核的共享 Linux计算机上运行大规模并行的科学计算工作.大多数时候,当这台计算机上没有其他任何东西运行时,我的工作能够扩展到24个核心.然而,似乎即使一个不是我的单线程作业正在运行,我的24线程作业(我设置为高优值)只能获得~1800%的CPU(使用Linux表示法).同时,大约500%的CPU周期(再次使用Linux表示法)处于空闲状态.任何人都可以解释这种行为以及我能做些什么 我在具有24个内核的共享 Linux计算机上运行大规模并行的科学计算工作.大多数时候,当这台计算机上没有其他任何东西运行时,我的工作能够扩展到24个核心.然而,似乎即使一个不是我的单线程作业正在运行,我的24线程作业(我设置为高优值)只能获得~1800%的cpu(使用linux表示法).同时,大约500%的cpu周期(再次使用linux表示法)处于空闲状态.任何人都可以解释这种行为以及我能做些什么来获得所有其他人没有使用的核心?

笔记:

>如果它是相关的,我已经在稍微不同的内核版本上观察到了这一点,尽管我不记得哪个是我的头脑.
> cpu架构是x64.我的24核作业是32位,而我正在竞争的其他作业是64位的这一事实是否有可能是相关的?

编辑:我刚注意到的一件事是,最多30个线程似乎在某种程度上缓解了这个问题.它让我高达2100%的cpu.

解决方法 这可能是由于调度程序试图将每个任务保持在先前运行的同一cpu上运行(这样做是因为该任务可能将其工作集带入该cpu的缓存中 – 它是“缓存热” “).

以下是您可以尝试的一些想法:

>运行两倍于核心的线程;>运行比核心少一两个线程;>减少/ proc / sys / kernel / sched_migration_cost的值(可能降至零);>将/proc/sys/kernel/sched_domain/…/imbalance_pct的值降低到接近100.

总结

以上是内存溢出为你收集整理的Linux 2.6.31调度程序和多线程作业全部内容,希望文章能够帮你解决Linux 2.6.31调度程序和多线程作业所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1049645.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存