ITPub博客

首页 > 数据库 > 数据库开发技术 > LINUX 性能专家 Brendan Gregg博文拜读系列-附九张性能图片

LINUX 性能专家 Brendan Gregg博文拜读系列-附九张性能图片

原创 数据库开发技术 作者:五分钟学SRE 时间:2024-04-09 08:50:00 0 删除 编辑

在深入Linux系统的复杂世界中,性能优化始终是SRE关注的热点。最近在拜读国际著名的 LINUX 性能专家 Brendan Gregg 的个人博客和技术书籍。他的工作不仅涵盖了系统性能的监控和分析,还深入探讨了性能问题的根源及其解决方案。通过他的个人博客和技术书籍,我们可以窥见Linux性能优化的精髓,学习到如何利用各种工具和方法来提升系统效率,确保应用的顺畅运行。将会结合 Brendan Gregg博文与个人理解 出一个拜读系列博文。

这期我们将介绍几个由Brendan Gregg开发或推广的性能分析工具,包括perf、eBPF工具、perf-tools、bcc和bpftrace,以及如何使用它们来提升系统性能。

perf

    运用场景:性能调优、系统分析、代码优化等。

    常见命令:

  • perf record: 记录一段时间内发生的系统性能事件,如CPU周期、缓存命中/失效等。

  • perf report: 展示性能记录的结果,帮助分析程序的性能瓶颈。

  • perf top: 实时监控系统性能,动态显示最耗时的函数和指令。

具体案例:在Linux系统中,可以使用perf record命令对特定程序进行性能采样分析。例如,对于一个编译过的C++程序,可以使用以下命令进行采样:

perf record -F 99 -a -g -- sleep 10

    这里,-F 99设置了采样频率为99Hz,-a表示对整个系统进行采样,-g启用调用图形记录,--后面跟随的是被采样的命令,这里是让系统休眠60秒。采样完成后,使用perf report命令生成性能报告,分析程序的热点函数和性能瓶颈。



eBPF工具


运用场景:系统跟踪、网络分析、安全监控等。

常见命令:

  • bpftrace: 使用BPF跟踪器执行跟踪脚本,如监控文件系统调用、网络包等。

  • bpftool: 是一个BPF程序和映射的管理工具,可以用来创建、查询和删除BPF程序。

具体案例:可以使用bpftrace脚本来跟踪所有的系统调用,并使用bpftool将结果导出到一个跟踪文件中。例如,以下是一个简单的bpftrace脚本,用于跟踪并打印所有的open系统调用:

bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("open: %s\n", str(args->filename)); }'

运行此脚本将打印出每个open调用尝试打开的文件名。通过分析这些数据,可以识别频繁发生的系统调用,进而优化系统性能。


perf-tools


工具安装

git clone --depth 1 https://github.com/brendangregg/perf-toolsOr use the raw links on github to download individual scripts. Eg:wget https://raw.githubusercontent.com/brendangregg/perf-tools/master/iosnoop

运用场景:系统性能分析、内核跟踪等。

常见命令:

  • iosnoop: 跟踪并报告磁盘I/O活动,帮助识别I/O密集型进程。

  • tcptracer: 跟踪TCP连接的建立、传输和终止过程。

具体案例:使用iosnoop监控磁盘I/O操作,可以通过以下命令启动:

先从github 同步脚本

https://github.com/brendangregg/perf-tools/blob/master/iosnoop

参数查看

./iosnoop -hUSAGE: iosnoop [-hQst] [-d device] [-i iotype] [-p PID] [-n name]               [duration]                 -d device       # device string (eg, "202,1)                 -i iotype       # match type (eg, '*R*' for all reads)                 -n name         # process name to match on I/O issue                 -p PID          # PID to match on I/O issue                 -Q              # use queue insert as start time                 -s              # include start time of I/O (s)                 -t              # include completion time of I/O (s)                 -h              # this usage message                 duration        # duration seconds, and use buffers  eg,       iosnoop                   # watch block I/O live (unbuffered)       iosnoop 1                 # trace 1 sec (buffered)       iosnoop -Q                # include queueing time in LATms       iosnoop -ts               # include start and end timestamps       iosnoop -i '*R*'          # trace reads       iosnoop -p 91             # show I/O issued when PID 91 is on-CPU       iosnoop -Qp 91            # show I/O queued by PID 91, queue time

案例

./iosnoop -tsTracing block I/O. Ctrl-C to end.STARTs          ENDs            COMM         PID    TYPE DEV      BLOCK        BYTES     LATms26269565.311980 26269565.312218 kworker/0:1H 90     WM   8,0      4722696      20480      0.2426269565.312027 26269565.312242 kworker/0:1H 90     WM   8,0      4730760      4096       0.2226269565.312031 26269565.312243 kworker/0:1H 90     WM   8,0      4730896      4096       0.21

