简要说明
观点:
• 资源分析视角
■ 系统管理员
• 工作负载分析视角
■ 应用开发者
工作负载分析
• 检查施加的工作负载以及应用程序的响应方式
• 目标
■ 请求:施加的工作负载
■ 延迟:应用程序的响应时间
■ 完成:寻找错误
• 指标
■ 吞吐量
■ 延迟
资源分析
• 从系统资源开始分析:CPU、内存、硬盘、网络接口、总线和互联
■ 包括
• 性能问题调查
• 关注利用率
■ 需求 - 供应
操作系统背景
术语(1)
• 操作系统:安装在系统上的软件和文件,使其能够引导和执行程序。它包括内核、管理工具和系统库。
• 内核:管理系统的程序,根据内核模型,包括硬件设备、内存和CPU调度。它在允许直接访问硬件的特权CPU模式下运行,称为内核模式。
• 进程:用于执行程序的操作系统抽象和环境。程序在用户模式下运行,通过系统调用或陷入内核来访问内核模式(例如,执行设备I/O)。
• 线程:可安排在CPU上运行的可执行上下文。内核有多个线程,进程包含一个或多个。
• 任务:Linux中可运行的实体,可以指一个进程(具有单个线程)、来自多线程进程的线程或内核线程。
• 主存储器:系统的物理内存(例如,RAM)。
• 虚拟内存:支持多任务和超额订阅的主内存抽象。它实际上是一个无限的资源。
• 内核空间:为内核准备的虚拟内存地址空间。
• 用户空间:为进程准备的虚拟内存地址空间。
• 用户区:用户级程序和库(/usr/bin,/usr/lib...)。
• 上下文切换:从运行一个线程或进程切换到另一个。这是内核CPU调度器的正常功能,并涉及将运行中的CPU寄存器集(线程上下文)切换到一个新集。
• 模式切换:在内核模式和用户模式之间切换。
• 系统调用(syscall):用户程序请求内核执行特权操作的一种明确定义的协议,包括设备I/O。
• 处理器:不要与进程混淆,处理器是包含一个或多个核心的物理芯片。
内核
• 包括Linux和BSD在内的类Unix操作系统都有一个单一的内核,负责管理:
■ CPU调度,
■ 内存,
■ 文件系统,
■ 网络协议,
■ 系统设备(硬盘,网络接口等)。
内核与用户模式
• 内核在一种特殊的CPU模式下运行,称为内核模式
■ 允许完全访问设备并执行特权指令
■ 裁决设备访问以支持多任务处理,防止进程和用户访问彼此的数据,除非明确允许。
• 用户程序(进程)在用户模式下运行
■ 它们通过系统调用向内核请求特权操作,例如用于I/O。
• 模式切换会带来开销(CPU周期)
任务
• 进程是用于执行用户级程序的环境
■ 由它们的进程ID(PID)标识
■ 包括一个内存地址空间、文件描述符、线程栈和寄存器
■ 包含一个或多个线程 : 线程是由栈、寄存器和一个指令指针(也叫程序计数器)组成的可执行上下文
• 由内核进行多任务处理,通常支持在单个系统上执行数千个任务
进程环境
• 进程地址空间中的数据
■ 数据、文本、堆
■ 每个线程的一个用户栈
• 内核中的元数据(上下文)
■ 进程ID(PID)
■ 所有者的用户ID(UID)
■ 一组文件描述符
■ 每个线程的一个内核栈和优先级
系统调用
• 系统调用请求内核执行特权系统例程
■ 有数百个可用的系统调用,但内核维护者尽量减少数量,以保持内核简单
• 操作系统包括一个C标准库,为许多常见的系统调用提供更易用的接口
中断
• 中断是向处理器发出的一个信号,表明需要处理的某个事件已经发生。
■ 中断处理器的当前执行来处理它。
■ 运行一个中断服务例程(ISR)来处理该事件。
• 外部中断生成的异步中断。
• 软件指令生成的同步中断。
栈
• 栈是一个用于临时数据的内存存储区域,组织为后进先出(LIFO)列表。
• 用于存储比适合在CPU寄存器集中的数据不那么重要的数据。
• 用于函数调用:栈帧。
■ 当调用一个函数时,返回地址和寄存器被保存到栈中。
■ 用于向函数传递参数。
■ 当被调用的函数完成后,恢复寄存器,执行权传递给调用函数。
• 栈跟踪:当前执行函数的调用路径。
■ 检查线程栈中所有栈帧的保存的返回地址。
调度器
• 通过在它们之间划分执行时间,允许多个进程同时运行。
• 时间共享系统
• 抢占允许高优先级用户层线程中断内核并执行。
虚拟内存
• 分页
• 进程交换
文件系统
• 数据以文件和目录的形式的组织
• 内核通过使用虚拟文件系统(VFS)支持多种文件系统类型和实例
I/O堆栈
• 从用户级软件到存储设备的路径
• 缓存
■ 历史上,磁盘I/O具有高延迟
■ 软件堆栈的许多层试图通过缓存读取和缓冲写入来避免这一点
软件中的缓存
• 由于磁盘I/O历来具有高延迟,软件堆栈的许多层都试图通过缓存读取和缓冲写入来避免它
■ 例如,缓冲区缓存是主内存的一个区域,存储着最近使用的磁盘块
■ 冷缓存和热缓存
网络堆栈
• 一套内置网络协议的堆栈,允许系统通过网络通信并参与分布式系统环境
• 用户级应用程序通过被称为套接字的可编程端点访问网络
• 连接到网络的物理设备是网络接口,通常提供在网络接口卡(NIC)上
内核比较
哪个内核最快?
• 简短答案:Linux!
• Linux
■ 在性能改进方面进行了大量工作
■ 应用程序和驱动程序支持
■ 广泛使用
■ 大社区发现并报告性能问题
■ TOP500超级计算机几乎100%使用它