ebpf的主从同步实现,QPS测试与内存池QPS测试。
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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){
|
||||
|
||||
@@ -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{
|
||||
|
||||
Reference in New Issue
Block a user