mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 04:33:05 +00:00
mem: 优化 C 内存统计, 缓解多线程竞争导致的 skynet_malloc 性能下降 (#2083)
* mem: 优化 C 内存统计, 缓解多线程竞争导致的 skynet_malloc 性能下降 * rm unused SPMC_STEP_LG macro --------- Co-authored-by: efve.zff <efve.zff@alibaba-inc.com>
This commit is contained in:
42
skynet-src/mem_info.h
Normal file
42
skynet-src/mem_info.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#ifndef _MEM_INFO_H_
|
||||
#define _MEM_INFO_H_
|
||||
|
||||
#include <stdalign.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "atomic.h"
|
||||
|
||||
#define CACHE_LINE_SIZE 64
|
||||
|
||||
typedef struct {
|
||||
size_t alloc;
|
||||
size_t alloc_count;
|
||||
size_t free;
|
||||
size_t free_count;
|
||||
} MemInfo;
|
||||
|
||||
typedef struct {
|
||||
// alloc 与 free 可能不在一个线程
|
||||
// 为了避免竞争,这里也拆成两个 CacheLine 大小
|
||||
alignas(CACHE_LINE_SIZE)
|
||||
ATOM_SIZET alloc;
|
||||
ATOM_SIZET alloc_count;
|
||||
|
||||
alignas(CACHE_LINE_SIZE)
|
||||
ATOM_SIZET free;
|
||||
ATOM_SIZET free_count;
|
||||
} AtomicMemInfo;
|
||||
|
||||
void meminfo_init(MemInfo *info);
|
||||
void atomic_meminfo_init(AtomicMemInfo *info);
|
||||
|
||||
void meminfo_alloc(MemInfo *info, size_t size);
|
||||
void atomic_meminfo_alloc(AtomicMemInfo *info, size_t size);
|
||||
|
||||
void meminfo_free(MemInfo *info, size_t size);
|
||||
void atomic_meminfo_free(AtomicMemInfo *info, size_t size);
|
||||
|
||||
void meminfo_merge(MemInfo *dest, const MemInfo *src);
|
||||
void atomic_meminfo_merge(MemInfo *dest, const AtomicMemInfo *src);
|
||||
|
||||
#endif // _MEM_INFO_H_
|
||||
Reference in New Issue
Block a user