需改ebpf程序探测内核,测试性能,验证想法,更新笔记。
This commit is contained in:
63
kvstore.c
63
kvstore.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user