#code
基于ebpf实现的gls
虽然
golang并不推荐使用goid来构建gls(goroutine local storage),仍然有着很多的实现gls并使用的尝试。github-gls这里是一个常见的实现,基本表述了golang里gls的实现思路:获取goid,基于goid构建一个存储。本文中笔者尝试基于ebpf来构建一个golang的gls。
基本功能
本文中基于ebpf实现的gls具有如下功能:
- 基于
goid的存储。即map[goid]=value; - 基于
goroutine派生关系设置的value缺省值。即map[goid=1]=121,且goid=1派生goid=2,则map[goid=2]=map[goid=1]=121;
本文建议参照黑魔法-ebpf-对用户空间数据的写入进行理解。
·3min·李岩
基于ebpf实现的gls黑魔法--用 ebpf 构建用户空间数据的桥梁
在之前的示例中,仅涉及到ebpf对用户空间数据的读取。工程性较强的如:ebpf采集mysql请求信息及ebpf对应用安全的思考也仅是通过urpobe采集用户空间的数据。本文介绍点ebpf的“黑魔法”:将用户空间数据的读取、用户空间数据的写入结合起来,成为用户空间数据交互的桥梁。
·3min·李岩
黑魔法--用 ebpf 构建用户空间数据的桥梁golang proto3 使用
一直都比较赞赏
protocol buffer。由于其表现性强、压缩比高,可以把很多结构都写到proto文件中,同时添加很多的注释。当需要进行进行数据存储时,使用proto序列化结果替代json,可以省去很多的冗余字段。本篇找了一些golang中protocol buffer的使用示例,以及protocol对象与json对象互相转换的示例。
·2min·李岩
golang proto3 使用challenges of bpf tracing go
·1min·李岩
challenges of bpf tracing go