gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:47:25 26 4
gpt4 key购买 nike

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

注意事项:

  1. 如果它是相关的,我已经在略有不同的内核版本上观察到了这一点,尽管我不记得是哪一个了。

  2. CPU 架构为 x64。我的 24 核工作是 32 位的,而我正在竞争的其他工作是 64 位的,这是否有可能是相关的?

编辑:我刚刚注意到的一件事是增加到 30 个线程似乎在某种程度上缓解了这个问题。它使我的 CPU 达到约 2100%。

最佳答案

这可能是由于调度程序试图让您的每个任务都在之前运行的同一 CPU 上运行(它这样做是因为任务可能已将其工作集放入该 CPU 的缓存中 - 它是“缓存热”)。

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

  • 运行的线程数是内核数的两倍;
  • 运行的线程比您拥有的内核少一两个线程;
  • 减少 /proc/sys/kernel/sched_migration_cost 的值(可能减少到零);
  • /proc/sys/kernel/sched_domain/.../imbalance_pct 的值降低到接近 100。

关于Linux 2.6.31 调度程序和多线程作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com