redis 数据结构

此系列作为redis设计与实现的笔记,会将本人自认为重点部分单独拎出来,并加入本人的一些理解。 SDS (simple dynamic string) 等同于go里的slice 1 2 3 4 5 6 7 8 9 struct sdshdr { int len; int free; char buf[]; } 优点: 杜绝缓冲区溢出(free检验) 减少修改字符串时的内存分配次数(策略:小于1MB时,le……

阅读全文

gobpf不完整使用指南

编译过程 安装llvm-10,clang-10 apt-install llvm-10 clang-10 下载bpf2go 1 go install github.com/cilium/ebpf/cmd/bpf2go@latest 修改bpf程序的include 1 #include "common.h" 编译时将bpd的headers包含进来 1 GOPACKAGE=main bpf2go -cc clang-10 -cflags '-O2 -g -Wall -Werror' -target bpfel,bpfeb bpf helloworld.bpf.c -- -I /root/ebpf/examples/headers 得到大端和小端两个版本的ELF文件,之后在go程序里加载即可。cpu一般都是小端。 内核版本要求 经测……

阅读全文

初识ebpf

摘自 eBPF 用户空间虚拟机实现相关 | Blog (forsworns.github.io) [译] Cilium:BPF 和 XDP 参考指南(2021) (arthurchiao.art) hook point 可以插入bpf代码的位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 enum bpf_prog_type { BPF_PROG_TYPE_UNSPEC, BPF_PROG_TYPE_SOCKET_FILTER, BPF_PROG_TYPE_KPROBE, BPF_PROG_TYPE_SCHED_CLS, BPF_PROG_TYPE_SCHED_ACT, BPF_PROG_TYPE_TRACEPOINT, BPF_PROG_TYPE_XDP, BPF_PROG_TYPE_PERF_EVENT, BPF_PROG_TYPE_CGROUP_SKB, BPF_PROG_TYPE_CGROUP_SOCK, BPF_PROG_TYPE_LWT_IN, BPF_PROG_TYPE_LWT_OUT, BPF_PROG_TYPE_LWT_XMIT, BPF_PROG_TYPE_SOCK_OPS, BPF_PROG_TYPE_SK_SKB, }; 程序类型 bpf_prog_type BPF prog 入口参数(R1) 程序类型 BPF_PROG_TYPE_SOCKET_FILTER struct __sk_buff 用于过滤进出口网络报文,功能上和 cBPF 类似。 BPF_PROG_TYPE_KPROBE struct pt_regs 用于……

阅读全文

基于事务处理的vpp管控面agent

问题背景 vpp作为vrouter,类似物理交换机,各配置项依赖关系复杂。以下为vpp配置abf策略路由的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 typedef abf_policy { u32 policy_id; u32 acl_index; //依赖acl u8 n_paths; vl_api_fib_path_t paths[n_paths]; }; autoreply define abf_policy_add_del { option status="in_progress"; u32 client_index; u32 context; bool is_add; vl_api_abf_policy_t policy; }; typedef abf_itf_attach { u32 policy_id; vl_api_interface_index_t sw_if_index; //依赖interface,interf……

阅读全文

初识srv6

翻译自SRv6 Network Programming draft-filsfils-spring-srv6-network-programming-07 SRH Segment Routing Header SRH在一个报文中可以有多个 NH ipv6 next-header field Srv6的Routing Header的type是4,IP6 header的NH字段是43 SID 编排链节点的ID,srv6节点的SID table里面保存自己在各个编排链内的SID。local SID可以是设备外部接口(不会是内……

阅读全文

数位dp

题目特征 要求统计满足一定条件的数的数量(即,最终目的为计数,若要结果则只能回溯爆搜得到); 这些条件经过转化后可以使用「数位」的思想去理解和判断; 输入会提供一个数字区间(有时也只提供上界)来作为统计的限制; 上界很大(比如 10^{18}),暴力枚举验证会超时。 思路 从高到低枚举每一位,……

阅读全文