【Linux】BPF学习笔记 - 性能分析方法论[5]

11 篇文章 0 订阅

本学习笔记来自于阅读 Brendan Gregg的《BPF Performance Tools》

一、工作负载

建议执行工作负载特征的步骤:

  • 谁造成了负载: PID,进程名称,UID,IP地址…
  • 为什么称负载: 代码路径,堆栈跟踪,火焰图
  • 负载是多少: IOPS,吞吐量,类型
  • 负载如何随时间变化: 每个时间间隔的摘要

示例: 这表明在跟踪时,名为"Web Content" 的进程执行了1,725个vfs_read()

bpftrace -e 'kprobe:vfs_read { @[comm] = count(); }'
# output
“@[rtkit-daemon]: 1
[...]
@[gdbus]: 819
@[Web Content]: 1725

二、深入分析

这种方法包括检查一个指标,然后找到将其分解成其组成部分,将最大的组成部分分解成其自己的组成部分的方法,依此类推,直到找到根本原因为止。

类推可能有助于解释这一点。 想象一下,您发现自己的信用卡账单非常大。 要对其进行分析,您登录到银行并查看交易。 在那里,您发现向在线书店收取的一笔大笔费用。 然后,您登录到该书店,查看导致该数量的书,并发现您不小心购买了该书的一千本。 这是深入分析:找到线索,然后在更多线索的带领下进行更深入的钻探,直到问题解决。

步骤: 这通常需要定制工具, bpftrace更适合使用

  1. 从最高级别开始
  2. 检查下一级的详细信息
  3. 选择最有趣的故障或线索
  4. 如果问题仍然存在,请返回步骤2

示例1: 将延迟分解为其组件的贡献, 您在这里的结论可能是存储设备是问题所在,这就是答案之一

  1. 请求等待时间为100毫秒
  2. 在CPU上运行10毫秒, 阻塞90毫秒
  3. 在文件系统上,关闭CPU的时间为89毫秒
  4. 文件系统在锁定上花费了3毫秒,在存储设备上花费了86毫秒

示例2: 深入分析也可以用来增强上下文. 现在的结论是,文件系统访问时间戳是延迟的来源,可以被禁用(这是安装选项)。 与得出更快的磁盘速度是必要的结论相比,这也是更好的结果

  1. 应用程序在文件系统上花费了89毫秒
  2. 文件系统在写入文件系统时花费了78毫秒,在读取时阻塞了11毫秒
  3. 文件系统写入在访问时间戳记更新上花费了77毫秒

三、使用方法

资源分析开发为例, 对于每种资源,请检查:1) 利用率; 2) 饱和度; 3) 错误

您的第一个任务是查找或绘制软件和硬件资源图。 然后,您可以遍历它们,以寻求这三个指标, 下图显示了通用系统的硬件目标示例,包括可以检查的组件和总线

考虑一下您当前的监视工具及其显示上图中每个项目的利用率,饱和度和错误的能力:您当前有多少个盲点?

这种方法的优势在于,它从重要的问题开始,而不是以度量形式的答案开始,然后尝试倒退以找出它们为什么重要。 它还显示了盲点:从您要回答的问题开始,是否有方便的工具来衡量它们

四、工具

性能分析清单可以列出要运行和检查的工具和指标,

1. LINUX 60-SECOND ANALYSIS

此清单可用于任何性能问题,并反映了我通常在登录性能不佳的Linux系统后的最初60秒内执行的操作

uptime当前时间,系统已经运行了多久,用户连接数,系统在过去1,5,15分钟内的平均负载
dmesg | tail用于显示开机信息
vmstat 1显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态
mpstat -P ALL 1报告CPU的一些统计信息
pidstat 1监控全部或指定进程的cpu、内存、线程、设备IO等系统资源的占用情况
iostat -xz 1显示磁盘的IO
free -m显示的当前内存的使用
sar -n DEV 1显示网络接口信息
sar -n TCP,ETCP 1TCP统计信息, TCP错误统计信息
top显示系统上正在运行的进程

2. BCC TOOL CHECKLIST

这里工具可以参考: GIT

execsnoop: 通过为每个execve系统调用打印一行输出来显示新的进程执行。 检查进程是否短暂.

opensnoop: 为每个open系统调用(及其变体)打印一行输出,包括打开的路径的详细信息以及它是否成功

ext4slower: 跟踪ext4文件系统中的常见操作(读取,写入,打开和同步),并打印超出时间阈值的操作。 这可以识别或消除一种类型的性能问题:应用程序通过文件系统等待缓慢的单个磁盘I/O

biolatency: 跟踪磁盘I/O延迟,即从设备发布到完成的时间,并将其显示为直方图

