我有大约10k的视频流,我想要监控。将会有一个小的集群(例如: 5-10)来监视这些流。因为没有足够的CPU来做这一切,我将不得不洗牌流,一次监控其中的几个,然后切换到下一组。
我的问题是..。我希望尽可能多地利用这些核心,这样我就可以使用发热装置,这样就可以更经常地监测每条河流。
流具有不同的分辨率,因此不同的CPU使用率。
nice -n 20启动一个新进程,然后以某种方式检查它是否能够处理数据(xx),如果是,那么将它重命名为正常的优先级,然后在下一个进程中尝试相同的事情.(xx:目前我不确定这是否可行。)你看到这些设计有什么缺陷吗?还有其他的想法,如何有效地做到这一点?
我关心的另一个问题是linux调度程序。它能正确地分配过程吗?有taskset为进程设置CPU关联a,手动控制分配是否有意义?(我想是的)
另外,测量进程CPU使用情况的正确方法是什么?有/proc/PID/stat和getrusage,但它们都返回使用过的CPU时间,但我需要一个百分比。(注意:这个Q的优先级最低,如果没有响应,我只会检查top的来源)。我知道我可以用mpstat监控内核。
发布于 2012-02-29 14:30:46
也许我遗漏了什么,但是为什么你需要将视频流分组在固定的集合中呢?
根据我对问题的理解,您将基本上是对每个流进行采样并处理这些样本。如果我要实现这样的东西,我将把所有的流放在工作队列中,最好是支持偷工以最小化线程饥饿的流。
每个工作线程将从队列的头获取一个流对象/描述符/URI/任何东西,对其进行采样和处理,然后将其移回队列的末尾。
CPU利用率不应该是一个问题,除非单个流由于实时限制而始终无法满足单个核心。如果处理每个示例时的延迟不是问题,那么您有几个备选方案:
我不知道任何用于分布式系统的工作队列实现(相对于仅仅是SMP系统),但是如果您找不到适合您的需求的东西,那么构建您自己的系统应该相对容易一些。
https://stackoverflow.com/questions/9500073
复制相似问题