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

@@ -9,7 +9,7 @@
mp_pool_t global_mempool;
static atomic_int g_memory_mode = ATOMIC_VAR_INIT(MEMLEAK_DETECT_OFF);
static atomic_int g_memory_mode = ATOMIC_VAR_INIT(ALLOC_OTHER);
static atomic_int g_memleak_detect_mode = ATOMIC_VAR_INIT(MEMLEAK_DETECT_OFF);
// 设置内存池类型
@@ -36,7 +36,7 @@ MemLeakDetectMode kvs_get_memleak_detect(void) {
void *kvs_malloc_impl(size_t size){
switch (atomic_load(&g_memleak_detect_mode)){
switch (atomic_load(&g_memory_mode)){
case ALLOC_MALLOC:
return malloc(size);
case ALLOC_MYPOOL:
@@ -51,7 +51,7 @@ void *kvs_malloc_impl(size_t size){
}
void kvs_free_impl(void *ptr) {
switch (atomic_load(&g_memleak_detect_mode)){
switch (atomic_load(&g_memory_mode)){
case ALLOC_MALLOC:
free(ptr);
break;
@@ -75,20 +75,20 @@ void kvs_free_impl(void *ptr) {
void *nMalloc(size_t size, const char * filename, const char *func, int line){
void *ptr = kvs_malloc_impl(size);
if(atomic_load(&g_memleak_detect_mode) == MEMLEAK_DETECT_ON) {
char buff[128];
snprintf(buff, 128, "./mem_leak/%p.mem", ptr);
FILE* fp = fopen(buff, "w");
if(!fp){
kvs_free(ptr);
return NULL;
}
// if(atomic_load(&g_memleak_detect_mode) == MEMLEAK_DETECT_ON) {
// char buff[128];
// snprintf(buff, 128, "./mem_leak/%p.mem", ptr);
// FILE* fp = fopen(buff, "w");
// if(!fp){
// kvs_free(ptr);
// return NULL;
// }
fprintf(fp, "[+] [%s:%d:%s] [%p:%ld]\n", filename, line, func, ptr, size);
fflush(fp);
fclose(fp);
// fprintf(fp, "[+] [%s:%d:%s] [%p:%ld]\n", filename, line, func, ptr, size);
// fflush(fp);
// fclose(fp);
}
// }
return ptr;
}
@@ -97,15 +97,15 @@ void nFree(void *ptr, const char * filename, const char *func, int line){
return ;
}
if(atomic_load(&g_memleak_detect_mode) == MEMLEAK_DETECT_ON) {
char buff[128];
snprintf(buff, 128, "./mem_leak/%p.mem", ptr);
// if(atomic_load(&g_memleak_detect_mode) == MEMLEAK_DETECT_ON) {
// char buff[128];
// snprintf(buff, 128, "./mem_leak/%p.mem", ptr);
if(unlink(buff) < 0) {
return ;
}
// if(unlink(buff) < 0) {
// return ;
// }
}
// }
kvs_free_impl(ptr);
}

View File

@@ -74,7 +74,7 @@ static mp_page_t* mp_page_create(mp_bucket_t *owner){
pg->prev = NULL;
pg->next = NULL;
bitmap_clear_all(pg->bitmap, 8);
bitmap_clear_all(pg->bitmap, 20);
char *p = (char*)page_payload(pg);
for(uint16_t i = 0;i < cap - 1; ++ i){

View File

@@ -6,11 +6,12 @@
#include <stdlib.h>
#include <string.h>
#define MEMPOOL_PAGE_SIZE 4096
// #define MEMPOOL_PAGE_SIZE 4096
#define MEMPOOL_PAGE_SIZE (1024*8)
#define MEMPOOL_BLOCK_MAX_SIZE 512
#define MEMPOOL_ALIGNMENT 8
#define MEMPOOL_NUM_CLASSES (MEMPOOL_BLOCK_MAX_SIZE / MEMPOOL_ALIGNMENT)
#define MEMPOOL_CACHE_PAGE 2
#define MEMPOOL_CACHE_PAGE 4
typedef struct mp_page_s mp_page_t;
typedef struct mp_bucket_s mp_bucket_t;
@@ -34,7 +35,7 @@ struct mp_page_s{
uint16_t free_count;
uint16_t capacity;
uint64_t bitmap[8]; // 最多支持 512 个块 (64*8)
uint64_t bitmap[20]; // 最多支持 512/1280 个块 (64*20)
};
struct mp_bucket_s{