zoukankan      html  css  js  c++  java
  • [C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明

    声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神。也欢迎大家一起探讨,交流,以共同进步~ 0.0

    1.Linux虚拟文件系统

      首先要明白,这到底是干啥的。[以下,引用博文linux 计算内存使用率http://blog.csdn.net/u010807846/article/details/40919393的原话,可以作为参考性理解]

      proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的采集流程图。

      其访问目录:/proc/*

    2.深入概述
      PROC:(/proc)读取proc文件系统,获取系统各种性能参数           
      CPU:
        使用率:/proc/stat 或者 /proc/cpuinfo
          用户模式(user),低优先级用户模式(nice),内核模式(system)和空闲的处理器时间(idle)
        计算方法:
          100*( user + nice + system / user + nice + system + idle)    
          备注:多核情况下某一进程cpu使用率是按cpu个数*100%计算的
        总的cpu时间
          totalCpuTime = user + nice + system + idle + iowait + irq + softirq + stealstolen  +  guest                
        单位:
          jiffies
          jiffies是内核中的一个全局变量,用来记录自系统启动一来产生的节拍数.(C中clock_t和CLOCKS_PER_SEC与此有关)
            在linux中,一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同,通常在1ms到10ms之间
          例子:
            user (38082)    从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
            nice (627)      从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
            system (27594)  从系统启动开始累计到当前时刻,处于核心态的运行时间
            idle (893908)   从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间iowait (12256) 从系统启动开始累计到当前时刻,IO等待时间(since 2.5.41)
            irq (581)           从系统启动开始累计到当前时刻,硬中断时间(since 2.6.0-test4)
            softirq (895)      从系统启动开始累计到当前时刻,软中断时间(since 2.6.0-test4)stealstolen(0)  
      内存:
        使用情况:/proc/meminfo
        当前内存使用量(cmem),内存总量(amem)
        计算方法:100*(cmem / amem)

        详情见博主另一博文:

          Linux之计算内存利用率与辨析 :http://www.cnblogs.com/johnnyzen/p/8011309.html
      网络负载:
        使用情况:/proc/net/dev
        从本机输出的数据包数(output),流入本机的数据包数(input)
        计算方法:(output + input)/2    

        详情见博主另一博文:

          Linux之读取计算机网络数据[/proc/net/dev] :http://www.cnblogs.com/johnnyzen/p/8007577.html

          Linux之网络实时检测功能[C编程] :http://www.cnblogs.com/johnnyzen/p/8009053.html
      其他(内核等):
        /proc/sys
          存放所有可读的文件的目录
        /proc/sys/kernel
          包含反通用内核行为的信息
        /proc/sys/net
          修改机器/网络的网络属性
      实例:
        允许IP转发:/proc/sys/net/ipv4/ip_forward
        禁止ping:/proc/sys/net/ipv4/icmp_echo_ignore_all【1:实现配置;0:取消配置】

    3.参考文献:

       [操作系统课程设计]:https://max.book118.com/html/2017/0104/79942647.shtm
            [操作系统课程设计报告]:https://wenku.baidu.com/view/1c083c4dc77da26924c5b0c7.html      
            [Linux平台Cpu使用率的计算]:http://www.blogjava.net/fjzag/articles/317773.html
            [Linux系统下输出某进程内存占用信息的c程序实现]:https://www.cnblogs.com/bozhicheng/p/6216667.html
            [关于proc和CPU计算与原理]:https://wenku.baidu.com/view/375b7311f01dc281e53af0c6.html   

  • 相关阅读:
    dinoql 试用
    dinoql 使用graphql 语法查询javascript objects
    使用git_stats 统计分析git 仓库代码&& 集成webhook
    使用gitstats分析git 仓库代码
    PostGraphile 4.4 发布,支持real time 查询
    cube.js 学习(十)cube 来自官方的学习网站
    Optimize Cube.js Performance with Pre-Aggregations
    cube.js 学习(九)cube 的pre-aggregation
    cube.js 学习(八)backend部署模式
    cube.js 学习(七)cube.js type 以及format 说明
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/8011374.html
Copyright © 2011-2022 走看看