linux性能和调优-理解操作系统

背景

系统知识要理解,所有程序都在操作系统的限制下运行。此书是 redhat 红皮书,陈浩推荐阅读。

第一章:理解 linux 操作系统

Linux 进程管理

程序运行在图 1-1 环境中,每一个模块都有可能影响程序性能。
image.png
linux 内核定义了进程的数据结构,对进程进行管理就是调度系统读取进程属性,执行调度并更新进程属性。
image.png
进程和线程的区别,进程会拷贝父进程的资源(内存里面的字节码、静态变量、堆栈),便于独立管理。进程里面的多个线程,不拷贝线程资源,直接共享进程资源,程序需要注意线程安全,方式共享资源被同时更改导致不一致,主要通过锁机制。当前操作系统线程实现机制组要是 Native POSIX Thread Library (NPTL),redhat 开发。
image.png
kernel 调整动态优先级,用户调整静态优先级 nice。普通用户可在 19-0 之间调整,root 用户可调整到负值。-19 最大。
CPU 以时间片为单位进行上下文切换,让用户感觉可以同时运行多个进程。切换会有额外开销。
image.png
中断处理程序处理硬中断、软中断。进程处于不可中断状态,不能做上下文切换。
image.png
Process memory segment 进程内存分段。内核为每个进程动态的分配内存。pmap 可查看进程内存分布。
Text segment:存储 CPU 可执行的字节码。
Data segment:存储静态变量,置零段,动态堆(地址值从低到高增长)。
Stack segment:存储本地变量,函数参数,函数返回值(从高到底增长)
image.png
CPU 任务调度
Ingo Molnar 2005 年改变通用互斥锁机制,使得内核调度算法将为 O(1).

Linux 内存结构

进程需要工作空间来完成任务,内存就是进程的工作空间。32 位系统,内核只能直接寻址 1G 空间,其他空间需要通过转换,64 位系统,内核能直接寻址 64G。
image.png
image.png
数据在程序、内核、内存、磁盘中的流程图。
image.png
一个页面就是物理内存或虚拟内存中一组连续的线性增加的地址。linux 内核以页面位单位管理内存。一个页面通常 4K。
A page is a group of contiguous linear addresses in physical memory (page frame) or virtual
memory.
伙伴系统分配内存,减少内存碎片,可分较大的连续内存地址。
image.png
kswapd 进程跟踪内存活动状态并标记,将标记为不活动的内存从新分配给用户进程。

Linux 文件系统

