性能测试分析之CPU篇
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
性能测试分析之CPU篇
目录
Linux系统结构简介 用户态CPU消耗分析
内核态CPU消耗分析
硬中断&软中断 Load average剖析
Linux系统结构
Linux系统结构
几种CPU消耗
Us% Sy% Ni% Id% Wa% Hi% Si% St%
user cpu time (or) % CPU time spent in user space system cpu time (or) % CPU time spent in kernel space user nice cpu time (or) % CPU time spent on low priority processes idle cpu time (or) % CPU time spent idle io wait cpu time (or) % CPU time spent in wait (on disk) hardware irq (or) % CPU time spent servicing/handling hardware interrupts software irq (or) % CPU time spent servicing/handling software interrupts steal time - - % CPU time in involuntary wait by virtual cpu while hypervisor is servicing another processor (or) % CPU time stolen from a virtual machine
内核态CPU
上下文切换(只会发生在内核态) 1. 当前执行任务时间片用完,cpu正常调度下一个任务。 2. I/O阻塞 3. 抢占锁资源,用户代码挂起(sleep),等待条件变量 4. 硬中断&软中断 例4:程序问题造成大量的上下文切换 执行:TestCsw程序 开启100个线程,每个线程usleep(1*1000)
进程状态
Load average剖析
例5:TASK_UNINTERRUPTIBLE状态进程过多导致load飙高 执行:LoadTest程序 调用vfork(),父进程进入D状态
例6:TASK_INTERRUPTIBLE状态线程不会增加Load 执行:LoadTest程序 每个线程执行sleep进入S状态
CPU调度
用户态CPU
例1:程序cpu usr%瓶颈问题定位。
模拟程序TestMap
主线程:死循环阻塞 线程1: sleep 线程2 : 循环map find操作
执行命令:top –H –p 7152
用户态CPU
执行命令:pstack 7152
分析过程: 1. 通过top –H –p XX 发现线程7153占用cpu特别高
2. 通过pstack 发现线程7153在做map查询操作,大量的红黑树查
找操作。
用户态CPU
例2:程序cpu usr%瓶颈问题定位。(如果线程cpu消耗比较均衡) 执行:perf top -p 7152 -e cycles:u
参考案例:VTDU因CPU消耗过高回滚
内核态CPU
例3:定位sy%消耗过高问题 执行:perf top -p xxxx -e cycles:k
硬中断&软中断
网卡中断为例: 频繁的数据包收发会耗尽cpu时间
Байду номын сангаас
多核cpu,如何做中断负载均衡? 多队列网卡: 只需配置每个队列的cpu亲和性,smp_affinity。 单队列网卡: 先通过RPS模拟出多队列再最cpu亲和性。 RPS:根据数据包源地址、目的地址和源端口做hash,来选择不 同cpu。 RFS: RPS负载均衡的优化。
Load average剖析
load average System load averages is the average number of processes that are either in a runable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.