bcc

    工具仓库
    https://github.com/iovisor/bcc#tools
    在linux 系统的位置
    cd /usr/share/bcc/tools

    运用场景:内核跟踪、性能调优、网络分析等。

    常见命令

  • biolatency: 监控块设备的I/O延迟,分析延迟的来源。

  • tcptop: 实时显示TCP连接的状态,包括传输速率和重传信息。

具体案例:通过biolatency分析块设备的I/O延迟,可以使用以下命令:

./biolatencyTracing block device I/O... Hit Ctrl-C to end.^C     usecs               : count     distribution         0 -> 1          : 0        |                                        |         2 -> 3          : 0        |                                        |         4 -> 7          : 0        |                                        |         8 -> 15         : 5        |                                        |        16 -> 31         : 76       |*****                                   |        32 -> 63         : 280      |********************                    |        64 -> 127        : 538      |****************************************|       128 -> 255        : 204      |***************                         |       256 -> 511        : 92       |******                                  |       512 -> 1023       : 63       |****                                    |      1024 -> 2047       : 22       |*                                       |      2048 -> 4095       : 16       |*                                       |      4096 -> 8191       : 98       |*******                                 |      8192 -> 16383      : 200      |**************                          |     16384 -> 32767      : 103      |*******                                 |     32768 -> 65535      : 11       |                                        |     65536 -> 131071     : 1        |                                        |    131072 -> 262143     : 1        |                                        |

bpftrace

安装

https://github.com/bpftrace/bpftrace/blob/master/INSTALL.md

运用场景:内核跟踪、性能分析、安全监控等。

常见命令

  • trace: 执行BPF跟踪脚本,如监控内核函数的执行。

  • profile: 执行BPF性能分析脚本,统计函数的执行频率和耗时。

具体案例:编写一个bpftrace脚本,跟踪系统调用的执行情况,并统计每个调用的执行次数和耗时。例如,以下脚本统计了read和write系统调用的发生次数:

bpftrace -e 'tracepoint:syscalls:sys_enter_read,sys_enter_write { @[comm] = count(); }'

通过profile命令,可以生成一个性能报告,识别潜在的性能问题:

bpftrace -e 'profile:hz:99 { @[comm] = count(); }'

这将每99Hz采样一次,统计并输出每个进程的read和write调用次数。


火焰图(Flame Graphs)

文章链接

https://www.brendangregg.com/flamegraphs.html

运用场景:CPU分析、内存分析等。

常见命令:通过perf和其他性能分析工具生成火焰图,如使用perf script将perf record的输出转换为火焰图。

具体案例:使用perf record对程序进行采样,然后通过perf script和flamegraph工具生成CPU火焰图。例如,对一个C程序进行分析的命令如下:

 
git clone https://github.com/brendangregg/FlameGraph  # or download it from github cd FlameGraph perf record -F 99 -a -g -- sleep 60 perf script | ./stackcollapse-perf.pl > out.perf-folded ./flamegraph.pl out.perf-folded > perf.svg

使用chrome 打开



    这里,-F 999设置了非常高的采样频率,-a表示对整个系统进行采样,./a.out是要分析的程序。perf script将采样数据转换为文本格式,然后使用flamegraph.pl脚本生成火焰图flamegraph.svg,可视化地显示应用程序中的CPU使用情况,快速定位热点函数。

Linux 性能工具全景图

  1. Linux Observability Tools:展示了Linux可观测性工具的地图,这些工具用于监控和理解系统的行为和性能。




  2. Linux Static Performance Analysis Tools:提供了用于静态性能分析的工具地图,这些工具帮助分析代码和系统配置。


  3. Linux Benchmarking Tools:介绍了用于基准测试的工具地图,用于评估系统在特定负载下的性能。


  4. Linux Tuning Tools:展示了用于系统性能调优的工具地图,包括各种参数调整和优化技术。


  5. Linux sar:提供了系统活动记录(sar)工具的地图,这是一个用于收集系统活动数据的工具。


  6. Hi-res diagram combining observability, static performance tuning, and perf-tools/bcc:这是一张高分辨率图,结合了可观测性、静态性能调优和perf-tools/bcc工具的信息。



  7. Linux eBPF:介绍了Linux eBPF技术及其应用。


  8. bcc: Taming Linux 4.3+ Tracing Superpowers:展示了bcc工具如何帮助管理和利用Linux 4.3及以上版本的追踪功能。



  9. Linux eBPF Off-CPU Flame Graph:提供了使用bcc工具生成的Linux eBPF离CPU火焰图,帮助分析系统在非CPU使用时间的性能开销。


推荐博文:

https://www.brendangregg.com/blog/2016-01-20/ebpf-offcpu-flame-graph.html

https://github.com/brendangregg/FlameGraph

https://www.brendangregg.com/linuxperf.html

原文作者:五分钟学SRE;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-11-23

  • 博文量
    81
  • 访问量
    38729