内核
文章平均质量分 96
李兆龙的博客
Distributed Systems & NoSQL & Linux Kernel / eBPF & Chaos Engineering
展开
-
gettimeofday飞快的根因:vdso
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。内核版本 5.4.119引言众所周知工作时间等于工作效率乘以工作总量,我一直认为效率的权重远大于时间,这也是我从大一开始就逃课睡觉打豆豆的原因。大抵总会有一个更加显然的例子,比如一个下山的功夫,一个叫做adl的坏家伙便把我从一个现实主义者变成了虚无主义者;再比如半个小时的功夫,我就强迫y7n05h,adl以及我搞定了这个看似有点难以解释的小原创 2022-04-25 14:25:04 · 4198 阅读 · 5 评论 -
从sk_buff中的线性区与非线性区到 bpf_skb_pull_data
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。内核版本为5.4.119引言我的读者应该都会知道我最近陷入了协议栈前加速内存数据库这个项目中不能自拔[5],这篇文章来阐述一个在实现过程中遇到的问题。首先阐述现象,然后引入skb_buff的线性区与非线性区,最后分析内核中bpf_skb_pull_data的实现。现象阐述有兴趣的朋友可以看看代码,其中brc_rx_filter_main原创 2022-03-29 23:05:03 · 3681 阅读 · 2 评论 -
eBPF: 从 map 到 BPF_MAP_TYPE_QUEUE 源码解析
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。内核版本为5.4.119引言这篇文章的初衷是解决以下几个问题:Map的原理到底是什么,如何做到用户态内核态之间互相交互?Map的内存分配是怎么做的?在操作queue的时候需要使用栈上变量,并传入一个栈上指针,这样做是否有危险呢?当然读者可能会认为有一些文不对题的嫌疑,事实是kernel中这部分的代码非常简单(queue和stac原创 2022-03-24 17:53:05 · 1926 阅读 · 0 评论 -
eBPF: 深入探究 Map 类型
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。内核版本为5.4.119引言前面几篇文章提到为了加速内存数据库,我需要在内核里面放置一块缓存,原理其实和DB前面放置一个cache,CPU cache大同小异,我有很多文章已经描述过这个问题了[5][4][6][7],无非前者为了跳过协议栈,后者为了跳过DB和访存操作,也就是说功能上三者应该是差不多的,当然需要解决的问题也是差不多的,基本重原创 2022-03-19 20:46:17 · 2904 阅读 · 2 评论 -
Linux 内核网络栈分析: 接收数据
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言对于内核网络栈的分析我在大二听了李勇大神来小组的讲座以后就想干了,但像很多主题的文章一样,始终没有勇气,也没有时间动手,我终究还是把这个话题从大二延到大三,从大三延到大四了。冥冥之中某种东西好像早已是安排好的,毕设本来老陈要求的的是自由发挥,我抱着对数据库的兴趣发掘出一个协议栈前加速内存数据库的题目,想着在XDP和TC加点勾子就收工的题目原创 2022-03-17 23:01:26 · 2390 阅读 · 4 评论 -
eBPF: 从 BPF to BPF Calls 到 Tail Calls
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言参考linux安全之seccompUsing seccomp to limit the kernel attack surfaceSECure COMPuting with filtersseccomp(2) — Linux manual pagebpf: introduce bpf_tail_call() helper原创 2022-03-14 18:36:49 · 3877 阅读 · 3 评论 -
eBPF: Traffic Control Subsystem
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。原创 2022-03-11 17:11:24 · 3384 阅读 · 2 评论 -
浅谈动态追踪:从SystemTap到bpfTrace
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。文章目录引言介绍工具30秒排查问题Top/Uptimedmesg -T | tail -n xvmstatmpstatpidstatiostatsar细化排错动态追踪SystemTapkprobes/uprobes原理kprobes特点与使用限制tapsets种类安全与保护措施有趣的命令行参数bpfTrace总结引言这篇文章的内容是Xiyo原创 2021-09-30 19:29:53 · 1689 阅读 · 0 评论 -
在bpfTrace中使用USDT
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言USDT的全称是user-level statically defined tracing,是一种在用户态中埋点,以支持动态追踪的方案,埋点的优点基本可以阐述为以下三点:防止inline而导致无法监测到函数随版本迭代接口功能可以保证没有变化在不进行追踪时插入一条nop指令,在进行追踪时替换为int3。在不追踪时最大程度节省性能,代原创 2021-08-29 13:57:43 · 993 阅读 · 1 评论 -
perf基本使用与简单介绍
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言原创 2021-08-28 20:03:06 · 2605 阅读 · 3 评论 -
Off-CPU分析
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言当对于代码质量的追求从学校的看的过去就行到了工作的必须精益求精时,我想我们的程序在每一个时刻到底在干什么就显得尤为重要,说白了,就是可观测性,而且是高效的可观测,毕竟线上出问题需要排查时不可能让你GDB或者perf进去看一下,那么程序原生的监控框架,采样和动态追踪看起来就是不可缺少的。性能分析是个很庞杂的领域,祖师爷当属奈飞的brend原创 2021-08-18 21:25:03 · 1422 阅读 · 1 评论 -
记一次由内核版本引起的奇异问题
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。引言这篇文章在于去记录一个解决问题的过程,我想这种文章于我而言相比于一些无聊的笔记是有意思的多的。描述问题的起源在于现在要去分析多线程持有锁时花费在锁争抢上的时间,其实也就是因为锁竞争而导致线程挂起的时间,想到Stap,BPFTrace这种动态追踪方案可以很好的解决问题,而且机缘巧合之下在官网发现了有人已经写了这么一个Stap的脚本去解决原创 2021-08-12 11:48:09 · 745 阅读 · 0 评论 -
open系统调用源码解析
内核版本为4.15文章目录引言do_sys_open引言为了更好的理解VFS的运作过程,决定看看open的源码以捋顺自己的思路。还记得大一时老师为了让大家对所学的东西有更深的兴趣,经常拿open内部的调用关系图来激励大家,一个小小的open都如此复杂,你又怎能停滞不前?停止学习?哈哈哈,开个玩笑,open并不小,你也没有停滞不前!所以这其实也算是解决一个大一时就留下的疑惑,让我们开始吧!do_sys_openlong do_sys_open(int dfd, const char __user原创 2020-10-05 12:42:50 · 1542 阅读 · 0 评论 -
中断机制(2)Bottom Half
引言我们在上一篇文章中说道了中断是一种非常重要的机制,我们即希望它执行的更快,因为中断处理程序不但执行在中断上下文中,而且禁止了其他的中断,并且在执行完以后还需要返回给外设信息,这在一定程度上决定了系统的效率;我们还希望其完成更多的工作量,这就意味着更多的代码量,这显然是和上一条冲突的。此时就引出了Bottom half机制,见名思意,其实就是下半部执行,其实就是把有严格时限的工作交给上半部,把不那么重要的放在下半部,以此提高上半部程序的响应速度。以网卡举例,当网卡接收到数据包的时候,会触发某个中断,显原创 2020-09-18 13:44:17 · 1707 阅读 · 0 评论 -
中断机制(1)Top Half
文章目录引言中断处理程序如何注册中断处理函数中断上下文中断如何发生那么我们是否能利用中断呢?引言操作系统作为一个管理资源的复杂软件,如何管理连接到计算机上的硬件就成了一个麻烦的问题,想要有效的管理这些设备显然我们不能够一直去等待硬件的信号发生;又因为众所周知处理器与外部设备的运行速度相差甚远,所以如果我们选择让处理器发出请求,等待外设回复的话,显然是对CPU的一种极大的浪费。尤其是单处理器中,我们更希望这个宝贵CPU的每一秒的算力都被充分利用,由此很自然的想到我们需要一种异步的处理方案,使得外设的操作完原创 2020-09-18 13:43:59 · 725 阅读 · 0 评论