需改ebpf程序探测内核,测试性能,验证想法,更新笔记。

This commit is contained in:
1iaan
2026-02-13 10:14:41 +00:00
parent 68bb4b3f9c
commit c72314291a
16 changed files with 560 additions and 230 deletions

View File

@@ -20,6 +20,8 @@
#include <arpa/inet.h>
#include <libxml/parser.h>
#define TIME_COLLECT 0
extern int slave_bootstrap(const char *listen_ip, int listen_port, const char *master_ip, int master_port);
extern mp_pool_t global_mempool;
@@ -38,20 +40,15 @@ void __completed_cmd(const uint8_t *cmd, size_t len, unsigned long long seq){
}
// __attribute__((noinline))
// void __replica_notify(uint64_t seq, uint32_t off, uint32_t len)
// {
// // 空函数即可,目的是让 uprobe 拿到参数
// asm volatile("" ::: "memory");
// }
#include <sys/time.h>
#define TIME_SUB_MS(tv1, tv2) ((tv1.tv_sec - tv2.tv_sec) * 1000 + (tv1.tv_usec - tv2.tv_usec) / 1000)
#define TIME_SUB_US(tv1, tv2) ((tv1.tv_sec - tv2.tv_sec) * 1000000 + (tv1.tv_usec - tv2.tv_usec))
int kvs_protocol(struct conn* conn){
// struct timeval func_start;
// gettimeofday(&func_start, NULL);
// long total_oplog_us = 0;
#if TIME_COLLECT == 1
struct timeval func_start;
gettimeofday(&func_start, NULL);
long total_oplog_us = 0;
#endif
if (!conn) return -1;
char *request = conn->rbuffer;
@@ -98,9 +95,10 @@ int kvs_protocol(struct conn* conn){
* 一般也已经把 out_value 设置成了 RESP error这样客户端能收到错误响应。
* - 如果 dr < 0 但 val.type 没被正确设置,兜底回一个通用错误。
*/
// struct timeval oplog_start, oplog_end;
// gettimeofday(&oplog_start, NULL);
#if TIME_COLLECT == 1
struct timeval oplog_start, oplog_end;
gettimeofday(&oplog_start, NULL);
#endif
// if(dr < 0){
// if (val.type != RESP_T_SIMPLE_STR &&
// val.type != RESP_T_ERROR &&
@@ -158,9 +156,27 @@ int kvs_protocol(struct conn* conn){
if(global_cfg.persistence == PERSIST_INCREMENTAL){
kvs_oplog_append(p, len, global_oplog_fd);
}
// gettimeofday(&oplog_end, NULL);
// total_oplog_us += (oplog_end.tv_sec - oplog_start.tv_sec) * 1000000 +
// (oplog_end.tv_usec - oplog_start.tv_usec);
// __completed_cmd(p, len, global_seq);
// global_seq ++;
if (global_cfg.replica_mode == REPLICA_ENABLE) {
uint32_t off = 0;
int ar = replica_shm_append(&g_rep_shm, global_seq, p, (uint32_t)len, &off);
if (ar == 0) {
// __replica_notify(global_seq, off, (uint32_t)len);
global_seq++;
} else {
// shm 满或异常:你可以选择降级(比如直接跳过复制,或阻塞/丢弃)
// 为了不影响主路径,这里先打印并跳过
fprintf(stderr, "replica_shm_append failed %d\n", ar);
}
}
#if TIME_COLLECT == 1
gettimeofday(&oplog_end, NULL);
total_oplog_us += (oplog_end.tv_sec - oplog_start.tv_sec) * 1000000 +
(oplog_end.tv_usec - oplog_start.tv_usec);
#endif
/* 构建响应 */
int cap = KVS_MAX_RESPONSE - out_len;
@@ -175,16 +191,19 @@ int kvs_protocol(struct conn* conn){
return consumed;
}
__completed_cmd(request, consumed, 0);
out_len += resp_len;
consumed += len;
}
// struct timeval func_end;
// gettimeofday(&func_end, NULL);
// long func_us = (func_end.tv_sec - func_start.tv_sec) * 1000000 +
// (func_end.tv_usec - func_start.tv_usec);
// fprintf(stderr, "kvs_protocol: total %ld us, oplog %ld us\n", func_us, total_oplog_us);
#if TIME_COLLECT == 1
struct timeval func_end;
gettimeofday(&func_end, NULL);
long func_us = (func_end.tv_sec - func_start.tv_sec) * 1000000 +
(func_end.tv_usec - func_start.tv_usec);
fprintf(stderr, "kvs_protocol: total %ld us, oplog %ld us\n", func_us, total_oplog_us);
#endif
*response_length = out_len;
return consumed;