Make extent module hermetic.
In the form of extent2.h. The naming leaves something to be desired, but I'll leave that for a later diff.
This commit is contained in:
parent
e08c581cf1
commit
92a511d385
@ -107,6 +107,7 @@ C_SRCS := $(srcroot)src/jemalloc.c \
|
|||||||
$(srcroot)src/ehooks.c \
|
$(srcroot)src/ehooks.c \
|
||||||
$(srcroot)src/eset.c \
|
$(srcroot)src/eset.c \
|
||||||
$(srcroot)src/extent.c \
|
$(srcroot)src/extent.c \
|
||||||
|
$(srcroot)src/extent2.c \
|
||||||
$(srcroot)src/extent_dss.c \
|
$(srcroot)src/extent_dss.c \
|
||||||
$(srcroot)src/extent_mmap.c \
|
$(srcroot)src/extent_mmap.c \
|
||||||
$(srcroot)src/hash.c \
|
$(srcroot)src/hash.c \
|
||||||
|
@ -4,8 +4,6 @@
|
|||||||
#include "jemalloc/internal/bin_stats.h"
|
#include "jemalloc/internal/bin_stats.h"
|
||||||
#include "jemalloc/internal/bin_types.h"
|
#include "jemalloc/internal/bin_types.h"
|
||||||
#include "jemalloc/internal/extent.h"
|
#include "jemalloc/internal/extent.h"
|
||||||
#include "jemalloc/internal/extent_types.h"
|
|
||||||
#include "jemalloc/internal/extent_structs.h"
|
|
||||||
#include "jemalloc/internal/mutex.h"
|
#include "jemalloc/internal/mutex.h"
|
||||||
#include "jemalloc/internal/sc.h"
|
#include "jemalloc/internal/sc.h"
|
||||||
|
|
||||||
|
@ -620,4 +620,7 @@ extent_esnead_comp(const extent_t *a, const extent_t *b) {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ph_proto(, extent_avail_, extent_tree_t, extent_t)
|
||||||
|
ph_proto(, extent_heap_, extent_heap_t, extent_t)
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EXTENT_H */
|
#endif /* JEMALLOC_INTERNAL_EXTENT_H */
|
||||||
|
@ -1,23 +1,56 @@
|
|||||||
#ifndef JEMALLOC_INTERNAL_EXTENT_EXTERNS_H
|
#ifndef JEMALLOC_INTERNAL_EXTENT2_H
|
||||||
#define JEMALLOC_INTERNAL_EXTENT_EXTERNS_H
|
#define JEMALLOC_INTERNAL_EXTENT2_H
|
||||||
|
|
||||||
#include "jemalloc/internal/ehooks.h"
|
#include "jemalloc/internal/ehooks.h"
|
||||||
#include "jemalloc/internal/mutex.h"
|
#include "jemalloc/internal/eset.h"
|
||||||
#include "jemalloc/internal/mutex_pool.h"
|
|
||||||
#include "jemalloc/internal/ph.h"
|
#include "jemalloc/internal/ph.h"
|
||||||
#include "jemalloc/internal/rtree.h"
|
#include "jemalloc/internal/rtree.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This module contains the page-level allocator. It chooses the addresses that
|
||||||
|
* allocations requested by other modules will inhabit, and updates the global
|
||||||
|
* metadata to reflect allocation/deallocation/purging decisions.
|
||||||
|
*
|
||||||
|
* The naming ("extent2" for the module, and "extent_" or "extents_" for most of
|
||||||
|
* the functions) is historical. Eventually, the naming should be updated to
|
||||||
|
* reflect the functionality. Similarly, the utilization stats live here for no
|
||||||
|
* particular reason. This will also be changed, but much more immediately.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following two structs are for experimental purposes. See
|
||||||
|
* experimental_utilization_query_ctl and
|
||||||
|
* experimental_utilization_batch_query_ctl in src/ctl.c.
|
||||||
|
*/
|
||||||
|
typedef struct extent_util_stats_s extent_util_stats_t;
|
||||||
|
struct extent_util_stats_s {
|
||||||
|
size_t nfree;
|
||||||
|
size_t nregs;
|
||||||
|
size_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct extent_util_stats_verbose_s extent_util_stats_verbose_t;
|
||||||
|
struct extent_util_stats_verbose_s {
|
||||||
|
void *slabcur_addr;
|
||||||
|
size_t nfree;
|
||||||
|
size_t nregs;
|
||||||
|
size_t size;
|
||||||
|
size_t bin_nfree;
|
||||||
|
size_t bin_nregs;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When reuse (and split) an active extent, (1U << opt_lg_extent_max_active_fit)
|
||||||
|
* is the max ratio between the size of the active extent and the new extent.
|
||||||
|
*/
|
||||||
|
#define LG_EXTENT_MAX_ACTIVE_FIT_DEFAULT 6
|
||||||
extern size_t opt_lg_extent_max_active_fit;
|
extern size_t opt_lg_extent_max_active_fit;
|
||||||
|
|
||||||
extern rtree_t extents_rtree;
|
extern rtree_t extents_rtree;
|
||||||
extern mutex_pool_t extent_mutex_pool;
|
|
||||||
|
|
||||||
extent_t *extent_alloc(tsdn_t *tsdn, arena_t *arena);
|
extent_t *extent_alloc(tsdn_t *tsdn, arena_t *arena);
|
||||||
void extent_dalloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent);
|
void extent_dalloc(tsdn_t *tsdn, arena_t *arena, extent_t *extent);
|
||||||
|
|
||||||
ph_proto(, extent_avail_, extent_tree_t, extent_t)
|
|
||||||
ph_proto(, extent_heap_, extent_heap_t, extent_t)
|
|
||||||
|
|
||||||
extent_t *extents_alloc(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
extent_t *extents_alloc(tsdn_t *tsdn, arena_t *arena, ehooks_t *ehooks,
|
||||||
eset_t *eset, void *new_addr, size_t size, size_t pad, size_t alignment,
|
eset_t *eset, void *new_addr, size_t size, size_t pad, size_t alignment,
|
||||||
bool slab, szind_t szind, bool *zero, bool *commit);
|
bool slab, szind_t szind, bool *zero, bool *commit);
|
||||||
@ -56,4 +89,4 @@ void extent_util_stats_verbose_get(tsdn_t *tsdn, const void *ptr,
|
|||||||
size_t *nfree, size_t *nregs, size_t *size,
|
size_t *nfree, size_t *nregs, size_t *size,
|
||||||
size_t *bin_nfree, size_t *bin_nregs, void **slabcur_addr);
|
size_t *bin_nfree, size_t *bin_nregs, void **slabcur_addr);
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EXTENT_EXTERNS_H */
|
#endif /* JEMALLOC_INTERNAL_EXTENT2_H */
|
@ -1,38 +0,0 @@
|
|||||||
#ifndef JEMALLOC_INTERNAL_EXTENT_INLINES_H
|
|
||||||
#define JEMALLOC_INTERNAL_EXTENT_INLINES_H
|
|
||||||
|
|
||||||
#include "jemalloc/internal/mutex.h"
|
|
||||||
#include "jemalloc/internal/mutex_pool.h"
|
|
||||||
#include "jemalloc/internal/pages.h"
|
|
||||||
#include "jemalloc/internal/prng.h"
|
|
||||||
#include "jemalloc/internal/ql.h"
|
|
||||||
#include "jemalloc/internal/sc.h"
|
|
||||||
#include "jemalloc/internal/sz.h"
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
extent_lock(tsdn_t *tsdn, extent_t *extent) {
|
|
||||||
assert(extent != NULL);
|
|
||||||
mutex_pool_lock(tsdn, &extent_mutex_pool, (uintptr_t)extent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
extent_unlock(tsdn_t *tsdn, extent_t *extent) {
|
|
||||||
assert(extent != NULL);
|
|
||||||
mutex_pool_unlock(tsdn, &extent_mutex_pool, (uintptr_t)extent);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
extent_lock2(tsdn_t *tsdn, extent_t *extent1, extent_t *extent2) {
|
|
||||||
assert(extent1 != NULL && extent2 != NULL);
|
|
||||||
mutex_pool_lock2(tsdn, &extent_mutex_pool, (uintptr_t)extent1,
|
|
||||||
(uintptr_t)extent2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
extent_unlock2(tsdn_t *tsdn, extent_t *extent1, extent_t *extent2) {
|
|
||||||
assert(extent1 != NULL && extent2 != NULL);
|
|
||||||
mutex_pool_unlock2(tsdn, &extent_mutex_pool, (uintptr_t)extent1,
|
|
||||||
(uintptr_t)extent2);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EXTENT_INLINES_H */
|
|
@ -1,33 +0,0 @@
|
|||||||
#ifndef JEMALLOC_INTERNAL_EXTENT_STRUCTS_H
|
|
||||||
#define JEMALLOC_INTERNAL_EXTENT_STRUCTS_H
|
|
||||||
|
|
||||||
#include "jemalloc/internal/atomic.h"
|
|
||||||
#include "jemalloc/internal/bitmap.h"
|
|
||||||
#include "jemalloc/internal/mutex.h"
|
|
||||||
#include "jemalloc/internal/ql.h"
|
|
||||||
#include "jemalloc/internal/ph.h"
|
|
||||||
#include "jemalloc/internal/sc.h"
|
|
||||||
#include "jemalloc/internal/slab_data.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following two structs are for experimental purposes. See
|
|
||||||
* experimental_utilization_query_ctl and
|
|
||||||
* experimental_utilization_batch_query_ctl in src/ctl.c.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct extent_util_stats_s {
|
|
||||||
size_t nfree;
|
|
||||||
size_t nregs;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct extent_util_stats_verbose_s {
|
|
||||||
void *slabcur_addr;
|
|
||||||
size_t nfree;
|
|
||||||
size_t nregs;
|
|
||||||
size_t size;
|
|
||||||
size_t bin_nfree;
|
|
||||||
size_t bin_nregs;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EXTENT_STRUCTS_H */
|
|
@ -1,13 +0,0 @@
|
|||||||
#ifndef JEMALLOC_INTERNAL_EXTENT_TYPES_H
|
|
||||||
#define JEMALLOC_INTERNAL_EXTENT_TYPES_H
|
|
||||||
|
|
||||||
typedef struct extent_util_stats_s extent_util_stats_t;
|
|
||||||
typedef struct extent_util_stats_verbose_s extent_util_stats_verbose_t;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* When reuse (and split) an active extent, (1U << opt_lg_extent_max_active_fit)
|
|
||||||
* is the max ratio between the size of the active extent and the new extent.
|
|
||||||
*/
|
|
||||||
#define LG_EXTENT_MAX_ACTIVE_FIT_DEFAULT 6
|
|
||||||
|
|
||||||
#endif /* JEMALLOC_INTERNAL_EXTENT_TYPES_H */
|
|
@ -40,7 +40,6 @@
|
|||||||
/* TYPES */
|
/* TYPES */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
#include "jemalloc/internal/extent_types.h"
|
|
||||||
#include "jemalloc/internal/base_types.h"
|
#include "jemalloc/internal/base_types.h"
|
||||||
#include "jemalloc/internal/arena_types.h"
|
#include "jemalloc/internal/arena_types.h"
|
||||||
#include "jemalloc/internal/tcache_types.h"
|
#include "jemalloc/internal/tcache_types.h"
|
||||||
@ -61,7 +60,6 @@
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
#include "jemalloc/internal/jemalloc_internal_externs.h"
|
#include "jemalloc/internal/jemalloc_internal_externs.h"
|
||||||
#include "jemalloc/internal/extent_externs.h"
|
|
||||||
#include "jemalloc/internal/base_externs.h"
|
#include "jemalloc/internal/base_externs.h"
|
||||||
#include "jemalloc/internal/arena_externs.h"
|
#include "jemalloc/internal/arena_externs.h"
|
||||||
#include "jemalloc/internal/large_externs.h"
|
#include "jemalloc/internal/large_externs.h"
|
||||||
@ -81,7 +79,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "jemalloc/internal/prof_inlines_a.h"
|
#include "jemalloc/internal/prof_inlines_a.h"
|
||||||
#include "jemalloc/internal/arena_inlines_a.h"
|
#include "jemalloc/internal/arena_inlines_a.h"
|
||||||
#include "jemalloc/internal/extent_inlines.h"
|
|
||||||
#include "jemalloc/internal/jemalloc_internal_inlines_b.h"
|
#include "jemalloc/internal/jemalloc_internal_inlines_b.h"
|
||||||
#include "jemalloc/internal/tcache_inlines.h"
|
#include "jemalloc/internal/tcache_inlines.h"
|
||||||
#include "jemalloc/internal/arena_inlines_b.h"
|
#include "jemalloc/internal/arena_inlines_b.h"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#ifndef JEMALLOC_INTERNAL_INLINES_B_H
|
#ifndef JEMALLOC_INTERNAL_INLINES_B_H
|
||||||
#define JEMALLOC_INTERNAL_INLINES_B_H
|
#define JEMALLOC_INTERNAL_INLINES_B_H
|
||||||
|
|
||||||
|
#include "jemalloc/internal/extent2.h"
|
||||||
#include "jemalloc/internal/rtree.h"
|
#include "jemalloc/internal/rtree.h"
|
||||||
|
|
||||||
/* Choose an arena based on a per-thread value. */
|
/* Choose an arena based on a per-thread value. */
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\ehooks.c" />
|
<ClCompile Include="..\..\..\..\src\ehooks.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\eset.c" />
|
<ClCompile Include="..\..\..\..\src\eset.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent.c" />
|
<ClCompile Include="..\..\..\..\src\extent.c" />
|
||||||
|
<ClCompile Include="..\..\..\..\src\extent2.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent_dss.c" />
|
<ClCompile Include="..\..\..\..\src\extent_dss.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent_mmap.c" />
|
<ClCompile Include="..\..\..\..\src\extent_mmap.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\hash.c" />
|
<ClCompile Include="..\..\..\..\src\hash.c" />
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
<ClCompile Include="..\..\..\..\src\ehooks.c" />
|
<ClCompile Include="..\..\..\..\src\ehooks.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\eset.c" />
|
<ClCompile Include="..\..\..\..\src\eset.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent.c" />
|
<ClCompile Include="..\..\..\..\src\extent.c" />
|
||||||
|
<ClCompile Include="..\..\..\..\src\extent2.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent_dss.c" />
|
<ClCompile Include="..\..\..\..\src\extent_dss.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\extent_mmap.c" />
|
<ClCompile Include="..\..\..\..\src\extent_mmap.c" />
|
||||||
<ClCompile Include="..\..\..\..\src\hash.c" />
|
<ClCompile Include="..\..\..\..\src\hash.c" />
|
||||||
|
1718
src/extent.c
1718
src/extent.c
File diff suppressed because it is too large
Load Diff
1738
src/extent2.c
Normal file
1738
src/extent2.c
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user