ebpf的主从同步实现,QPS测试与内存池QPS测试。

This commit is contained in:
1iaan
2026-01-30 16:00:06 +00:00
parent 2bdb48d63d
commit fbdcff6878
23 changed files with 599 additions and 383 deletions

View File

@@ -14,6 +14,8 @@ extern kvs_rbtree_t global_rbtree;
extern kvs_hash_t global_hash;
#endif
extern unsigned long long global_seq;
static int need(const uint8_t *p, const uint8_t *end, size_t n) {
return (p + n <= end) ? 0 : -1;
}
@@ -543,10 +545,12 @@ int resp_dispatch(const resp_cmd_t *cmd, resp_value_t *out_value) {
return 0;
}
case KVS_CMD_SSYNC:
__ssync(cmd->argv[1].ptr, cmd->argv[1].len, atoi(cmd->argv[2].ptr), global_seq);
kvs_create_snapshot_async(cmd->argv[1].ptr, atoi(cmd->argv[2].ptr));
*out_value = resp_simple("OK");
return 0;
case KVS_CMD_SREADY:
__sready();
*out_value = resp_simple("OK");
return 0;
default:
@@ -555,4 +559,19 @@ int resp_dispatch(const resp_cmd_t *cmd, resp_value_t *out_value) {
*out_value = resp_error("ERR unknown command");
return 0;
}
void __ssync(const uint8_t *ip, uint32_t ip_len, int port, unsigned long long seq){
// hook 在这里,必须等待 ebpf实时同步进程 状态切换为 PREPARING 才允许返回
// 不这样做的话:快照立刻被创建,执行下一条命令(CmdX),如果此刻 ebpf 还没有被置为 PREPARING即没有开始记录需要转发的命令
// 会导致:快照里没有(CmdX)ebpf实时同步进程里也没有(CmdX)
// 要怎么做?
// master 在内部维护seqebpf 从启动就一直记录数据。ebpf探测 __ssync 的seq来确定从哪里开始发送。
// ebpf: __ssync SSYNC ip port seq, 知道往哪里发,从哪里开始发
// ebpf: __sready SREADY, 可以开始发了,发往(ip,port)
// ebpf: __complete_cmd cmd,len,seq, 记录命令
}
void __sready(){
}