Linux性能优化2.1 CPU性能统计信息

简介:

摘要

性能工具:系统CPU

本章概述了系统级的Linux性能工具。这些工具是你追踪性能问题时的第一道防线。它们能展示整个系统的性能情况和哪些部分表现不好。本章将讨论这些工具可以测量的统计信息,以及如何使用各种工具收集这些统计结果。阅读本章后,你将能够:

理解系统级性能的基本指标,包括CPU的使用情况。

明白哪些工具可以检索这些系统级性能指标。


2.1 CPU性能统计信息


每一种系统级Linux性能工具都提供了不同的方式来提取相似的统计结果。虽然没有工具能显示全部的信息,但是有些工具显示的是相同的统计信息。为了不多次(每种工具一次)解释统计信息的含义,我们在描述所有工具之前对这些信息进行一次性说明。

2.1.1 运行队列统计

在Linux中,一个进程要么是可运行的,要么是阻塞的(正在等待一个事件的完成)。阻塞进程可能在等待的是从I/O设备来的数据,或者是系统调用的结果。如果进程是可运行的,那就意味着它要和其他也是可运行的进程竞争CPU时间。一个可运行的进程不一定会使用CPU,但是当Linux调度器决定下一个要运行的进程时,它会从可运行进程队列中挑选。如果进程是可运行的,同时又在等待使用处理器,这些进程就构成了运行队列。运行队列越长,处于等待状态的进程就越多。

性能工具通常会给出可运行的进程个数和等待I/O的阻塞进程个数。另一种常见的系统统计是平均负载。系统的负载是指正在运行和可运行的进程总数。比如,如果正在运行的进程为两个,而可运行的进程为三个,那么系统负载就是5。平均负载是给定时间内的负载量。一般情况下,取平均负载的时间为1分钟、5分钟和15分钟。这能让你观察到负载是如何随时间变化的。

2.1.2 上下文切换

大部分现代处理器一次只能运行一个进程或线程。虽然有些处理器(比如超线程处理器)实际上可以同时运行多个进程,但是Linux会把它们看作多个单线程处理器。如果要制造出给定单处理器同时运行多个任务的假象,Linux内核就要不断地在不同的进程间切换。这种不同进程间的切换称为上下文切换,因为当其发生时,CPU要保存旧进程的所有上下文信息,并取出新进程的所有上下文信息。上下文中包含了Linux跟踪新进程的大量信息,其中包括:进程正在执行的指令,分配给进程的内存,进程打开的文件等。这些上下文切换涉及大量信息的移动,因此,上下文切换的开销可以是相当大的。尽量减少上下文切换的次数是个好主意。

要避免上下文切换,重要的一点是了解它们是如何发生的。首先,上下文切换可以是内核调度的结果。为了保证公平地给每个进程分配处理器时间,内核周期性地中断正在运行的进程,在适当的情况下,内核调度器会决定开始另一个进程,而不是让当前进程继续执行。每次这种周期性中断或定时发生时,你的系统都可能进行上下文切换。每秒定时中断的次数与架构和内核版本有关。一个检查中断频率的简单方法是用/proc/interrupts文件,它可以确定已知时长内发生的中断次数。如清单2.1所示。

清单2.1

 

在清单2.1中,我们要求内核给出定时器启动的次数,等待10秒后,再次请求。这就是说,在这台机器上定时器启动频率为(24 070 093-24 060 043)中断/(10秒)或者约1000次中断/秒。如果你的上下文切换明显多于定时器中断,那么这些切换极有可能是由I/O请求或其他长时间运行的系统调用(如休眠)造成的。当应用请求的操作不能立即完成时,内核启动该操作,保存请求进程,并尝试切换到另一个已就绪进程。这能让处理器尽量保持忙状态。

2.1.3 中断

此外,处理器还周期性地从硬件设备接收中断。当设备有事件需要内核处理时,它通常就会触发这些中断。比如,如果磁盘控制器刚刚完成从驱动器取数据块的操作,并准备好提供给内核,那么磁盘控制器就会触发一个中断。对内核收到的每个中断,如果已经有相应的已注册的中断处理程序,就运行该程序,否则将忽略这个中断。这些中断处理程序在系统中具有很高的运行优先级,并且通常执行速度也很快。有时,中断处理程序有工作要做,但是又不需要高优先级,因此它可以启动“下半部”(bottom half),也就是所谓的软中断处理程序。如果有很多中断,内核会花大量的时间服务这些中断。查看/proc/interrupts文件可以显示出哪些CPU上触发了哪些中断。

2.1.4 CPU使用率

CPU使用率是个简单的概念。在任何给定的时间,CPU可以执行以下七件事情中的一个:

(1)CPU可以是空闲的,这意味着处理器实际上没有做任何工作,并且等待有任务可以执行。

(2)CPU可以运行用户代码,即指定的“用户”时间。

(3)CPU可以执行Linux内核中的应用程序代码,这就是“系统”时间。

(4)CPU可以执行“比较友好”的或者优先级被设置为低于一般进程的用户代码。

(5)CPU可以处于iowait状态,即系统正在等待I/O(如磁盘或网络)完成。

(6)CPU可以处于irq状态,即它正在用高优先级代码处理硬件中断。

(7)CPU可以处于softirq模式,即系统正在执行同样由中断触发的内核代码,只不过其运行于较低优先级(下半部代码)。

此情景出现的条件为:发生设备中断时,而内核在将其移交给用户空间之前必须对其进行一些处理(比如,处理网络包)。

大多数性能工具将这些数值表示为占CPU总时间的百分比。这些时间的范围从0%到100%,但全部三项加起来等于100%。一个具有高“系统”百分比的系统表明其大部分时间都消耗在了内核上。像oprofile一样的工具可以帮助确定时间都消耗在了哪里。具有高“用户”时间的系统则将其大部分时间都用来运行应用程序。下一章展示在上述情况下,如何用性能工具追踪问题。如果系统在应该工作的时候花费了大量的时间处于iowait状态,那它很可能在等待来自设备的I/O。导致速度变慢的原因可能是磁盘、网卡或其他设备。

相关文章
|
18天前
|
存储 传感器 运维
linux系统资源统计工具
【4月更文挑战第1天】Linux系统监控工具如dstat、htop、glances、vmstat、top、iostat、mpstat、sar和atop,用于跟踪CPU、内存、磁盘I/O、网络和进程性能。这些工具提供实时、交互式和历史数据分析,助力管理员优化系统性能和故障排查。例如,dstat是vmstat等工具的增强版,htop提供彩色界面的进程管理,而atop则结合了多种功能并记录历史数据。
27 5
linux系统资源统计工具
|
24天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
24天前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
65 0
|
28天前
|
存储 Unix Shell
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐Linux 显示系统的基本信息 uname命令 使用指南
34 1
|
10天前
|
Linux
centos 查看服务器信息 版本cpu
centos 查看服务器信息 版本cpu
9 0
|
10天前
|
安全 Unix Linux
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
一、linux 常用命令之 linux版本信息 系统管理与设置 持续更新******
14 0
|
12天前
|
监控 Linux
|
17天前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
13 1
|
24天前
|
存储 监控 Linux
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
Linux 使用getrusage系统调用获取cpu信息:一个C++实例分析
48 0
|
25天前
|
存储 缓存 并行计算
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
【软件设计师备考 专题 】CPU和存储器的组成、性能和基本工作原理
53 0