biolatency -m
Tracing block device I/O... Hit Ctrl-C to end.
^C
     msecs               : count     distribution
         0 -> 1          : 16335    |****************************************|
         2 -> 3          : 2272     |*****                                   |
         4 -> 7          : 3603     |********                                |
	     [...]
       512 -> 1023       : 1        |                                        |

biosnoop: 为每个磁盘I/O打印一行输出,详细信息包括延迟。 这样一来,您可以更详细地检查磁盘I/O,并查找按时间顺序排列的模式(例如,在写入之后进行读取队列)

cachestat: 每秒(或每个自定义间隔)打印一行摘要,显示文件系统缓存中的统计信息。 使用它可以确定较低的缓存命中率和较高的未命中率

cachestat
    HITS   MISSES  DIRTIES HITRATIO   BUFFERS_MB  CACHED_MB
   53401     2755    20953   95.09%           14      90223
   49599     4098    21460   92.37%           14      90230
   [...]

tcpconnect: 为每个活动的TCP连接打印一行输出,详细信息包括源地址和目标地址。 寻找可能会导致应用程序配置效率低下的意外连接或入侵者

tcpaccept: 是tcpconnect的配套工具。 它为每个被动TCP连接(e.g. accept())打印一行输出,详细信息包括源地址和目标地址

tcpretrans: 为每个TCP重传数据包打印一行输出,详细信息包括源地址和目标地址以及TCP连接的内核状态。 TCP重传会导致延迟和吞吐量问题。 对于已建立TCP会话状态的重传,请查找外部网络是否有问题

runqlat: 线程等待打开CPU的时间,然后将此时间打印为直方图。 可以使用此工具确定等待CPU访问的时间长于预期,该等待时间可能由于CPU饱和,配置错误或调度程序问题而受到影响

profile: 是一个CPU事件探查器,它是了解哪些代码路径正在消耗CPU资源的工具。 它以一定时间间隔获取堆栈跟踪的样本,并打印出唯一堆栈跟踪的摘要以及它们的出现次数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: "Linux Observability with BPF" 是一本关于使用BPF(Berkeley Packet Filter)来增强Linux可观测性的PDF书籍。BPF是一种能够在内核空间运行的虚拟机,它可以通过动态编程来对内核进行扩展和控制。这本书通过BPF来提供了一种全新的方法来监控和调试Linux系统。 这本书首先介绍了BPF的原理和基本概念,包括如何编写BPF程序和如何将其加载到内核中。然后,它详细介绍了各种用于增强Linux可观测性的BPF工具和技术,如BCCBPF Compiler Collection)、BPF_trace、BPF_perf_event和BPF_ringbuf等。 通过使用这些工具和技术,读者可以了解和追踪系统的各种事件和性能指标,如系统调用、网络流量、硬件事件、存储和文件系统等。这些工具还可以用于实时监控和调试,以及进行深度分析和故障排查。 此外,这本书还介绍了如何使用BPF来实现安全监控和防御措施,并介绍了一些用于性能优化和资源管理的技术。它还包含了一些实际案例和场景,以帮助读者更好地理解和应用BPF和相关工具。 总的来说,"Linux Observability with BPF" 是一本深入介绍和探索如何使用BPF来增强Linux可观测性的实用指南。它为读者提供了丰富的工具和技术,帮助他们更好地理解和优化Linux系统的性能、安全性和可靠性。 ### 回答2: "Linux Observability with BPF"是一本关于使用BPF(Berkely Packet Filter)在Linux上进行可观察性工作的PDF书籍。BPF是一个强大的工具,可以在内核空间进行数据收集、分析和操作,以提供更好的系统可观察性和性能调优。 这本书以非常详细的方式介绍了BPF的概念、原理和使用方法。它涵盖了BPFLinux系统中的各个方面,包括BPF程序的编写、加载和追踪,以及如何使用BPF来监控系统的各个组件,如网络、文件系统和性能指标等。 通过阅读这本书,读者可以学到如何使用BPF来解决实际的系统问题。例如,可以使用BPF来监控网络流量,检测和过滤恶意流量,或者分析系统性能瓶颈并进行优化。 此外,这本书还介绍了各种BPF工具和框架,如BCCBPF Compiler Collection)和bpftool,以及如何使用这些工具来简化BPF的开发和调试过程。 总的来说,"Linux Observability with BPF"是一本对于想要深入了解和使用BPF来提升Linux系统可观察性和性能的读者非常有价值的书籍。它提供了详细而全面的指导,使读者能够充分发挥BPF的潜力,并应用于实际的系统管理和优化中。无论是初学者还是有经验的系统管理员,都可以从中获得很多实用的知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值