ebpf-cache-for-redis
ebpf-cache-for-redis copied to clipboard
用户态和内核中数据重复
目前ebpf-cache-for-redis中的BPF程序都是object-pin在bpf文件系统中的,也就是说这MAP中缓存的数据其实和用户态是重复的,但是这个问题并不简单。
因为ebpf-cache-for-redis我们希望其对用户态程序的影响可以是零,即需要加速时挂载,不需要时直接卸载,用户态仍旧可以继续处理,且没有任何一致性问题,目前的做法是写操作pass到用户态处理,读操作ingress可以直接返回,egress负责更新cache。
所以能否可以在内核态劫持写操作,不pass到用户态,并对这部分语句做一个记录,在ebpf卸载时把这部分语句统一返回到用户态处理,最大程度保证一致性呢。
这里有两个问题:
- 即redis的持久性变的更差了,可能丢失的数据变的更多了,但是同样的带来了极致的内存利用率和性能,这是一个对某些业务来说有极强吸引力的功能。
- 这部分数据在用户态重放时失败怎么办?这要求我们需要划定一个用户态不可做,内核态可做的事件集合。
未实现。