ebpf的简单学习
ebpf的简单学习-万事开头难
前言
bpf 值得是巴克利包过滤器
他的核心思想是在内核态增加一个可编程的虚拟机.
可以在用户态定义很多规则, 然后直接在内核态进行过滤和使用.
他的效率极高. 因为避免了上下文切换,中断等导致的cycle损失.
很多先进的工具,比如XDP以及K8S的cilium等网络组件.都是基于ebpf而来.
因为bpf最初的寄存器太少,并且仅是实现了包过滤,
ebpf增加了寄存器的数量,实现了更多的功能.
类似于Intel的DPDK工具也是类似的原理,直接用户态操作硬件资源.
工具
ebpf有很多工具. 学习起来也是很痛苦(从春节鸽到现在)
最近实在忍受不了自己的拖沓了, 晚上学习了下简单的bpftrace以及perf-tools.
想着能够简单总结一下, 避免一直不作为.
很多需要写c 代码的地方我不是很熟. 计划今年要进行这一块的深入学习.
安装
bpftrace 需要内核比较新, 建议是 4.15 以上, 越新越好.
perf-tools 是性能大神 Brendan Gregg 编写的一套工具.
yum install bpftrace -y 可以安装对应的一套工具, 在线安装
默认仓库是: AppStream
git clone --depth 1 https://github.com/brendangregg/perf-tools
可以用来安装perf-tools工具
里面有很多类似的工具可以使用. 比如cachetop, cachestat等.
bpftrace的简单用法
bpftrace -e 'uretprobe:/bin/bash:readline { printf("%s\n", str(retval)); }'
如上命令可以跟踪所有的shell脚本读取执行的命令.
效果为:
[root@PG15 bin]# bpftrace -e 'uretprobe:/bin/bash:readline { printf("%s\n", str(retval)); }'
Attaching 1 probe...
ping 8.8.8.8
ifconfig
bpftrace的说明
bpftrace 其实是一种调试分析程序的方法
不同于测试环境可以debug. 生产环境基本上没有debug的条件:
1. 现在很多镜像部署, 都是最小化打包,一方面提高性能,减少内存占用, 另一方面减少磁盘文件大小,减少镜像大小.
2. debug的断点会导致生产环境卡顿, 只要不是有受虐倾向的客户(或者是喝茶看报纸的客户)都会大为光火
所以bpftrace可能就是一个很好的解决方案了.
但是bpftrace需要对产生异常的代码非常熟悉,要了解到具体产生异常的系统调用.
有时需要使用 readelf等方式获取具体的调用才可以.
方法比较复杂, 我这边还没入门, 也没法详细解释了.
perf-tools
Brendan Gregg 大神的工具集.
注意perf-tools不区分架构, arm和x86都可以使用. 主要是脚本为主.
cachestat cachetop 是几个比较基本的命令
注意部分工具需要安装 yum install perf 才可以使用
需要说明, x86都可以进行使用, 但是arm的很多命令存在异常, 需要修复.
举例
./syscount
control + c 会出现如下的信息.
[ perf record: Captured and wrote 3.537 MB perf.data (27102 samples) ]
COMM COUNT
rpcbind 1
lsmd 4
gmain 12
sssd_be 12
sshd 18
perf 25
NetworkManager 55
in:imjournal 56
sssd_nss 264
tuned 1167
redis-server 1255
aliyun-service 1621
AliYunDunUpdate 1721
AliYunDun 20891
可以参考火焰图进行生成.
ebpf的简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
- html css的简单学习(二)
html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...
随机推荐
- MySQL基础篇:第九章_详解流程控制结构
流程控制结构 系统变量 一.全局变量 作用域:针对于所有会话(连接)有效,但不能跨重启 查看所有全局变量 SHOW GLOBAL VARIABLES; 查看满足条件的部分系统变量 SHOW GLOBA ...
- 华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务
本文分享自华为云社区<华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务>,作者:云容器大未来. 引言 华为云最近成为<Forrester Wave: Multi ...
- 【好书推荐】《Python黑魔法指南》-附高清PDF版
摘要:<Python 黑魔法手册.pdf >作者(明哥)是一个从事云计算多年的 Python 重度用户,它把自已多年的 Python 编码经验整理成小册子,没有长篇大论,半天就能全能掌握, ...
- 一文快速了解火山引擎 A/B 测试平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 一. 概述 A/B Testing 作为因果推断的「黄金标准」,是效果评估的利器. 火山引擎 A/B 测试(Dat ...
- C# async await 异步执行方法
WPF 异步执行 Action<> Func<> https://www.cnblogs.com/vipsoft/p/4535037.html 代码如下 using Syste ...
- SQL Server 2016 自动备份、收缩数据库
一般策略为:Oracle: 周一.二 增量备份,周三差异备份,周四.五.六增量备份,周日完整备份(建多计划) MsSQL: 周一.六差异备份,周日完整备份(建多计划) 打开SQL server配置管理 ...
- Intellij IDEA 集成 Docker 发布
1. Docker开启远程访问,注意端口不要用默认的,防止被攻击 [root@localhost ~]# vi /usr/lib/systemd/system/docker.service 修改 # ...
- 使用 DPO 微调 Llama 2
简介 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback,RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步 ...
- Hadoop面试题(一)
1.集群的最主要瓶颈 磁盘IO 2.Hadoop运行模式 单机版.伪分布式模式.完全分布式模式 3.Hadoop生态圈的组件并做简要描述 1)Zookeeper:是一个开源的分布式应用程序协调服务,基 ...
- GIL 锁或将在 CPython 中成为可选项
哈喽大家好,我是咸鱼 几天前有媒体报道称,经过多次辩论,Python 指导委员会打算批准通过 PEP 703 提案,让 GIL(全局解释器)锁在 CPython 中成为一个可选项 PEP 703 提案 ...