首页 > 编程语言 >ebpf 单行程序学习

ebpf 单行程序学习

时间:2023-05-24 23:33:05浏览次数:41  
标签:count ebpf bpftrace pid probe 程序 单行

ebpf 单行程序学习


背景

公司方神借给我一本: 
《BPF之巅:洞悉linux系统和应用性能》纸质书
拿回家晚上在沙发上看了几天。 
感觉书很厚看的不是很系统。
仅能凭自己的感觉总结一下这些天的读书感悟。 
本来计划是2023年的春节 7 天长假系统的学习ebpf
但是因为学习Linux内核参数耽搁了。
工作后又各种忙和慌乱一直没有时间学习。
已经快跟上我立减肥flag倒的程度了。。。

一些基本理解

cbpf和ebpf的基本概念都不在阐述。 
我理解ebpf之后其实核心的工具主要是bcc以及bpftrace
bcc是高手们自己利用python或者是go语言编写的工具集,用于实现特定的功能。
bpftrace 可以用于实现单行程序,更加符合unix do one thing do it well的哲学。

本次向简单理一下bpftrace的单行程序的理解。 
便于后续的学习和使用。

bpftrace单行程序很类似于 awk 的语法。 通过attach 到不同的探针,跟踪点,来获取内核的核心信息

bpftrace的语法格式

注意:这些内容参照Brendan Greeg书中的附录部分。
bpftrace -e 'probe /filter/ {action;}'
通过这个命令就可以实现对特定探针的信息收集等工作。 

注意使用之前需要先安装 bpftrace 可以在线安装: yum install bpftrace -y 即可。 
注意 -e 表明是跟踪这个探针
     -l 列出探针,不跟踪
     -c 执行命令

bpftrace的部分举例

1. 跟踪新进程。包括进程参数
bpftrace  -e 'tracepoint:syscalls:sys_enter_execve { join(args->argv);}'

2. 统计系统调用的数量
timeout 3 bpftrace -e 'tracepoint:raw_syscalls:sys_enter {@[pid,comm] = count();}'
注意这个命令可以统计最近三秒内的系统调用数量。如果不加时间可以使用 ctrl + c 的方式终止跟踪执行打印

3. bpftrace -e 'software:page-faults:1 {@[pid,comm] = count();}'
注意 如果不知道有哪一些probe 可以使用可以通过这个命令来获取
bpftrace -l 'software:*'
注意 原作者的附录里面page-fault 是错误的,需要改为复数形式。

4. 统计vfs调用
bpftrace -e 'kprobe:vfs_* {@[probe] = count();}'
注意这个是内核及的 kprobe kernel-probe

5. 统计io尺寸。可以验证数据库的块大小相关
bpftrace -e 't:block:block_rq_issue {@bytes = hist(args->bytes);}'
注意 t 是 tracepoint的缩写。 

6. 按照pid和进程名统计
bpftrace -e 't:syscalls:sys_enter_connect {@[pid,comm] = count();}'

7. 直方图统计udp发送的字节数
timeout 3 bpftrace -e 'k:udp_sendmsg {@send_pytes = hist(arg2);}'

困了 今天到这。。

标签:count,ebpf,bpftrace,pid,probe,程序,单行
From: https://www.cnblogs.com/jinanxiaolaohu/p/17429874.html

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:路径总和
    题目:给你二叉树的根节点 root和一个表示目标和的整数 targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回true;否则,返回false。叶子节点是指没有子节点的节点。 示例1:输入:root=[5,4,8,11,null,13,4,......
  • #yyds干货盘点# LeetCode程序员面试金典:Excel表列名称
    1.简述:给你一个整数 columnNumber,返回它在Excel表中相对应的列名称。例如:A->1B->2C->3...Z->26AA->27AB->28... 示例1:输入:columnNumber=1输出:"A"示例2:输入:columnNumber=28输出:"AB"示例3:输入:columnNumber=701输出:"ZY"示例4:输入:colum......
  • 找不到“element-plus/global”的类型定义文件。 程序包含该文件是因为: 在 compilerO
    问题描述在tsconfig.json文件里types字段添加"element-plus/global"后出现报错。问题原因TS升级到5.x带来的规范性问题。可以通过npmviewtypescriptversion命令查看下你的TS版本。深层分析参考这篇:https://github.com/element-plus/element-plus/issues/12119问题解决1......
  • .NET技术:构建高效稳定的企业级应用程序
    在当今数字化的时代,企业对于高效、稳定和可扩展的应用程序需求日益增长。作为一个资深的.NET开发人员,我深知.NET技术的强大之处以及它在企业级应用程序开发中的重要性。本篇博客将探讨.NET技术在构建高效稳定的企业级应用程序中的关键优势,并分享一些实用的开发技巧和最佳实践。一、......
  • 2023.5 路桥中学高一期末程序素养检测
    参考答案(个人编写)Aa,b=map(int,input().split())c=int(input())print(c-a+b)Ba=float(input())print("%.2lf"%(a*9/5+32))Ca=float(input())ifa>3:a=int(a)print(((a+1-3)*2+10))else:print(10)Da......
  • “提高微信小程序曝光率的关键策略”,让你的小程序被更多人发现!
    很高兴听到您关注微信小程序的曝光率策略。以下是一些关键策略,可以帮助提高小程序的曝光率:优化小程序SEO首先要建立一个专业、系统的SEO策略,包括小程序标题、关键词、描述等,这些关键部分可以让搜索引擎更好的了解小程序的优势和特点,同时为搜索用户提供更好的搜索结果。注重用户体验......
  • 【NSSCTF逆向】【2023题目】《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《
    题目easy_re解法很简单的一道题考的就是upx脱壳base64加解密拿到文件upx壳upx-d脱壳无壳放进ida很明显关键在于这个判断的两个字符串是啥。现在我们看看我们输入的s变成了什么。进入funcfunc的内容主要是对s进行操作然后给encode_这次我看明白了,这个很明显......
  • 编程打卡:面向对象程序设计
    importjava.util.*;publicclassStaffManagementSystem{privatestaticList<Staff>staffList=newArrayList<>();publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);while(true){......
  • ubuntu打开应用程序,启动栏出现两个相同图标
    我在ubuntu上安装了微信,打开微信后出现两个微信图标,百度了一大堆,还是没有解决。下面是网上的解决方式,但是并没有解决我的问题:ubuntu14下,用unity的启动器打开google-chrome,在启动器上会有两个chrome的图标,而且点击其中一个会无视存在的chrome窗口,开启新窗口;使用bash命令打ch......
  • linux的程序打包deb
    deb安装包deb是Unix系统(其实主要是Linux)下的安装包,基于tar包,因此本身会记录文件的权限(读/写/可执行)以及所有者/用户组。由于Unix类系统对权限、所有者、组的严格要求,而deb格式安装包又经常会涉及到系统比较底层的操作,所以权限等的设置尤其重要。deb组成查看deb包含哪些......