`
xuela_net
  • 浏览: 497464 次
文章分类
社区版块
存档分类
最新评论

Linux内核源代码分析——vmstat核心代码注释

 
阅读更多

一次和圈子里的朋友群聊的时候,谈到了vmstat的实现机制。我当时正在轻轨上,幻想着从轻轨飞下去的快感。在轻轨上我发表了自己的一些看法,不过都是意淫。

现在,已经过去半周了,今天终于闲下来把vmstat的源代码翻出来。vmstat其实只是一个简单的统计显示工具,早期NetBSD版本的vmstat实现总共才不到1500行。所以,也不用期望本文会有多么高深。

完整的源文件(加注释)在附件中。(到现在为止,CSDN的blog似乎还没有上传附件的功能)

函数调用栈如下:

核心的代码段如下:

		fill_vmmeter(&sum);												//vm信息获取
		fill_vmtotal(&total);											//vm信息汇总
		(void)printf("%2d %1d %1d",
		    total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw);//显示t_rq,t_dw,t_sw三个值
#define vmstat_pgtok(a) ((a) * (sum.v_page_size >> 10))
#define	rate(x)	(((x) + halfuptime) / uptime)	/* round */
		if (hflag) {													//如果设置了hflag
			printf(" ");
			prthuman(total.t_avm * (u_int64_t)sum.v_page_size, 7);	//使用humanize_number格式显示v_page_size
			printf(" ");
			prthuman(total.t_free * (u_int64_t)sum.v_page_size, 6);		
			printf(" ");
		} else {
			printf(" %7d ", vmstat_pgtok(total.t_avm));	//使用一般格式显示t_avm
			printf(" %6d ", vmstat_pgtok(total.t_free));
		}
		(void)printf("%5lu ",
		    (unsigned long)rate(sum.v_vm_faults - osum.v_vm_faults));//显示vm错误比率
		(void)printf("%3lu ",
		    (unsigned long)rate(sum.v_reactivated - osum.v_reactivated));//显示v_reactivated比值
		(void)printf("%3lu ",
		    (unsigned long)rate(sum.v_swapin + sum.v_vnodein -
		    (osum.v_swapin + osum.v_vnodein)));//显示v_swapin比值
		(void)printf("%3lu ",
		    (unsigned long)rate(sum.v_swapout + sum.v_vnodeout -
		    (osum.v_swapout + osum.v_vnodeout)));//显示v_vnodeout比值
		(void)printf("%5lu ",
		    (unsigned long)rate(sum.v_tfree - osum.v_tfree));//显示v_tfree比值
		(void)printf("%3lu ",
		    (unsigned long)rate(sum.v_pdpages - osum.v_pdpages));//显示v_pdpages比值
		devstats();
		(void)printf("%4lu %4lu %4lu",
		    (unsigned long)rate(sum.v_intr - osum.v_intr),//显示v_intr比值
		    (unsigned long)rate(sum.v_syscall - osum.v_syscall),//显示v_syscall比值
		    (unsigned long)rate(sum.v_swtch - osum.v_swtch));	//显示v_swtch比值
		if (Pflag)
			pcpustats(ncpus, cpumask, maxid);
		else
			cpustats();	//这里会显示CPU的user时间、sys时间、Idle时间——百分比格式
		(void)printf("\n");
		(void)fflush(stdout);
		if (reps >= 0 && --reps <= 0)
			break;
		osum = sum;
		uptime = interval;
		/*
		 * We round upward to avoid losing low-frequency events
		 * (i.e., >= 1 per interval but < 1 per second).
		 */
		if (interval != 1)
			halfuptime = (uptime + 1) / 2;
		else
			halfuptime = 0;
		(void)sleep(interval);//睡眠inteval长的时间

分享到:
评论

相关推荐

    vmstat源代码注释

    vmstat核心源代码注释,对理解Linux下的工具原理挺有帮助。

    Linux系统命令top,ps,kill,free,vmstat等命令的源码

    Linux系统命令源码包,包含Top,Free,ps,kill等命令

    iostat_vmstat_详解

    Linux在具有高稳定性、可靠性的同时,具有很好的可伸缩性和扩展性,能够针对不同的应用和硬件环境调整,优化出满足当前应用需要的最佳性能。...下文将介绍几个较为重要的性能分析工具vmstat、iostat和sar及其使用。

    linux vmstat命令详解和使用实例.docx

    linux vmstat命令详解和使用实例.docx

    Linux vmstat命令实战详细解析

    vmstat命令是最常见的Linux/...一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如: 代码如下:root@ubuntu:~# vmstat 2 1procs ———–memory—

    linux性能分析工具

    Linux 中可以利用top,ps,iostat,vmstat等命令观察系统性能状况,但如果你觉得在几个工具间切换是件麻烦事,那可以试试 nmon。nmon 是IBM提供的运行于AIX/Linux平台的性能分析工具,可以在同一屏幕中输出CPU、内存、...

    linux性能调试之vmstat分析

    主要介绍了linux性能调试之vmstat分析。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    linux中vmstat的使用.docx

    linux中vmstat的使用.docx

    liunx后台vmstat命令

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都...

    top/free/ps等命令源代码

    linux下的procps源代码,包括 top、free、ps、kill、vmstat等。从gitlab上下载的,日期20210518。系统上的top命令不好用,很久之前就想将其替换掉,终于找到源代码了。

    Linux常见性能分析工具

    本资源通过描述命令作用,并结合实例,讲解Linux下常见的几种性能分析工具,包括vmstat、sar、iostat、free、uptime、netstat和top

    AIX VMSTAT的用法

    VMSTAT 用法 。

    sar 与vmstat命令.txt

    sar与vmstat命令简介 vmstat命令报告内核线程,虚拟内存、磁盘、陷阱、和CPU活动情况。 Kthr 线程活动情况 r 运行队列 b 等待队列

    Linux vmstat命令实战详解

    vmstat命令是常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix喜爱的命令,一个是Linux/Unix都支持...

    vmstat详解.

    vmstat详解.

    Linux操作系统Vmstat命令列出的属性详解

    vmstat是Virtual Meomory Statistics的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监视。它是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。iostat是I/O statistics的缩写,iostat工具将...

    Linux vmstat命令详解:监控系统资源

    如果你想动态的了解一下系统资源的使用状况,以及查看当前系统中到底是哪个环节最占用系统资源,就可以使用 vmstat 命令。 vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用...

    vmstat命令详解

    vmstat命令详解

    vmstat结果内容的解释

    vmstat结果内容的解释,和大家共享一下

    vmstat 命令详解

    vmstat 命令详解

Global site tag (gtag.js) - Google Analytics