mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-22 02:53:09 +00:00
* mem: 优化 C 内存统计, 缓解多线程竞争导致的 skynet_malloc 性能下降 * rm unused SPMC_STEP_LG macro --------- Co-authored-by: efve.zff <efve.zff@alibaba-inc.com>
43 lines
999 B
C
43 lines
999 B
C
#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_
|