unix平均负载average load计算方法

average load?表示系统在一段时间内的平均进程个数,也就是表示系统的繁忙程度。average load和CPU利用率不一样,更加能够表示系统的繁忙程度,下面将就系统的average load的计算和相关进行简单介绍。

查看方法

在linux系统下使用uptime命令,或者查看/proc/loadavg都可以看到系统负载average load。使用uptime命令会显示系统分别在过去的1分钟,5分钟和10分钟里的平均负载。

[[email protected] ~]# uptime

19:32:09 up 5 days, 8:53, 5 users, load average: 0.05, 0.04, 0.05

[[email protected] ~]# cat /proc/loadavg

0.04 0.04 0.05 1/394 23203

那么uptime命令计算load average的工作原理是什么呢?

计算方法

对于单cpu和多cpu情况,系统的average load情况稍有不同。单cpu是最简单的情形,比如过去的平均一分钟里面,判断系统处于运行或者等待状态的进程数则表示系统的平均负载,但是在linux系统下稍有不同,那些处于io等待状态的进程也会被纳入去计算。这样就导致CPU利用率可能和平均负载很不同,在大部分进程都在做IO的时候,即使平均负载很大,也会没有很大的CPU利用率。另外,有些系统对于进程和线程的处理也很不一样,有的对于每一个线程都会进行计算,有的只关注进程,对于超线程技术的线程来说,可能又是别的处理方式。对于多CPU的平均负载的计算,是在单CPU的情况下再除以CPU的个数。

文件: kernel/timer.c:


unsigned long avenrun[3];

static inline void calc_load(unsigned long ticks)
{
unsigned long active_tasks; /* fixed-point */
static int count = LOAD_FREQ;

count -= ticks;
if (count < 0) {
count += LOAD_FREQ;
active_tasks = count_active_tasks();
CALC_LOAD(avenrun[0], EXP_1, active_tasks);
CALC_LOAD(avenrun[1], EXP_5, active_tasks);
CALC_LOAD(avenrun[2], EXP_15, active_tasks);
}
}

内核中的函数sched.h

/*
 * These are the constant used to fake the fixed-point load-average
 * counting. Some notes:
 *  - 11 bit fractions expand to 22 bits by the multiplies: this gives
 *    a load-average precision of 10 bits integer + 11 bits fractional
 *  - if you want to count load-averages more often, you need more
 *    precision, or rounding will get you. With 2-second counting freq,
 *    the EXP_n values would be 1981, 2034 and 2043 if still using only
 *    11 bit fractions.
 */
extern unsigned long avenrun[];         /* Load averages */
extern void get_avenrun(unsigned long *loads, unsigned long offset, int shift);

#define FSHIFT          11              /* nr of bits of precision */
#define FIXED_1         (1<<FSHIFT)     /* 1.0 as fixed-point */
#define LOAD_FREQ       (5*HZ+1)        /* 5 sec intervals */
#define EXP_1           1884            /* 1/exp(5sec/1min) as fixed-point */
#define EXP_5           2014            /* 1/exp(5sec/5min) */
#define EXP_15          2037            /* 1/exp(5sec/15min) */

#define CALC_LOAD(load,exp,n) \
        load *= exp;         load += n*(FIXED_1-exp);         load >>= FSHIFT;

extern unsigned long total_forks;
extern int nr_threads;
DECLARE_PER_CPU(unsigned long, process_counts);
extern int nr_processes(void);
extern unsigned long nr_running(void);
extern unsigned long nr_uninterruptible(void);
extern unsigned long nr_iowait(void);
extern unsigned long nr_iowait_cpu(int cpu);
extern unsigned long this_cpu_load(void);

ewma算法

linux系统在很多方面都使用了这个算法,比如除了这个还有TC系统的CBQ算法,这是统计学的一个算法,具体请参考http://en.wikipedia.org/wiki/EWMA_charthttp://en.wikipedia.org/wiki/Moving_average

参考文献

