原标题:宋宝华: 用off-cpu火焰图进行Linux性能分析

在《 宋宝华:火焰图:全局视野的Linux性能剖析 》一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析。但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU),并不能解决性能问题,因为有时候性能差的原因瓶颈不一定在CPU上面,而是在off-cpu的时间,比如:

进程进入系统调用执行io动作,io动作的延迟

进程等待mutex锁的时间

内存被交换,swap的时间

内存不够的时候,执行直接内存回收的时间

进程被抢占调度走、或者时间片用完被调度走的时间(runqueue太大)

等等等。

基本上,off-cpu的状态图如下(图片来自:

http://www.brendangregg.com/offcpuanalysis.html)

比如一个http服务器,登录的用户多了后,如果普遍觉得上网慢,瓶颈可能出现在网络慢、硬盘读取慢、mutex竞争等。这种情况下,on-cpu可能不是问题,主要的问题可能是在off-cpu的部分了。off-cpu分析,对性能问题的调优也至关重要。

下面我们写一个最简单的程序

gcc编译它,可以获得a.out。假设我们追求的性能目标是: 每秒钟打印地hello world越多越好,证明这个进程越能服务更多的打印请求。当然现实生活中的程序比这个要复杂1万倍,但是这个例子不妨碍我们说明原理。

实验环境:

Ubuntu-18.10,内核版本4.18,apt install安装bpfcc-tools - tools for BPF Compiler Collection (BCC)工具包,以及git clone了

https://github.com/brendangregg/FlameGraph

下面我们采集一个它的off-cpu时间:

barry@barryUbuntu:~$ sudo offcputime-bpfcc -K -p `pgrep -nx a.out`

Tracing off-CPU time (us) of PID 5593 by kernel stack... Hit Ctrl-C to end.

按下ctrl-c停下来后,我们看到2个主要的off-cpu的栈回溯是:

一个发生在usleep调用的hrtimer_nanosleep -> do_nanosleep系统调用;一个发生在printf的时候,进入sys_write系统调用后,tty_write的n_tty_write等待一个mutex的代码上面。

这个时候,我们可以进一步查看Linux内核的代码

https://lxr.missinglinkelectronics.com/linux+v4.18/drivers/tty/n_tty.c#L2285

我们认为延迟应该是出现在这个地方:

....

所以,如果我们想实现每秒打印hello world尽可能多的目标,显然应该删除那个usleep,以及分析为什么这个mutex_lock要这么久,看看内核里面有无优化的空间。

如果我们想绘制系统在运行上述a.out进程的时候的off-cpu火焰图,我们可以先采集调度数据30秒,得到out.stacks:

sudo offcputime-bpfcc -df -p `pgrep -nx a.out` 30 > out.stacks

接下来,我们进入clone下来的FlameGraph项目目录,用flamegraph.pl绘制火焰图:

./flamegraph.pl --color=io --title="Off-CPU Time Flame Graph" --countname=us ~/out.stacks > output.svg

用看图片的工具打开output.svg:

从图上也可以看到,off-cpu的2个主要原因一个是nanosleep,一个是write系统调用进入后n_tty_write里面要拿mutex。

点击write的路径,可以局部放大这部分栈回溯:

与我们前面的文本分析的结果是一致的。如果我们想优化性能,一个是可以消除usleep,第二个是分析为什么mutex_lock要等这么久,有什么空间可以提高。

本文是一篇关于off-cpu火焰图的入门引导性文章,如果您对此感兴趣,可以进一步参考:

http://www.brendangregg.com/offcpuanalysis.html

(完)

Linux阅码场原创精华文章汇总

如果您觉得文章不错,请点一点右下角“在看”为阅码场疯狂打Call吧~返回搜狐,查看更多

责任编辑:

off cpu linux,宋宝华: 用off-cpu火焰图进行Linux性能分析相关推荐

  1. 宋宝华: 用off-cpu火焰图进行Linux性能分析

    在<宋宝华:火焰图:全局视野的Linux性能剖析>一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析.但是,很多时候,单纯地看on-cpu的情况(什么代码在耗费CPU) ...

  2. 宋宝华:世上最好的共享内存(Linux共享内存最透彻的一篇)上集

    共享单车.共享充电宝.共享雨伞,世间的共享有千万种,而我独爱共享内存. 早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU可以在各个进 ...

  3. 宋宝华:那些年你误会的Linux DMA(关于Linux DMA ZONE和API最透彻的一篇)

    创作目的 互联网.Linux内核书籍上充满了各种关于Linux DMA ZONE和dma_alloc_coherent.dma_map_single等的各种讲解,由于很多童鞋缺乏自身独立的思考,人云亦 ...

  4. 宋宝华:论一切都是文件之匿名inode

    01 唯有文件得人心 当一个女生让你替她抓100只萤火虫,她一定不是为了折磨你,而是因为她爱上了你.当你们之间经历了无数的恩恩怨怨和彼此伤害,她再次让你替她抓100只萤火虫,那一定是因为她还爱着你. ...

  5. 宋宝华:评Linux 5.13内核

    目录 Misc cgroup Landlock安全模块 系统调用的堆栈随机化 printk无锁ringbuffer的进一步优化 BPF可调用内核函数 公共的IO PAGE Fault支持 Linux ...

  6. 宋宝华:LEP(Linux易用剖析器) 是什么,为什么以及怎么办(2)

    LEP(LINUX EASY PROFILING) 是Linuxer之LEP项目组(Barry Song,Mac Xu,陈松等以及陈莉君教授/西邮Linux 3+1实验室)正在致力于打造的一个开源项目 ...

  7. linux pdf 宋宝华,51CTO博客-专业IT技术博客创作平台-技术成就梦想

    原创 宋宝华 Linux阅码场 2018-04-10 前言 网上关于BIO和块设备读写流程的文章何止千万,但是能够让你彻底读懂读明白的文章实在难找,可以说是越读越糊涂! 我曾经跨过山和大海 也穿过人山 ...

  8. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  9. 宋宝华_2010年11-12月Linux驱动和内核讲座PPT下载

        12月29日,宋宝华老师在线讲座(按键和LCD驱动) cloudquan 2010-12-20 2/146 heyan0208 3 天前 00:37     宋宝华_2010年12月11日_& ...

  10. 宋宝华: 关于DMA ZONE和dma alloc coherent若干误解的彻底澄清

    原创 宋宝华 Linux阅码场 2018-01-22 作者简介 宋宝华,他有10几年的Linux开发经验.他长期在大型企业担任一线工程师和系统架构师,编写大量的Linux代码,并负责在gerrit上r ...

最新文章

  1. Visual Studio常用快捷键
  2. 基于 Rancher 的企业 CI/CD 环境搭建
  3. VTK:非结构化网格之ClipUnstructuredGridWithPlane
  4. display函数怎么使用_损失函数—深度学习常见损失函数总结【图像分类|上】
  5. python——面向对象篇之异常和反射
  6. 【STM32】FreeRTOS任务挂起和恢复示例
  7. ac2100 反弹shell无法粘贴_记一次突破反弹shell
  8. python引入redis_实操演练解读非关系型数据库—Redis
  9. Rust : async、await 初探
  10. 创建uni-app 微信小程序项目
  11. DroppyCtf靶机
  12. Eclipse BIRT报表开发工具安装教程
  13. React中文文档之Hello world翻译
  14. Linux网络环境配置 虚拟机网络环境配置
  15. hanLP探索-语义距离计算的实现
  16. 信用卡融资的优势,这些你了解过吗?
  17. POCO::Net 简单的HTTPS程序
  18. linux 查看系统详细信息
  19. SMC气动制图及气动元件配置工具
  20. iOS---GPUImage研究:内置滤镜解析

热门文章

  1. 十岁陌陌更名“挚文集团”的战略新时代|财报解读
  2. 电商平台系统架构设计案例分析
  3. AD9如何创建原理图元件
  4. Java架构师技术进阶路线图详解
  5. 全球最大的同性交友网站,竟然还有这些骚操作
  6. Unity Editor 查找资源依赖、反向查找资源依赖Dependencies
  7. c语言词法分析器的实验报告,C语言词法分析器构造实验报告
  8. 苹果绕id工具_绕ID教程(iOS13.313.3.1)
  9. JDK安装与环境变量配置(Win10)
  10. 慢速DoS攻击工具slowhttptest(网站压力测试工具)