linuxloadavg算法_PHP教程

php中文网
发布: 2016-07-13 17:26:14
原创
1174人浏览过

linux loadavg 算法
发表人:biti_rainy
今天读linux source code关于cpu load 的计算方法,同时在google上搜索到处参考,晕乎了半天,终于弄明白cpu load 的计算方法了,并不是简单的移动算术平均。
对于linux来说,采样计算load时间间隔为5秒,这都是在source code里面定义的固定数字,其采样结构通过动态内存文件系统 /proc/loadavg 可以动态的得到适时数据,其他工具的输出,比如 uptime / top/sar 等都是读该内存数据所产生的。我们在这里主要考究kernel的算法。
对于5秒的间隔,是动态地采样cpu状态数据,也就是run queue size ,这包括正在cpu中running的进程数量以及在cpu等待队列里面的进程数量。对于linux来说,实际上会计算1分钟、5分钟、15分钟的移动平均。为此首先我们要介绍linux 里面定义的3个常量:
#define EXP_1 1884 /* 1/exp(5sec/1min) */
#define EXP_5 2014 /* 1/exp(5sec/5min) */
#define EXP_15 2037 /* 1/exp(5sec/15min) */
三个常量分别表示1/5/15分钟的常量,计算方法是:
1884 = 2048/(power(e,(5/(60*1)))) /* e = 2.71828 */
2014 = 2048/(power(e,(5/(60*5))))
2037 = 2048/(power(e,(5/(60*15))))
我们假定前一时刻按常量1884计算的load为 load1(t-1),当前采样run queue size 为 rq1,则当前load1(t) = ((load1(t-1) * 1884) + rq1 * (2048 - 1884))/2048
同理可以5分钟和15分钟移动平均的算法分别为 load5(t) = ((load5(t-1) * 2014) + rq1 * (2048 - 2014))/2048和load_15(t) = ((load15(t-1) * 2037) + rq1 * (2048 - 2037))/2048


由此可以看出,移动平均间隔越大,当前run queue size 对移动平均的影响趋向减小。
至于为什么取这个数,涉及到微积分方面的知识了,这样做出的图象更平滑。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/532000.htmlTechArticlelinux loadavg 算法 发表人:biti_rainy 今天读linux source code关于cpu load 的计算方法,同时在google上搜索到处参考,晕乎了半天,终于弄明白cpu loa...
相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号