计算机性能- 资源分析

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饱和

• 利用率为100%的CPU是饱和的
      ■ 线程在等待在CPU上运行时遇到调度延迟
      ■ 降低整体性能
      ■ 这种延迟是在CPU运行队列或用于管理线程的其他结构上等待的时间
• 在云设置中,不同级别的饱和可能是可以接受的

架构

• MMU = 内存管理单元
• TLB = 旁路查找缓冲器
• 互连

CPU工具

• uptime/top:检查负载平均值,看看负载是随着时间增加还是减少。
      ■ 负载可能在您的分析期间发生变化
• vmstat:以一秒的间隔运行vmstat(1),并检查系统范围内的CPU利用率(“us” + “sy”)
      ■ 接近100%的利用率增加了调度延迟的可能性
• mpstat:检查每个CPU的统计数据,检查单个热(忙碌)的CPU,确定可能的线程可伸缩性问题 • top:查看哪些进程和用户是顶级CPU消费者
• pidstat:将顶级CPU消费者分解为用户和系统时间
• perf/profile:使用堆栈跟踪文件分析CPU使用情况,以确定为什么使用CPU
• perf:测量IPC作为循环效率低下的指标
• showboost/turboboost:检查当前的CPU时钟速率,以防它们异常地低
• dmesg:检查CPU温度停顿消息(“cpu时钟节流”)

使用Perf的CPU分析

• 现代架构公开性能计数器
      ■ CPU周期:包括停顿周期和停顿周期类型
      ■ CPU指令:退休(执行)
      ■ 1、2、3级缓存访问:命中、未命中 • 浮点单元:操作
      ■  内存I/O:读、写、停顿周期
      ■  资源I/O:读、写、停顿周期
• Perf工具为这些计数器提供了简单的访问
      ■ perf list - 列出系统上可用的计数器
      ■ perf stat - 计算总事件 • perf record - 使用一个事件进行性能分析
      ■ perf report - 浏览perf record的结果

CPU分析方法

• 理解所有软件在CPU分析中> 1%
• 通过CPU使用发现各种问题
      ■ 直接:CPU消费者
      ■ 间接:I/O的初始化、锁、时间等...
      ■ 缩小研究的软件范围
• 火焰图 

使用火焰图进行分析

• 每个框代表堆栈中的一个函数(堆栈帧)
• x轴:CPU上的时间百分比
• y轴:堆栈深度 • 颜色:随机,或可以是一个维度

内存

内存 - 术语

• 主内存:也称为物理内存,描述计算机的快速数据存储区域,通常提供为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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值