【问题标题】:cpu efficiency formulacpu效率公式
【发布时间】:2014-02-10 08:24:35
【问题描述】:

我有一个这样的问题:

对某个系统的测量表明,平均进程在 IO 阻塞之前运行了 T 时间。进程切换需要时间 S,这实际上被浪费了(开销)。对于量子 Q 的循环调度,请给出以下各项的 CPU 效率公式

( a ) Q = INFINITY
( b ) Q > T
( c ) S < Q < T
( d ) Q = S
( e ) Q -> 0

我知道如何做 a、b、d 和 e,但对于 c,答案是 T/(T + S * T/Q) = Q/(Q + S)。这意味着发生上下文切换的总次数是 T/Q,这让我感到困惑,假设 T = 3,Q = 2,进程运行 2 个单位并切换到另一个进程,然后再切换回执行并完成,然后再次切换到另一个进程,所以它是 2 个开关,即 = 屋顶(T/Q);但是根据答案,只有1次切换,所以1轮和2轮跑没有区别?谁能向我解释一下 CPU 效率到底是什么。

【问题讨论】:

  • 我也有同样的问题,能否请您给我一些参考资料,我可以从中获得描述的链接...

标签: multithreading cpu


【解决方案1】:

您的问题没有说明被 IO 阻止时调度程序切换的任何内容,所以我不认为您提供的答案是正确的。它没有考虑到进程被IO阻塞时会浪费CPU的事实。让我们看一个包含 2 个进程的示例:

repeat floor(T/Q) times:
  Process 1 runs (Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (Q units of time)
  Context switch to process 1 (S units of time)

if T mod Q > 0  
  Process 1 runs (T mod Q units of time) then blocks to IO 
  CPU is idle (Q - T mod Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (T mod Q units of time) then blocks to IO 
  CPU is idle (Q - T mod Q units of time)
  Context switch to process 1 (S units of time)


Total time elapsed = 2(Q+S)*ceiling(T/Q)
Total time processes were running = 2T
Efficiency = T/((Q+S)*ceiling(T/Q))

如果一旦进程被阻塞,调度器就会切换,那么:

repeat floor(T/Q) times:
  Process 1 runs (Q units of time)
  Context switch to process 2 (S units of time)
  Process 2 runs (Q units of time)
  Context switch to process 1 (S units of time)

if T mod Q > 0  
  Process 1 runs (T mod Q units of time) then blocks to IO 
  Context switch to process 2 (S units of time)
  Process 2 runs (T mod Q units of time) then blocks to IO 
  Context switch to process 1 (S units of time)


Total time elapsed = 2T + 2*S*ceiling(T/Q)
Total time processes were running = 2T
Efficiency = T/(T+S*ceiling(T/Q))

因此,如果我们假设调度程序在被阻塞时切换,那么您的答案就是缺少天花板()部分。如果我们假设 T 总是 Q 的倍数,那么你甚至不需要它。不过,不确定您的问题对此有何看法。

顺便说一句,我认为您是在重复计算上下文切换,因为您是从单个进程的角度来看待它的。当您考虑调度多个进程时,应该为每个运行的量程进行一个上下文切换这一事实变得更加清楚。

【讨论】:

  • 当进程 1 完成然后阻塞 IO 时,我认为 CPU 将立即执行上下文切换到进程 2,而不是基于循环调度处于空闲状态。
  • @skyrel :好的,那么答案看起来更接近您提供的内容。更新了我的答案
【解决方案2】:

CPU 效率是 CPU 执行有用操作(即不切换)的时间百分比。您的公式没有建议任何关于完成了多少次切换,只是花费了多少时间没有切换。

【讨论】:

  • 它说T/Q是一个进程在切换上花费的平均时间,所以T+S*T/Q是单位总数
  • 对不起;当您使用“时间”表示持续时间和“时间”表示计数时,我感到困惑。我指的是“根据答案,只有 1 次切换”——我不明白这是从哪里来的。正如@pepsi 所说,每个量子结束时都会有一个开关,因此您的计算效率。如果这是因为 T 不是 Q 的倍数而关闭,那是因为您当时的公式做出了相同的假设。
【解决方案3】:

我最终得到 [(T^2)/(Q)] / [(T^2)/(Q)+(S*((T/Q))-(1/P))]。使用 P 作为进程数。总执行时间除以总时间(包括开关):

Total Executing Time: P[(T/Q) * (T)] , T/Q 是每个进程必须运行的次数。然后再乘以 T 得到总处理时间。

切换时间:P[((T/Q) * (S)) - S/P] , T/Q * S 因为我们需要总切换时间,但现在我们在最后一个过程完成后计算切换(额外计数)所以我们减去 S/P。

总时间:执行时间 + 切换时间或 P[(T^2) / (Q)] + P[((T/Q) * (S)) - (S/P)]

效率:[(T^2)/(Q)] / [(T^2)/(Q)+(S*((T/Q))-(1/P))] 注意P的下降.

Wolfram Alpha 正确显示:Wolfram Eval

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多