分类 技术介绍 中的文章

dpdk rcu lib

dpdk rcu linux的RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制读取数据的时候不对链表进行耗时的加锁操作。这样在同一时间可以有多个线程同时读取该链表,并且允许一个线程对链表进行修改。RCU适用于需要频繁的读取数据,而相应修改数据并不多的情景……

阅读全文

contiv memif

contiv memif contiv的cni与device plugin相结合,实现了: Pod能同时接入不止一张网卡 Pod接入的网卡可以是tap,veth,memif devicePlugin Device Plugin实际是一个运行在Kubelet所在的Node上的gRPC server,通过Unix Socket、基于以下(简化的)API……

阅读全文

raft选举流程

图解 Raft (thesecretlivesofdata.com) 算法目的:实现了分布式节点的数据一致性 节点有三个状态:follower,candidate,leader leader election 初始阶段所有节点处于follower状态 follower状态下节点存在一个election timeout(150ms—300ms之间的随机数,随机降低了多个节点同时……

阅读全文

redis Server

数据库切换 默认会创建16个数据库,客户端通过select选取。但一般情况只用第0个数据库,切换容易导致误操作 1 2 3 4 5 6 7 8 9 typedef struct redisDb { dict *dict; //键空间 dict *expires; //过期字典 int id; } redisDb; 所有键空间存储在redisDb的dict中,称为key space 每个键是字符串对象,值是各种对象 读写键操作 更新key……

阅读全文

redis 多节点

主从(复制) 同步 slave刚上线或断线重连时的第一次全量同步 slave的客户端主动发送sync命令,触发master的BGSAVE,BGSAVE过程中将命令存入缓冲区,BGSAVE完成后发送RDB文件,slave完成RDB载入后再发送缓冲区的指令 命令传播 完成同步后的增量同步 mas……

阅读全文

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……

阅读全文

初识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可以是设备外部接口(不会是内……

阅读全文