利用利润利润率率的公式式

7248人阅读
linux开发(28)
在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间,三者之和就是CPU的总时间,当没有用户进程、系统进程等需要执行的时候,CPU就执行系统缺省的空闲进程。从平常的思维方式理解的话,CPU的利用率就是非空闲进程占用时间的比例,即CPU执行非空闲进程的时间/
CPU总的执行时间。
在Linux系统中,CPU时间的分配信息保存在/proc/stat文件中,利用率的计算应该从这个文件中获取数据。文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下分配的时间片(单位是Jiffies),这些数据是从CPU加电到当前的累计值。常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。
不同版本的linux /proc/stat文件内容不一样,以Linux 2.6来说,/proc/stat文件的内容如下:
cpu&648 440
cpu1 85 82 6 2492 0
0 0 11 0 0 2 1 1 0 0 3 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
processes 401389
procs_running 1
procs_blocked 0
第一行的数值表示的是CPU总的使用情况,所以我们只要用第一行的数字计算就可以了。下表解析第一行各数值的含义:
解析(单位:jiffies)
user (2032004)
从系统启动开始累计到当前时刻,用户态的CPU时间,不包含 nice值为负进程。
nice (102648)
从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system (238344)
从系统启动开始累计到当前时刻,核心时间
从系统启动开始累计到当前时刻,除IO等待时间以外其它等待时间
iowait (758440)
从系统启动开始累计到当前时刻,IO等待时间
irq (15159)
从系统启动开始累计到当前时刻,硬中断时间
softirq (17878)
从系统启动开始累计到当前时刻,软中断时间
因为/proc/stat中的数值都是从系统启动开始累计到当前时刻的积累值,所以需要在不同时间点t1和t2取值进行比较运算,当两个时间点的间隔较短时,就可以把这个计算结果看作是CPU的即时利用率。
CPU的即时利用率的计算公式:
CPU在t1到t2时间段总的使用时间 = ( user2+ nice2+ system2+ idle2+ iowait2+ irq2+ softirq2) - ( user1+ nice1+ system1+ idle1+ iowait1+ irq1+ softirq1)
CPU在t1到t2时间段空闲使用时间 = (idle2 - idle1)
CPU在t1到t2时间段即时利用率 = &1 - CPU空闲使用时间 / CPU总的使用时间
这些值是谁,什么时候记录的呢?
每次timer的中断就会记录一次,记录在struct
里,实现在timer_tick -&update_process_times里。
那么它的精度就是HZ,如果HZ是100,就意味着每S记录100次。这个精度当然是不高的,而且容易出错,下面是在Documentation/cpu-load.txt中的一个例子:
& time line between two timer interrupts
|--------------------------------------|
^&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ^
|_ user appA begins working&&&&&&&&& |
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|_ user appA goes to sleep
结果这个A的动作没有被记录下来,这一S有可能被记录到其他的头上。如果你做的程序正好是那个其他,你就会抱怨说,这真是一陀屎呀。
那么有没有高精度的记录呢?
有,但是要自己写,就算你用oprofile之类的,他的原理也是用timer_interrupt记录的,你可以用其他的高精度timer,但是,频繁的中断会把系统弄死。所以要自己写,假设有一个高精度的硬件counter,好像x86下的TimeStamp Counter,
在cpu_idle 里记录idle的时间,在asm_do_IRQ里记录处理irq的时间,在context_switch记录进入了那个process,以及时间,在__do_softirq里记录处理softirq的时间,把这些东西记录在一块全局数组里。
也可以参考busybox中top的实现(在busybox/procps/top.c)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1079691次
积分:10255
积分:10255
排名:第1295名
原创:57篇
转载:524篇
评论:56条
(2)(1)(3)(12)(1)(2)(9)(4)(1)(6)(3)(11)(22)(22)(27)(14)(28)(37)(118)(46)(55)(15)(7)(4)(1)(4)(19)(1)(2)(5)(2)(5)(6)(3)(10)(3)(5)(4)(12)(9)(27)(9)(5)(1)(3)产能利用率计算方法_中华文本库
第1页/共7页
第1页/共7页
寻找更多 ""以太网的信道利用率 - n哖苡逅 - 博客园
随笔 - 105, 文章 - 0, 评论 - 8, 引用 - 0
以太网的信道利用率
我们假定:
总线上共有 N 个站,每个站发送帧的概率都是 p。
争用期长度为 2t,即端到端传播时延的两倍。检测到碰撞后不发送干扰信号。
帧长为 L (bit),数据发送速率为 C (b/s),因而帧的发送时间为 L/C = T0 (s)。
以太网的信道利用率
一个帧从开始发送,经碰撞后再重传数次,到发送成功且信道转为空闲(这里考虑最极端的情况,发送站在传输媒体的一端,即再经过时间t使得信道上无信号在传播)时为止,共需平均时间为 Tav。
我们应当注意到,成功发送一个帧需要占用信道的时间是T0 + t,比这个帧的发送时间要多一个单程端到端时延t。这是因为当一个站发送完最后一个比特时,这个比特还要在以太网上传播。如果这时有其他站发送数据,就必然产生碰撞。因此,必须在T0 +t以后才允许其他站发送数据。
要提高以太网的信道利用率,就必须减小t与T0之比。在以太网中定义了参数a,它是以太网单程端到端时延t与帧的发送时间T0之比:
当a&0时,表示只要一发生碰撞,就立即可以检测出来,并立即停止发送,因而信道资源不会被浪费。反之,参数a越大,表明争用期所占的比例增大,这就使得信道利用率降低。因此,以太网的参数a的值应当尽可能小些。
从上式可看出,这就要求分子t的数值要小些,分母T0的数值要大些。这就是说,当数据传输速率一定时,以太网的连线的长度受到限制(否则t的数值会太大),同时以太网的帧长不能太短(否则T0的值会太小)。
现在考虑一种理想化的情况。假定以太网上的各站发送数据都不会产生碰撞(这显然已经不是CSMA/CD而是需要使用一种特殊的调度方法),并且能够非常有效地利用网络的传输资源,即总线一旦空闲就有某一个站立即发送数据。这样,发送一帧占用线路的时间是T0 + t,而帧本身的发送时间是T0。于是我们可计算出极限信道利用率Smax为:
Smax=T0/(T0+t)=1/(1+a)
&该式指出了参数a远小于1才能得到尽可能高的极限信道利用率。反之,若参数a远大于1,则极限信道利用率就远小于1,而这时实际的信道利用率就更小了。
100BASE-T以太网的新标准
100BASE-T以太网的新标准改动了原10Mb/s以太网的某些规定。这里最主要的原因是要在数据发送速率提高时使参数a仍保持不变(或保持为较小的数值)。
a=t/T0=t/(L/C)=tC/L
可以看出,当数据率C提高10倍时,为了保持参数a不变,可以将帧长L(bit)也增长到10倍,也可以将网络电缆长度(因而使t)减小到原有数值的十分之一。
在100Mb/s的以太网中采用的方法是保持最短帧长不变,但把一个网段的最大电缆长度减少到100m。但最短帧长仍为64字节,即512比特。因此100Mb/s以太网的争用期是5.12us,帧间最小间隔现在是0.96us,都是10Mb/s以太网的1/10。

我要回帖

更多关于 圆的利用率 的文章

 

随机推荐