我正在设计一个分布式系统,其中主节点在远程计算机上启动一堆工作节点。由于我使用的是Python,并希望利用每个物理机器具有多个内核的事实,我希望每台机器运行多个工作节点(GIL等)。另外,每个工作节点的每个“周期”所需的CPU数量可能会有很大差异。然而,我可以将工作节点分成很多部分,我的初始策略是产生比每台机器核心多得多的工作节点。原因在于,如果一些节点需要更多的CPU,它们可以占用核心更长的时间。 (如果每个节点已经受CPU限制,则不会突然需要更多的CPU。)
这引出了一个问题:如何准确衡量python进程的CPU时间?
我不能天真地测量时间,我需要专门为给定过程花费的时间。也就是说,对于每个进程,我想要一个数字X,它尽可能准确地表示专门在该进程上花费的CPU资源量,而不管不相关的进程。 (我一直在研究Python的getrusage,但它似乎在ubuntu上只给出了2个小数点的精度,这是不够的。编辑:如果我直接在C中使用getrusage(),也会发生这种情况;最多0.01秒精度。关闭,但是没有雪茄)
我的具体用例是测量每个节点周期的CPU时间,从开始到结束,其中End在开始后大约0-30ms发生。
最好的答案是在Python中以可移植的方式执行此操作。需要使用C扩展的方法很好。
答案 0 :(得分:1)
至少对于linux来说,快速回答是使用getrusage以及具有更高分辨率计时器的内核。
我的初始测试给出了10ms的可怕精度的原因是因为显然默认情况下64位ubuntu被配置为100hz计时器。