CPU
视角
• 资源分析视角
→ 系统管理员
• 工作负载分析视角
→ 应用开发者
CPUs – 术语
• 处理器:插入系统或处理器板上的插槽的物理芯片,其中包含一个或多个作为核心或硬件线程实现的CPU。
• 核心:多核处理器上的独立CPU实例。使用核心是一种扩展处理器的方法,称为芯片级多处理(CMP)。
• 硬件线程:支持在单个核心上并行执行多个线程的CPU架构(包括Intel的超线程技术),其中每个线程都是一个独立的CPU实例。这种扩展方法称为同时多线程(SMT)。
• CPU指令:来自其指令集的单个CPU操作。有用于算术操作、内存I/O和控制逻辑的指令。
• 逻辑CPU:也称为虚拟处理器,操作系统CPU实例(可调度的CPU实体)。这可能由处理器实现为硬件线程(在这种情况下,它也可能被称为虚拟核心)、核心或单核处理器。
• 调度器:将线程分配给CPU的内核子系统。
• 运行队列:等待由CPU服务的可运行线程的队列。现代内核可能使用其他数据结构(例如,红黑树)来存储可运行的线程,但我们仍然经常使用运行队列这个术语。
CPU架构
• 每个硬件线程都可以作为逻辑CPU进行寻址
■ 此处理器显示为八个CPU
• 操作系统可能对拓扑有一些额外的知识,以改进其调度决策
■ 例如,哪些CPU在同一个核心上以及如何共享CPU缓存
CPUs和缓存
• 处理器提供各种硬件缓存,以提高内存I/O性能
■ 缓存未命中、缓存命中、缓存温度
■ 局部性
CPU运行队列
• 排队并准备运行的软件线程的数量是一个重要的性能指标,表示CPU饱和
• 在CPU运行队列上等待的时间有时称为运行队列延迟或调度器队列延迟
■ 通常,我们称之为调度器延迟
• 内核通常为每个CPU提供一个运行队列
■ 保持线程在同一个运行队列上 - CPU亲和性
时钟速率和指令
• 时钟是驱动所有处理器逻辑的数字信号
■ 4 GHz的CPU每秒执行40亿个时钟周期
■ 有些处理器可以改变其时钟速率
■ 增加它以提高性能
■ 减少它以减少功耗
• 每个CPU指令可能需要一个或多个时钟周期(称为CPU周期)来执行
• 时钟速率是一个误导性的指标
■ 指令需要更多或更少的周期来执行
■ 等待内存访问时有停顿周期是很常见的
CPU利用率
• CPU利用率是通过在一个间隔期间CPU实例忙于执行工作的时间来测量的 - 以百分比表示
■ 测量为CPU不运行内核空闲线程的时间,而是运行用户级应用程序线程或其他内核线程,或处理中断。
■ 包括内存停顿周期
• 高CPU利用率可能不一定是问题,而是系统正在工作的迹象
■ 良好的投资回报率(ROI)指标
• 在高利用率下,性能不会急剧下降,因为内核支持优先级、抢占和时间共享
• 通常分为单独的内核和用户时间指标
CPU饱和
架构
![](https://i-blog.csdnimg.cn/blog_migrate/257e3b442ac9817f048bcf9c5f3690ad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cf814017aebe25c584009731677ef91a.png)
CPU工具
使用Perf的CPU分析
CPU分析方法
使用火焰图进行分析
内存
内存 - 术语
• 主内存:也称为物理内存,描述计算机的快速数据存储区域,通常提供为DRAM。
• 虚拟内存:一个(几乎)无限且无竞争的主内存抽象。虚拟内存不是真实的内存。
• 常驻内存:当前驻留在主内存中的内存。
• 地址空间:一个内存上下文。每个进程和内核都有虚拟地址空间。
• 页:作为操作系统和CPU使用的内存单位。历史上它是4或8 Kbytes。现代处理器支持更大尺寸的多个页面大小。
• 页错误:无效的内存访问。使用按需虚拟内存时,这些是正常发生的。
• 分页:主内存和存储设备之间的页面传输。
• 交换(swapping):Linux使用交换这个术语来指代到交换设备的匿名分页(交换页面的传输)。
• 交换(swap):分页匿名数据的磁盘区域。它可能是存储设备上的一个区域,也称为物理交换设备,或者是文件系统文件,称为交换文件。一些工具使用交换这个术语来指代虚拟内存(这是令人困惑且不正确的)。
内存问题
• 超额分配:Linux允许分配的内存超过系统可能存储的内存——超过物理内存和交换设备的总和。
• 交换
• 工作集大小:进程经常使用的主内存量以执行工作。
• 应适合缓存 • 内存利用率和饱和度
• 主内存利用率可以计算为已使用的内存与总内存之比。
内存硬件
• 主内存 - 动态随机存取内存 (DRAM)
• 统一内存访问 vs 非统一内存访问
• 总线 - DDR SDRAM (双数据速率同步动态随机存取内存)
内存监控
• 利用率:使用的百分比,可以从可用内存中推断出来。
• 饱和度:交换,OOM杀死。
• 内存泄漏:一种软件错误,其中内存不再被使用但永远不会被释放。这可以通过修改软件代码,或者应用补丁或升级(修改代码)来修复。
• 内存增长:软件正常消耗内存,但消耗的速度远高于系统所希望的。这可以通过更改软件配置来修复,或者由软件开发者更改应用程序如何消耗内存。
内存工具 (1)
• 页面扫描:查找持续的页面扫描(超过10秒)作为内存压力的标志。这可以使用sar -B并检查pgscan列来完成。
• 压力停滞信息 (PSI):使用cat /proc/pressure/memory (Linux 4.20+)来检查内存压力(饱和度)统计信息以及它随时间如何变化。
• 交换:如果配置了交换,内存页面的交换(Linux定义的交换)进一步表明系统内存不足。您可以使用vmstat(8)并检查si和so列。
• vmstat:运行vmstat 1并检查free列以获取可用内存。
内存工具 (2)
• OOM killer:这些事件可以在系统日志/var/log/messages中看到,或者从dmesg(1)中看到。搜索“内存不足”。
• top:查看哪些进程和用户是物理内存消费者(常驻)和虚拟内存消费者(查看手册页以获取列的名称,这取决于版本)。top(1)还总结了空闲内存。
• perf(1)/BCC/bpftrace:使用堆栈跟踪跟踪内存分配,以确定内存使用的原因。请注意,这可能会产生相当大的开销。一个更便宜,尽管粗糙的解决方案是进行CPU分析(定时堆栈采样)并搜索分配代码路径。
文件系统
文件系统术语 (1)
• 文件系统:数据的组织形式为文件和目录,具有用于访问它们的基于文件的接口,以及文件权限来控制访问。其他内容可能包括设备、套接字和管道的特殊文件类型,以及文件访问时间戳等元数据。
• 文件系统缓存:主内存的一个区域(通常是DRAM)用于缓存文件系统内容,其中可能包括各种数据和元数据类型的不同缓存。
• 操作:文件系统操作是文件系统的请求,包括read(2)、write(2)、open(2)、close(2)、stat(2)、mkdir(2)和其他操作。
• I/O:输入/输出。文件系统I/O可以用几种方式定义;这里它仅用于指直接读取和写入(执行I/O)的操作,包括read(2)、write(2)、stat(2)(读取统计信息)和mkdir(2)(写入新目录条目)。I/O不包括open(2)和close(2)(尽管这些调用更新元数据并可能导致间接磁盘I/O)。
文件系统术语 (2)
• 逻辑I/O:应用程序向文件系统发出的I/O。
• 物理I/O:文件系统直接向磁盘发出的I/O(或通过原始I/O)。
• 块大小:也称为记录大小,是文件系统磁盘数据组的大小。
• 吞吐量:应用程序与文件系统之间的当前数据传输速率,以每秒字节数为单位。
• inode:索引节点(inode)是一个数据结构,包含文件系统对象的元数据,包括权限、时间戳和数据指针。
• VFS:虚拟文件系统,一个内核接口,用于抽象和支持不同的文件系统类型。
文件系统接口
• 逻辑和物理操作发生的位置
• 通用对象操作
• 内核可能实现额外的变体
• 例如,Linux提供了readv(2)、writev(2)、openat(2)等
文件系统性能监控
• 操作速率:应用工作负载的基本特征
• 操作延迟
• 正常或不良延迟的值取决于您的工作负载、环境和延迟要求
• 操作延迟指标可以作为每秒的平均值进行监控,并可以包括最大值和标准偏差等其他值。
文件系统可观察性工具
• mount:列出文件系统及其挂载标志
• free:缓存容量统计
• top:包括内存使用情况摘要 • vmstat:虚拟内存统计
• sar:包括历史的各种统计
• slabtop:内核slab分配器统计
• strace:系统调用跟踪
• fatrace:使用fanotify跟踪文件访问操作
• latencytop:显示系统范围的延迟来源
• opensnoop:跟踪打开的文件
• filetop:按IOPS和字节显示使用最多的文件
• cachestat:页面缓存统计
• ext4dist (xfs, zfs, btrfs, nfs):显示ext4操作延迟分布 • ext4slower (xfs, zfs, btrfs, nfs):显示慢速ext4操作
• bpftrace:自定义文件系统跟踪
网络
网络 - 术语
• 接口:术语“接口端口”指的是物理网络连接器。术语“接口”或“链接”指的是操作系统看到和配置的网络接口端口的逻辑实例。 (并非所有的操作系统接口都由硬件支持:有些是虚拟的。)
• 数据包:术语“数据包”指的是分组交换网络中的消息,例如IP数据包。
• 帧:物理网络级消息,例如以太网帧。
• 套接字:起源于BSD的网络端点的API。
• 带宽:网络类型的数据传输的最大速率,通常以每秒位数来衡量。 “100 GbE”是带宽为100 Gbit/s的以太网。每个方向可能都有带宽限制,因此100 GbE可能能够并行传输100 Gbit/s和接收100 Gbit/s(总吞吐量为200 Gbit/s)。
• 吞吐量:当前网络端点之间的数据传输速率,以每秒位数或每秒字节数来衡量。
• 延迟:网络延迟可以指消息在端点之间进行往返所需的时间,或建立连接所需的时间(例如,TCP握手),不包括随后的数据传输时间。
网络接口
• 网络接口
■ 用于网络连接的操作系统端点。
■ 由系统管理员配置和管理的抽象。
• 网络接口卡 (NIC)
■ 为系统提供一个或多个网络端口。
■ 内部有一个网络控制器:一个微处理器,用于在端口和系统I/O传输之间传输数据包。
协议栈
• 发送的消息从应用程序向下移动到物理网络。
• 接收到的消息从物理网络向上移动到应用程序。协议栈中的每一层都有一个特定的功能,并与其上下的层进行通信。
路由
• 网络是一组通过网络协议地址连接的主机。
■ 隔离
■ 可扩展性
• 路由管理这些网络之间消息(称为数据包)的传递。
协议
• 标准:IP、TCP、UDP
• 其他:流控制传输协议 (SCTP)、多路径TCP (MPTCP) 和 QUIC
• 封装、MTU(最大传输单元)
网络堆栈(Linux)
• 在操作系统内部
延迟
• 名称解析延迟:将主机名解析为IP地址所需的时间(DNS解析)
• Ping延迟:ICMP回显请求到回显响应的时间
■ 并不完全反映应用程序请求的往返时间
• 连接延迟:建立网络连接所需的时间,传输任何数据之前
■ TCP握手时间
• 第一字节延迟:从建立连接到接收到第一个数据字节的时间
• 往返时间 (RTT) 描述了网络请求在端点之间进行往返所需的时间(包括处理时间)
• 连接生命周期是从建立网络连接到关闭的时间
网络工具 (1)
• nstat/netstat -s:查找重传和乱序数据包的高速率。什么构成“高”重传率取决于客户端:面向互联网的系统与不可靠的远程客户端相比,应该有更高的重传率。
• ip -s link/netstat -i:检查接口错误计数器,包括“错误”、“丢弃”、“超载”。
• ss -tiepm:检查重要套接字的限制器标志,看看它们的瓶颈是什么,以及显示套接字健康状况的其他统计信息。
• nicstat/ip -s link:检查传输和接收的字节速率。高吞吐量可能受到协商的数据链路速度或外部网络节流的限制。它还可能在系统上的网络用户之间引起争用和延迟。
网络工具 (2)
• tcplife:使用进程详细信息、持续时间(生命周期)和吞吐量统计信息记录TCP会话。
• tcptop:实时查看顶级TCP会话。
• tcpdump:虽然在CPU和存储成本方面使用它可能很昂贵,但使用tcpdump(8)短时间可能会帮助您识别不寻常的网络流量或协议头。
• perf(1)/BCC/bpftrace:检查应用程序和线之间的选定数据包,包括检查内核状态。
• traceroute:发送一系列测试数据包,以实验性地确定当前到主机的路由。
磁盘
磁盘-术语
• 虚拟磁盘:存储设备的仿真。它对系统显示为单个物理磁盘,但它可能是由多个磁盘或磁盘的一部分构造的。
• 传输:用于通信的物理总线,包括数据传输(I/O)和其他磁盘命令。
• 扇区:磁盘上的存储块,传统上大小为512字节,但今天通常为4 K字节。
• I/O:严格地说,I/O只包括磁盘读写,不包括其他磁盘命令。I/O可以至少由方向(读或写)、磁盘地址(位置)和大小(字节)来描述。
• 磁盘命令:磁盘可能被命令执行其他非数据传输命令(例如,缓存刷新)。
• 吞吐量:对于磁盘,吞吐量通常指的是当前的数据传输速率,以字节/秒为单位。
• 带宽:这是存储传输或控制器的最大可能数据传输速率;它受到硬件的限制。
• I/O延迟:I/O操作从开始到结束所需的时间。请注意,网络使用延迟这个术语来指代启动I/O所需的时间,然后是数据传输时间。
• 延迟异常值:具有异常高延迟的磁盘I/O。
磁盘模型
磁盘概念
• 测量时间
磁盘服务时间 (disk service time) 是指完成一个I/O请求所需的时间。这包括磁盘寻找数据的时间、数据传输的时间以及其他可能的延迟。
公式表示为: disk service time=utilization / IOPS