• Linux内核与驱动面试经典“小”问题集锦(7)


    接前一篇文章:Linux内核与驱动面试经典“小”问题集锦(6)

    问题9

    问:查看CPU的负载情况一般都用什么工具或命令?都能得到哪些信息?

    备注:此问题是笔者年前参加蔚来面试时遇到的一个问题。考察的是Linux系统性能优化这一块内容。

    答:要回答这个问题,先得讲清楚CPU的性能指标。CPU的性能指标一般有以下几个:

    (1)CPU使用率

    这是实际环境中最常见的一个性能指标。CPU使用率是用来衡量CPU在一定时间内执行的任务数量和处理能力的一个指标,其描述了非空闲时间占总CPU时间的百分比。根据CPU上运行任务的不同,又被分为用户CPU、系统CPU、等待IO CPU、软中断和硬中断等。

    • 用户CPU使用率

    用户CPU使用率则是描述CPU执行由用户发起的任务的时长,表示CPU在用户态运行的时间百分比。包括用户态CPU使用率(user)和低优先级用户态CPU使用率(nice)。用户CPU使用率高,通常说明有用户应用程序比较繁忙。

    • 系统CPU使用率

    系统CPU使用率指的是CPU处理与操作系统相关任务的时长,如管理内存、磁盘操作和网络通信等。其表示的是CPU在内核态运行的时间百分比(注意,不包括中断)。系统CPU使用率高,说明内核比较繁忙。

    • 等待I/O的CPU使用率

    通常也称为iowait,表示等待I/O的时间百分比。iowait高,通常说明系统与硬件设备的I/O交互所耗费的时间比较长。

    • 软中断和硬中断的CPU使用率

    分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。他们的使用率高,通常说明系统发生了大量的中断。

    除了上边的这几个,还有在虚拟化环境中会用到的窃取CPU使用率(steal)和客户机(guest)CPU使用率。窃取CPU使用率表示被其它虚拟机占用的CPU时间百分比,客户机CPU使用率表示运行客户虚拟机的CPU时间百分比。

    影响CPU使用率的几个主要因素包括:

    • 运行的应用程序类型:例如,与网页浏览器或文本编辑器这样的轻量级应用相比,像视频编辑软件或大型游戏这类的资源密集型应用会消耗更多CPU资源。
    • 系统和服务后台进程:即使你没有实际运行任何程序,这些后台进程和系统服务仍在处理各种系统操作,进而增加CPU使用率。

    (2)平均负载(Load Average)

    平均负载也即系统的平均活跃进程数,其反映了系统的整体负载情况。在CPU中可以理解为CPU可以并行处理的任务数量,就是CPU个数X核数。主要包括三个数值,分别是过去1分钟、过去5分钟和过去15分钟的平均负载。

    理想情况下,平均负载数等于逻辑CPU个数,这表示每个CPU都恰好被充分利用,“增一分则肥、减一分则瘦”。如果平均负载大于逻辑CPU个数,则就表示负载比较重了。Load Average的值应该小于CPU个数 x 核数 x 0.7(即逻辑CPU数 x 0.7)。如果1分钟平均出现大于CPU个数X核数的情况,还不需要担心;如果5分钟的平均也是这样,那就要警惕了;15分钟的平均也是这样,就要分析哪里出现问题,防范未然。

    (3)进程上下文切换时间

    这个指标一般不易被关注、容易被忽略。进程上下文切换包括:

    • 无法获取资源而导致的自愿(主动)上下文切换;

    被系统强制调度而导致的非自愿(被动)上下问切换。

    上下问切换,本身是保证Linux正常运行的一项核心功能,但过多的上下文切换,会将原本运行进程的CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上。这样就会缩短进程真正运行的时间,从而成为性能瓶颈。这就好比一个人刚刚摆上笔墨纸砚要写字,没写一会就被告知要要给孩子吃水果了得收拾桌子,没吃两口小孩不吃了,又得重新摆上笔墨纸砚,刚要写又被通知该区做饭了……结果就是哪件事也做不好。

    (4)CPU缓存的命中率

    除了以上三个指标,还有一个比较重要的CPU性能指标 —— CPU缓存的命中率。由于CPU的发展速度远快于内存的发展,CPU的处理速度远比内存的访问速度快得多,两者速度不匹配。这样就导致了CPU在访问内存的时候,免不了要等待内存的响应。为了协调和匹配CPU和内存的巨大性能差距,CPU缓存(通常是多级缓存)就出现了。CPU缓存的速度介于CPU和内存之间,缓存的是热点内存数据。这些缓存按照大小不同分为L1、L2、L3三级缓存,其中L1、L2常用在单核中,L3则用在多核中。从L1到L3,缓存的大小依次增大,而性能一次降低(当然和内存比还是快得多)。而缓存的命中率,则衡量的是CPU缓存的复用情况,命中率越高,表示性能越好。

    至此,CPU的性能指标就基本上讲解完了,下一回开始讲解获取CPU性能指标的相关性能工具。

    参考资料:

    《Linux性能优化实战》 —— 倪朋飞

  • 相关阅读:
    ABAP 报表中如何以二进制方式上传本地文件试读版
    SpringSecurity学习 - 认证和授权
    使用位运算实现加减乘除(+、-、*、/)及比较器的用法
    Spring MVC框架看这篇就够了
    (附源码)计算机毕业设计SSM基于的高校在线办公系统
    【python中级】linux下timeout_decorator程序超时处理
    Volatility2工具mimiktz脚本
    Docker开箱即用,开发码农加分项部署技术拿下!
    js--事件循环机制
    Visual Studio 生产环境配置方案:SlowCheetah
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/136246802