Linux操作系统
文章平均质量分 70
frankzfz
这个作者很懒,什么都没留下…
展开
-
BPF学习笔记(四)--使用sockmap示例:bypass内核协议栈
当我们使用127.0.0.1的localhost地址,在本地机器上进行发送和接受数据时,整个数据的发送还是要经过完整的内核协议栈。Cilimu的网络借用bfp的sockmapbypass提高整个网络的性能,参考《How to use eBPF for acceleratingCloud Native application》文章中的示例,在centos7.6平台上进行验...原创 2022-07-13 20:16:15 · 531 阅读 · 0 评论 -
BPF学习笔记(八)--Linux tracing system对比分析
前端工具通常作为使用者,在跟踪内核或者观测内核时使用的命令,比如:bpftrace BCC 等工具,内核态框架是指支持上述前端工具的内核框架,比如systemtap的内核模块、BPF的字节码等。Linux trace技术发展已久,经常看到很多的专业术语,从perf LTTng systemtap bpftrace tracepoint trace BCC bpf ebpf等词汇,这些关键的词汇有着怎样的联系和关联,通过下面的这个图可以直观的认识到这几种关键技术的内在联系。:BPF是可针对内核可编程的,原创 2023-01-05 21:15:00 · 723 阅读 · 1 评论 -
perf内核跟踪和探测
前面的文章中介绍了使用bcc systemtap等跟踪命令,对内核进行跟踪,还有一个perf工具,作为内核自带的内核分析工具,也可以对内核跟踪和观测,perf的不同之处在于可以方便的分析内核中那个函数占用的CPU时间较多,成为影响系统性能的主要主要因素,所以被称为:Performance Counters for Linux (PCL)。在使用perf命令跟踪内核变量可以使用下面的命令,本篇文章还是使用icmp_rcv函数作为跟踪的示例函数:执行下面的命令。前面有行号的是可以追踪的内核源码。原创 2022-10-17 17:27:47 · 739 阅读 · 0 评论 -
BPF学习笔记(七)-- 静态跟踪点tracepoint
通过对内核中相关的文件进行分析, 在kernel/bpf/syscall.c文件中,我们可以看到其中提交的一个commit,去掉对bpf_prog_load的tracepoint,使用git show 4d220ed 显示下面的信息。》中第4章节中的案例中,有一个tracepoint bpf_prog_load的实例,在我自己的云主机上,执行不通过。通过上面的查看,是在内核4.18之后的内核删除了。上面的程序在bpf_prog_load的函数中添加一个添加一个tracepoint点。原创 2023-01-01 21:15:00 · 604 阅读 · 0 评论 -
BPF学习笔记(六)-- 使用bpf实现xdp的例子
本篇文章参考《Linux Observability with BPF》中第7章的例子,主要功能是借助于ip命令作为前端,对其他主机访问tcp的8000端口进行限制,这里需要使用较新版本的iproute2软件工具包.使用下面的命令进行编译:clang -g -c -O2 -target bpf -c program.c -o program.o。再次使用nmap扫描。本bpf程序对于访问本机的tcp的协议的8000端口进行限制,通过上面的命令加载后,在接口上出现加载的xdp的类型和ID,表明加载成功。原创 2022-12-29 20:15:00 · 1166 阅读 · 0 评论 -
BPF学习笔记(三)--BPF示例程序
上一篇文章中BPF的例子是以BCC的整体框架为基础,本篇介绍一下基于libbpf库函数为基础,结合内核中的bpf的sample为基础编写一个BPF的程序,本篇介绍是以《linux-observability-with-bpf》这本书第二章的例子为基础,由于内核版本的不同,本篇介绍是以Linux5.16内核为基础,Linux5.16内核中的接口函数与书中的给到的程序案例有较大的差别。2)随着bpf和内核版本的不断变化,参考本文时需要重点关注不同的内核版本、bpftool、gcc等各类工具的版本。原创 2022-10-12 19:15:04 · 2153 阅读 · 0 评论 -
BPF学习笔记(二)-- 基于BCC的BPF示例程序
1. BPF_PERF_OUTPUT 创建BPF的table,通过Perf 的环形缓存区,把用户定义的event事件的数据推送到用户空间,这是把事件数据推送到用户空间的首选的方式。注意该打印函数会将信息输出到下面的文件中:/sys/kernel/debug/tracing/trace_pipe,通过跟踪该文件进行查看。4. 其实整个程序包含了两个部分,一个是python的客户端,一个是以字符串的形式bpf_text出现的插桩函数,使用C语言编写,整个测试程序包含了,用户空间和内核空间的代码。原创 2022-10-12 19:03:42 · 758 阅读 · 0 评论 -
BPF学习笔记(一)--BPF概述
BPF的原理简单解释为,在各种内核事件和应用程序事件的发生的前面,运行一小段程序,通过运行的这段程序获取到例如:函数调用的流程、结构体内的变量值等有利于分析问题的信息。BPF跟踪检测有两个前端的工具BCC和bpftrace。BCC为BPF编译器集合,BPF Compiler Collection,他提供了开发BPF跟踪程序的高级框架,提供了一个编写内核BPF程序的C语言环境,同时也提供了 Python和Lua等用户端的接口。当然我们可以在这个基础和框架之下,开发符合我们自己的实际需求的BPF工具。原创 2022-10-12 19:00:16 · 517 阅读 · 0 评论 -
BPF学习笔记(五)--Systemtap BPF/BCC bpftrace 实践对比
本篇文章通过一个案例,对systemtap、BPF/BCC、bpftrace三种不同类型的内核探测工具进行剖析和对比。这个程序就是简单对icmp_rcv函数,收到icmp报文,打印出对应的源IP地址和目的IP地址。原创 2022-10-10 17:52:32 · 849 阅读 · 0 评论 -
CFS调度算法调度时机的理解
进程的调度分为两种类型,第一种是自愿让出当前的CPU,这种情况可能是由于当前正在运行的CPU没有获取到继续运行的资源,需要让出当前的CPU,进入sleep状态,等待需要的资源获取到后继续运行,或者本身调用schedule()函数进行调度,第二种情况下是非自愿的情况下,需要让出当前占用的CPU,比如:当前进程在CPU上消耗的时间已经用完或者在周期调度中断中发现有更高优先级进程需要被调度,则当前进程会被优先级更高的进程进行抢占,这种情况下可能是由于:scheduler_tick()函数进行调度。原创 2022-09-28 18:18:08 · 374 阅读 · 0 评论 -
CFS 调度器的vruntime
CFS调度算法中有一个重要的概念,进程运行的虚拟时间vruntime,CFS调度算法时间是根据vruntime进行进程调度的。本文结合自己对vruntime的理解进行整理和梳理。原创 2022-09-16 10:26:04 · 786 阅读 · 0 评论