http://man.he.net/man8/tc-cbq-details

linux内核代码

http://en.wikipedia.org/wiki/EWMA_chart

http://en.wikipedia.org/wiki/Moving_average

时间: 2024-10-18 02:03:16

unix平均负载average load计算方法的相关文章

Linux系统平均负载3个数字的含义

越来越多人开始接触Linux操作系统,从VPS到无线路由的刷机系统(如OpenWRT.Tomato),同时也必不可少地会在各式各样的探针和系统监测界面上看到"系统平均负载"或者"Load Average"这样的字眼,但是它并不像我们习惯中Windows.Mac操作系统提供百分比显示CPU.内存占用率,而是以几个用空格隔开的浮点数来表示系统平均负载,那么它们到底是什么意思呢?又如何衡量系统负载及系统的稳定性呢? 系统平均负载-基本解释 在Linux shell下,有很

02 基础篇:到底应该怎么理解“平均负载”?

02 | 基础篇:到底应该怎么理解"平均负载"? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果. uptime 02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 但我想问的是,你真的知道这里每列输出的含义吗?我相信你对前面的几列比较熟悉,它们分别是当前时间.系统运行时

什么是系统平均负载(Load average)

一.什么是系统平均负载(Load average)? 在Linux系统中,uptime.w.top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢? Load Average是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息. 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树.如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等

【Linux性能调优一】观大局:系统平均负载load average

要测试linux系统性能及调优,首先要从全局检查linux的平均负载 1.什么是平均负载 load average 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.也可简单理解为平均活跃进程数. 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runn

【随笔】平均负载

中断 中断是实现多道程序设计的必要条件. 中断是CPU对系统发生的某个事件作出的一种反应. 引起中断的事件称为中断源.中断源向CPU提出处理的请求称为中断请求.发生中断时被打断程序的暂停点称为断点.CPU暂停现行程序而转为响应中断请求的过程称为中断响应.处理中断源的程序称为中断处理程序.CPU执行有关的中断处理程序称为中断处理.而返回断点的过程称为中断返回.中断的实现实行软件和硬件综合完成,硬件部分叫做硬件装置,软件部分称为软件处理程序. 上下文切换 多任务系统中,上下文切换是指CPU的控制权由

[转载] Linux/Unix 系统负载原理解析[英文]

PDF下载:http://vdisk.weibo.com/s/cULRe2mYCQsPz/1407491911 [转载] http://yuxu9710108.blog.163.com/blog/static/23751534201022593028822/ CALC_LOAD() calc_load()工作原理 In this two part-series I want to explore the use of averages in performance analysis and ca

linux /proc/loadavg(平均负载)

一.什么是系统平均负载(Load average)?在Linux系统中,uptime.w.top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等待I/O操作的结果 - 它没有主动进入等待状态(也就是没有调用'wait') - 没有被停止(例如:等待终止) 例如: [[email protected] root]# uptime 7:51pm

深度理解平均负载

为了进一步理解系统负载,需要做一些假设.假设系统负载如下:23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35在单核系统中意味着:CPU 被充分利用(100%):最近的 1 分钟有 1 个进程在运行.CPU 有 60% 处于空闲状态:在最近的 5 分钟没有进程等待 CPU 时间.CPU 平均过载了 235%:最近的 15 分钟平均有 2.35 个进程在等待 CPU 时间.在双核系统中意味着:有一个 CPU 处于完全空闲状态,另一个 C

什么是CPU平均负载

所属分类:运维教程 平均负载是指上一分钟同时处于就绪状态的平均进程数.在CPU中可以理解为CPU可以并行处理的任务数量,就是CPU个数X核数.如果CPU Load等于CPU个数乘以核数,那么就说CPU正好满负载,再多一点,可能就要出问题了,有些任务不能被及时分配处理器,那要保证性能的话,最好要小于CPU个数X核数X0.7. Load Average是指CPU的Load.它所包含的信息是在一段时间内CPU正在处理及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息. Loa