基于eBPF的Continuous Profiler如何解析符号表

最近看了两个项目pyroscope^4和parca^5,这两个都是开源的可观测项目。pyroscope实现了基于eBPF的无侵入观测能力,鉴于parca实现得不是非常优雅(至少我用着觉得非常难受),本文就单纯从pyroscope展开分析了。由于当下eBPF实现Stack Trace等功能已经有了非常多的案例,本文就不再提如何使用eBPF做Continuous Profiler^6了,我们单纯来看看最核心的一个内容——符号名称是怎么解析出来的(也就是如何解析符号表的)?

继续阅读

稳定又好用——RouterOS+OpenWRT旁路由家庭网络

大家好,最近想了想决定在博客开辟“网络方案”的板块,结合博主我所熟悉的MikroTik、H3C、华为等商用设备以及基于Linux的网络系统(如常规发行版Linux、VyOS、OpenWRT),为大家推荐一些能够覆盖家用、工作室及小规模办公室的网络方案,这些方案有各自的侧重点和缺点,适合不同场景使用,当然如果你有你独特的需求,也欢迎和我一起讨论~

这篇文章,我们就先来看看博主我自己家的网络方案。

继续阅读

原生gRPC与RESTful HTTP API并包——gRPC-Gateway实践

众所周知,Google的gRPC体系可谓是相当好用,在有protoc这样的工具加持下,原本要维护调用侧和服务侧两部分代码,现在写完proto文件直接交给protoc编译一下即可,可谓是减少了不少工作量。但是,如果我就是要兼容HTTP API,那么这又怎么处理呢?

方法就是——gRPC-Gateway^1。抛去兼容HTTP API不说,如果你本身就在使用RESTful HTTP API,那么仍然可以使用gRPC-Gateway来生成代码,从原本维护两侧代码到现在,你可以只需要一些proto文件就可以搞定你的HTTP API,还是相当省心的。

继续阅读

网络系统基准测试——DPDK Pktgen使用记录

我们自己的数据面系统如何打流测试呢?如果使用Linux协议栈上的测试工具往往是测不出来真正的数据的,而且受制于协议栈,我们最终也无法得到真实的收发情况,因此这时候我们要请出基于DPDK开发的一个打流测试工具——Pktgen。

继续阅读

看看Linux Kernel——基于Macvtap互通问题追溯根源

Linux上遇到一个问题——macvtap的虚拟接口无法和parent互通,这个问题让我不禁感到奇怪。以往都是同一个parent上的macvtap间互访,还真没有留意过访问parent是什么样一个情况。libvirt的wiki告诉我它确实是不能互通的,这或多或少激起了我对macvtap与bridge区别的一个好奇,Google未果,只能沿着Linux的内核代码走一遍了。

继续阅读

Kubernetes与KubeSphere上车指南

2022年了,开发需要各种应用时,不用再像以前那样挨个手工安装一整天了,直接上K8S就好啦~

这次,博主我上了一套3节点的集群,其中包含1个Master、2个Worker,前端选择了开源的KubeSphere,网络组件选择了性能好、又能起BGP的Cilium。由于本次部署是作为日常开发环境,操作上少了一些合规的考虑,仅供尝鲜和入门使用,生产环境部署需再细致研究。

继续阅读

使用Linux内核的ftrace跟踪eBPF问题

好久没写文章了,最近忙于各种事情,再加上过年放假学习,计划文章队列排的老长了。在此,新年第一篇文章,就先祝一下大家新年快乐哈~

eBPF香是香,但是竟然还有内核不支持?博主最近遇到了这么个情况,eBPF程序死活无法加载,始终报出Invalid argument的错误,为了解决这个问题,博主我花了好多天时间排查,跟踪了Linux内核的调用链,最后发现,问题竟然是…(实在想不到好的开头了)

继续阅读