首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用/填充多个进程的CPU,以便进程仍能正常运行。

利用/填充多个进程的CPU,以便进程仍能正常运行。
EN

Stack Overflow用户
提问于 2012-02-29 13:31:32
回答 1查看 468关注 0票数 2

我有大约10k的视频流,我想要监控。将会有一个小的集群(例如: 5-10)来监视这些流。因为没有足够的CPU来做这一切,我将不得不洗牌流,一次监控其中的几个,然后切换到下一组。

我的问题是..。我希望尽可能多地利用这些核心,这样我就可以使用发热装置,这样就可以更经常地监测每条河流。

流具有不同的分辨率,因此不同的CPU使用率。

  • 我比较简单的解决方案是测量每台机器上最高比特率流的CPU使用量(不同的CPU,不同的使用)。如果它是10%,而且我有4个核心,那么我可以在这台机器上一次安全地运行9*4=36进程。但这显然会浪费大量的CPU资源,因为其他流的比特率很低。
  • 一个更好的解决方案是不断监测核心的使用情况,如果利用率低于阈值(例如: 95-10=85%),那么就开始一个新的过程。
  • 一个复杂的问题是用nice -n 20启动一个新进程,然后以某种方式检查它是否能够处理数据(xx),如果是,那么将它重命名为正常的优先级,然后在下一个进程中尝试相同的事情.(xx:目前我不确定这是否可行。)

你看到这些设计有什么缺陷吗?还有其他的想法,如何有效地做到这一点?

我关心的另一个问题是linux调度程序。它能正确地分配过程吗?有taskset为进程设置CPU关联a,手动控制分配是否有意义?(我想是的)

另外,测量进程CPU使用情况的正确方法是什么?有/proc/PID/statgetrusage,但它们都返回使用过的CPU时间,但我需要一个百分比。(注意:这个Q的优先级最低,如果没有响应,我只会检查top的来源)。我知道我可以用mpstat监控内核。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-29 14:30:46

也许我遗漏了什么,但是为什么你需要将视频流分组在固定的集合中呢?

根据我对问题的理解,您将基本上是对每个流进行采样并处理这些样本。如果我要实现这样的东西,我将把所有的流放在工作队列中,最好是支持偷工以最小化线程饥饿的流。

每个工作线程将从队列的头获取一个流对象/描述符/URI/任何东西,对其进行采样和处理,然后将其移回队列的末尾。

CPU利用率不应该是一个问题,除非单个流由于实时限制而始终无法满足单个核心。如果处理每个示例时的延迟不是问题,那么您有几个备选方案:

  • 使用更多的处理线程,直到所有内核在所有情况下都得到充分利用。
  • 使用单独的输入线程接收流块,并传递这些块进行处理。这将使网络延迟与实际的流处理脱钩。

我不知道任何用于分布式系统的工作队列实现(相对于仅仅是SMP系统),但是如果您找不到适合您的需求的东西,那么构建您自己的系统应该相对容易一些。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9500073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档