欢迎来到天天文库
浏览记录
ID:15399601
大小:234.09 KB
页数:14页
时间:2018-08-03
《linux_cpu_usage_analysis》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、LinuxCPU占用率原理与精确度分析http://ilinuxkernel.com1CPU占用率计算原理1.1相关概念在Linux/Unix下,CPU利用率分为用户态、系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和空闲系统进程执行的时间。下面是几个与CPU占用率相关的概念。CPU利用率CPU的使用情况。用户时间(Usertime)表示CPU执行用户进程的时间,包括nices时间。通常期望用户空间CPU越高越好。系统时间(Systemtime)表示CPU在内核运行时间,包括IRQ和softirq时间。系统CPU占用率
2、高,表明系统某部分存在瓶颈。通常值越低越好。等待时间(Waitingtime)CPI在等待I/O操作完成所花费的时间。系统部应该花费大量时间来等待I/O操作,否则就说明I/O存在瓶颈。空闲时间(Idletime)系统处于空闲期,等待进程运行。Nice时间(Nicetime)系统调整进程优先级所花费的时间。硬中断处理时间(HardIrqtime)系统处理硬中断所花费的时间。软中断处理时间(SoftIrqtime)系统处理软中断中断所花费的时间。丢失时间(Stealtime)被强制等待(involuntarywait)虚拟CPU的时间,此时h
3、ypervisor在为另一个虚拟处理器服务。下面是我们在top命令看到的CPU占用率信息及各项值含义。Cpu(s):0.2%us,0.2%sy,0.0%ni,99.2%id,0.5%wa,0.0%hi,0.0%si,0.0%stus:Usertimesy:Systemtimeni:Nicetimeid:Idletimewa:Waitingtimehi:HardIrqtimesi:SoftIrqtimest:Stealtime1.2CPU占用率计算LinuxCPU占用率计算,都是根据/proc/stat文件内容计算而来,下面是stat文件内容样例,内核
4、版本不同,会稍有不同,但内容基本一致。CPU信息,cpu为总的信息,cpu0…cpun为各个具体CPU信息cpu66173346850392523305557354883514244158490上面共有8个值(单位:ticks),分别为:Usertime,661733Nicetime,468Systemtime,503925Idletime,233055573Waitingtime,548835HardIrqtime,14244SoftIRQtime,15849Stealtime,0CPU占用率计算公式如下:CPU时间=user+system+nic
5、e+idle+iowait+irq+softirq+Stl%us=(Usertime+Nicetime)/CPU时间*100%%sy=(Systemtime+HardIrqtime+SoftIRQtime)/CPU时间*100%%id=(Idletime)/CPU时间*100%%ni=(Nicetime)/CPU时间*100%%wa=(Waitingtime)/CPU时间*100%%hi=(HardIrqtime)/CPU时间*100%%si=(SoftIRQtime)/CPU时间*100%%st=(Stealtime)/CPU时间*100%2CPU
6、占用率内核实现下面以RHEL6内核源码版本2.6.32-220.el6x86_64为例,来介绍内核源码实现。/proc/stat文件的创建由函数proc_stat_init()实现,在文件fs/proc/stat.c中,在内核初始化时调用。/proc/stat文件相关函数时间均在stat.c文件中。对/proc/stat文件的读写方法为proc_stat_operations。00152:staticconststructfile_operationsproc_stat_operations={00153:.open=stat_open,00154:
7、.read=seq_read,00155:.llseek=seq_lseek,00156:.release=single_release,00157:};00158:打开文件函数stat_open(),函数首先申请大小为size的内存,来存放临时数据(也是我们看到的stat里的最终数据)。00128:staticintstat_open(structinode*inode,structfile*file)00129:{00130:unsignedsize=4096*(1+num_possible_cpus()/32);00131:char*buf;0
8、0132:structseq_file*m;00133:intres;00134:00135:/*don't
此文档下载收益归作者所有
点击更多查看相关文章~~