操作系统
2023-06-09 13:54:45 6 举报
AI智能生成
设计模式
作者其他创作
大纲/内容
临界区
同步与互斥
生产者消费者问题
哲学家就餐问题
信号量
管程
进程同步
管道
具名管道
消息队列
共享存储
套接字
进程通信
必要条件
鸵鸟策略
死锁检测与恢复
死锁预防
死锁避免
处理方法
死锁问题
同步与通信
内核态与用户态
与系统调用的区别
切换流程
TLB
切换成本
进程执行终了
进程被公平分配时间片
系统资源不足,进程挂起
进程 sleep 主动挂起
高优先级进程抢先执行
切换时机
进程上下文切换
线程上下文切换
内核态工作
更高的优先级
中断上下文切换
上下文(Context)
先来先服务
短作业优先
最短剩余时间优先
批处理系统
时间片轮转
优先级调度
多级反馈队列
交互式系统
实时系统
调度算法
硬中断
软中断
外中断
陷入
异常
中断分类
中断(Interrupt)
不可中断进程(D)
僵尸进程(Z)
孤儿进程
异常进程
进程调度
可运行:正在使用或等待 CPU
不可中断:处于内核态关键流程中、不可打断
进程状态
平均负载(Load Average)
与平均负载的关系
节拍率
使用率(Usage)
缓存命中率
CPU 管理
CPU 绑定:可提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题
CPU 独占:进一步将 CPU 分组,通过 CPU 亲和性机制为其分配进程
适当降低非核心应用的优先级,增高核心应用的优先级,可确保核心应用得到优先处理
使用 Linux cgroups 设置进程 CPU 使用上限,可防止由于某个应用自身的问题而耗尽系统资源
支持 NUMA 的处理器会被划分为多个 node,每个 node 都有自己的本地内存空间
开启 irqbalance 服务或者配置 smp_affinity,把中断处理过程自动负载均衡到多个 CPU 上
用户可打开文件的最大数目 ulimit -n 和 /etc/security/limits.conf nofile
用户可开启进程/线程的最大数目 ulimit -u 和 /etc/security/limits.conf noproc
系统优化
iowait 分析
压力测试
平均负载
统计信息
使用率
上下文切换
监控方法
自愿切换过多:进程在等待资源,可能发生 I/O 问题
非自愿切换过多:进程在被强制调度、争抢 CPU,CPU 成为瓶颈
中断次数变多:说明 CPU 被中断处理程序占用,应分析中断类型
上下文切换过多
用户 CPU 和 Nice CPU 高:用户态进程占用了较多 CPU,着重排查进程性能问题
系统 CPU 高:内核态占用了较多 CPU,着重排查内核线程或系统调用的性能问题
I/O 等待 CPU 高:等待 I/O 的时间比较长,着排查系统存储是否出现 I/O 问题
软中断和硬中断高:软中断或硬中断处理程序占用较多 CPU,着重排查内核中断服务程序
不断重启的进程:同名进程 pid 不断改变
使用率过高
软中断过多
问题排查
性能优化
进程管理:fork、exit、wait
进程通信:pipe、shmget、mmap
文件操作:open、read、write
设备操作:ioctl、read、write
信息维护:getpid、alarm、sleep
权限安全:chmod、umask、chown
系统调用
进程管理
关于删除文件
索引节点和目录项
文件 I/O:I/O 请求首先经过文件系统,由文件系统与磁盘交互
块设备 I/O:跳过文件系统、直接与磁盘交互,即裸 I/O
I/O 方式
读写原理
文件系统与磁盘
磁盘文件系统
内存文件系统
网络文件系统
虚拟文件系统(VFS)
Page Cache
直接 I/O:跳过操作系统页缓存,直接与文件系统交互访问文件
非直接 I/O:文件读写时经过系统页缓存,再由内核或额外的系统调用真正写入磁盘
mmap+write:利用虚拟内存映射到用户空间
sendfile:直接从磁盘读取到内核、发送到网卡
实现方式
无需关心 Socket 缓冲区大小
利用 Page Cache
无法对数据进行预处理
传输大文件效率低
零拷贝(Zero Copy)
直接与非直接 I/O
阻塞 I/O:执行 I/O 操作后如没有获得响应就会阻塞当前线程,不能执行其他任务
非阻塞 I/O:执行 I/O 操作后不会阻塞当前的线程,随后再通过轮询或者事件通知的形式获取调用结果
阻塞与非阻塞 I/O
同步 I/O:发起 I/O 操作后要等到整个 I/O 完成后,才能获得 I/O 响应
异步 I/O:发起 I/O 操作后不等待完成,I/O 完成后响应由内核以事件通知应用程序
同步与异步 I/O
缓冲 I/O:利用标准库缓存加速文件访问,标准库内部再通过系统调度访问文件
非缓冲 I/O:直接通过系统调用来访问文件,不经过标准库缓存
缓冲与非缓冲 I/O
性能指标
优化文件访问:使用页缓存、索引节点缓存、目录项缓存等减少对下层块设备的直接调用
优化块设备访问:使用缓冲区来缓存块设备的数据
优化方向
磁盘
选择合适的文件系统
优化文件系统配置选项
优化 pdflush 脏页的刷新频率
优化脏页限额
优化内核回收目录项缓存和索引节点缓存的倾向
优化缓存
文件系统
缺页异常
转移后备缓冲区(TLB)
内存映射
只读段:包括代码和常量等
数据段:包括全局变量等
堆:包括动态分配的内存,从低地址开始向上增长
文件映射段:动态分配,包括动态库、共享内存等,从高地址开始向下增长
栈:包括局部变量,函数调用上下文等(大小一般固定 8MB)
内存布局
小块内存:brk
大块内存:mmap
内部碎片:slab 分配器
外部碎片:伙伴系统
内存碎片
内存分配
内存泄漏
直接回收
定期回收
回收时机
free() 或 unmap()
手动回收
基于淘汰算法:LRU、Second Chance 等
不常用的内存通过交换分换出到磁盘
基于 zproject 的内存压缩
基于 oom_score 为进程评分,高分 OOM 杀死
自动回收
回收策略
内存回收
虚拟内存
文件页(File-backed Page):经系统释放后可回收的内存,包括缓存和缓冲区
匿名页(Anonymous Page):诸如应用程序动态分配的堆内存,不能被直接回收
换入:把进程暂时不用的内存数据存储到磁盘中,并释放内存
换出:在进程再次访问这些内存时,从磁盘读到内存
Swap 原理
NUMA 架构
交换空间
分页系统地址映射
最佳(OPT)
最近最久未使用(LRU)
最近未使用(NRU)
先进先出(FIFO)
第二次机会
时钟(Clock)
页面置换算法
段页式
与分页比较
分段管理
Buffer:磁盘数据缓存
Cache:文件系统数据缓存
SRealaimable
Buffer 与 Cache
禁止 Swap,如果必须开启 Swap 则降低 swappiness 的值,减少内存回收时 Swap 的使用倾向
减少内存的动态分配,比如使用内存池、大页(HugePage)等
尽量使用缓存和缓冲区来访问数据
使用 cgroups 等方式限制进程内存使用情况
通过 /proc/pid/oom_adj,调整核心应用的 oom_score
命中分析
缓存优化
Swap
写操作
读操作
读写分析
内存管理
盘面(Platter)
磁道(Track)
扇区(Track Sector)
磁头(Head)
制动手臂(Actuator arm)
主轴(Spindle)
机械硬盘(Hard Disk Driver,HDD)
固态硬盘(Solid State Disk,SSD)
存储介质
接口
架构
文件系统层
NONE
NOOP
CFQ
Deadline
I/O 调度算法
通用块层
设备层
I/O 栈
最短寻道时间优先
电梯算法
磁盘(Disk)
虚拟化
设备管理
操作系统
0 条评论
回复 删除
下一页