只是为了阻止任何关于&#34效果的评论;为什么你需要知道这个?":这只是一个我很好奇的谜题,不是我需要做的任何实际的事情原因。
鉴于典型的POSIX系统[1],您如何设计一个实验来确定CPU绑定过程的调度量子[2]?
[1]:但不允许您通过系统调用或/ proc接口查询此信息
[2]:"调度量子"定义为进程在其计划时间结束之前在CPU上运行而没有阻塞或屈服的时间量,并且操作系统允许不同的进程运行。
答案 0 :(得分:3)
我不确定它会有多准确,但这可能有效:
请注意,这假设您的时钟分辨率大于调度程序的量程大小;如果不是(例如,如果你试图使用10mS分辨率的时钟测量5mS量子长度),那么测量量子长度将是困难的AFAICT。
答案 1 :(得分:2)
我认为你可以通过对以下系统的足够运行的统计分析得到答案:
每个处理器运行一个清除终止标志的线程,然后运行一个循环进行固定次数的迭代,或者直到设置终止标志,以先到者为准。这些线程记录它们是否因为运行所有迭代而终止,或者由于设置了终止标志而终止。
同时,运行另一个设置终止标志的线程。
在循环中以各种迭代次数执行此操作。
如果循环在线程时间片内完成,它将完成所有迭代。如果它未在线程时间片内完成,则终止线程将有机会中断其中一个循环线程。
现在,有时会先安排终止线程,并且可能还有其他线程正在运行,这会使行为变得复杂,因此您可能需要在多处理器系统上运行很多次并统计分析结果。你还需要考虑线程启动时间和内存访问时间之类的事情,因为在每次迭代循环中都可能存在内存障碍来检查标志。
如果在足够不同的循环迭代限制下有足够的重复次数,这应该可以为您提供在一个时间片中迭代循环的次数。然后,您可以在卸载的系统上运行大量迭代,以获得每次迭代所需的时间长度,然后计算每个时间片的挂钟时间。