虚拟文件系统作为用户进程和各种文件系统之间的抽象层。用户用相同的指令,操作不同的文件系统。
image.png
非日志文件系统:一个写请求,内核将 meta 数据写入文件系统后,再将实际内容存储到具体的位置。当在写 meta 数据系统异常时,文件系统连续性会被破坏,需要使用 fsck 修复 meta 信息。
日志文件系统:在数据被真正写入文件系统前,先将数据变更写入日志区。由于多写一次日志,会有额外开销。
image.png
Ext2 文件系统
文件系统从 boot sector 开始,每个 block group 包含超级块(记录整个文件系统数据,每个 block group 都有。
image.png
读文件过程,先从文件路径找到 i-node,再从 i-node 读取文件。每个 i-node 指向一个数据块。
image.png
Ext3 和 Ext2 最大的不同是,Ext2 不支持日志能力。
Ext3 的特点:

  • 可用性 由于支持日志记录,从故障恢复文件系统不需要执行 fsck,恢复时间从小时缩减到秒级。
  • 数据完整性 通过挂载文件系统日志模式,所有的元数据和真实数据都会以日志方式记录。
  • 速度 通过控制日志模式 data=writeback,到达文件系统就通知系统完成写,可以提升写入响应。对于重 IO 应用不建议用。。
  • 灵活性 Ext2 可以方便的升级到 Ext3,Ext3 通过禁用日志系统,挂载为 Ext2.

Ext3 3 种模式:journal,将 meta 和 data 都通过日志方式写入。ordered,只将 meta 通过日志方式写入,数据直接写入。writeback,直接回写,速度最快。
JFS、XFS : JFS 支持 64 位架构,支持大文件和分区。XFS 和 JFS 特点类似,大文件和大分区支持。

磁盘 IO 子系统

IO 子系统架构的基本概念
image.png
缓存技术:高等级内存缓存命中率越高,更快获取数据。
image.png
刷新脏 buffer,内存数据中有变更,没有同步到磁盘,称为脏缓存,通过 sync,同步变更到磁盘。
image.png
block 是驱动器能读写的最小单位,小文件多,block 设置小,大文件多,block 设置大。
IO 电梯算法
IO 设备驱动
SCSI 驱动的结构
image.png

网络子系统

网络层结构和网络操作概览
image.png

由于内核使用 buffer 来接收和发送数据,每种 buffer 的值在如下这些文件。

1
2
3
4
5
/proc/sys/net/core/rmem_max
/proc/sys/net/core/rmem_defaul/proc/sys/net/core/wmem_max
/proc/sys/net/core/wmem_defaul/proc/sys/net/ipv4/tcp_mem
/proc/sys/net/ipv4/tcp_rmem
/proc/sys/net/ipv4/tcp_wmem

sockt buffer 类型图解
image.png
网络数据包在 netfilter 中的流向
image.png
TCP 3 次握手过程
image.png

理解 linux 性能指标

处理器指标

  • CPU 利用率(CPU utiliization)

每个 CPU 的工作负载

  • 用户时间(User time)

CPU 花在用户进程上的时间,高比率用户时间是正常的,代表系统正在执行真正的任务。

  • 系统时间(System time)

CPU 花在内核操作的时间,包括硬中断和软中断。网络和磁盘驱动瓶颈可能导致内核时间持续高比例。正常系统应该花费较少时间在内核操作上。

  • 等待(Waiting)

CPU 花在 IO 等待上的时间,系统不应该 IO 等待上花费较多时间。

  • 空闲(Idle)

CPU 花费在等待任务上的时间。

  • Nice time

CPU 花费在调整进程优先级的时间。

  • Load average

等待执行队列中进程数+ 等待不可中断任务进程数

  • Runable processes,可运行进程数

CPU 可运行的进程数,不应超过物理 CPU 数量的 10 倍,否者,表明存在 CPU 瓶颈。

  • Blocked 阻塞进程数

数量多可能是 IO 瓶颈

  • Context switch 上下文切换

进程间上下文切换的统计,高上下文切换可能是驱动或应用程序问题。

  • interrupts 中断

中断包括硬中断和软中断。中断是由 CPU 时钟引起的。高中断值表明软件瓶颈,内核软件或驱动软件。

内存指标

  • Free memory 空闲内存

由于 linux 系统会分配大量不用的内存作为文件系统缓存,所以,真实可用内存= Free + cache + buffer

  • Swap Usage

每秒 300-400 页的 swap 交换表明内存瓶颈。

  • Buffer and Cache

缓存块设备和文件系统的空间。

  • SLabs

内核占用的空间。

  • Active versus inactive memory 活动和不活动内存

不活动空间可能会被 kswapd 交换到 swap。

网络接口指标

  • 收发包数量
  • 收发字节数
  • 每秒冲突
  • 丢包率
  • 过载

数据包操过网络 buffer 空间,结合丢包率查看。

  • 错误包

可能和连线有关

块设备指标

  • Iowait IO 等待
  • Average queue length 平均队列长度

2-3 正常,超过可能 IO 瓶颈。

  • Average wait 平均等待实际

IO 请求到被执行的平均时间。

  • Transfers per second 每秒 IO 数量
  • Blocks read/wait per second 每秒块读写亮
  • kb per second read/wait 每秒读写字节数

参考

http://baodunqiao.blog.sohu.com/104016437.html