Skip to content

Commit 31730c1

Browse files
committed
merge
2 parents fda3834 + 8773c15 commit 31730c1

File tree

209 files changed

+59312
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

209 files changed

+59312
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//===----------------------------------------------------------------------===//
2+
// DuckDB
3+
//
4+
// jemalloc_extension.hpp
5+
//
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#pragma once
10+
11+
#include "duckdb.hpp"
12+
13+
namespace duckdb {
14+
15+
class JemallocExtension : public Extension {
16+
public:
17+
void Load(DuckDB &db) override;
18+
std::string Name() override;
19+
std::string Version() const override;
20+
21+
static data_ptr_t Allocate(PrivateAllocatorData *private_data, idx_t size);
22+
static void Free(PrivateAllocatorData *private_data, data_ptr_t pointer, idx_t size);
23+
static data_ptr_t Reallocate(PrivateAllocatorData *private_data, data_ptr_t pointer, idx_t old_size, idx_t size);
24+
25+
static int64_t DecayDelay();
26+
static void ThreadFlush(idx_t threshold);
27+
static void ThreadIdle();
28+
static void FlushAll();
29+
static void SetBackgroundThreads(bool enable);
30+
};
31+
32+
} // namespace duckdb
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//===----------------------------------------------------------------------===//
2+
// DuckDB
3+
//
4+
// malloc_ncpus.h
5+
//
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef MALLOC_NCPUS_H
10+
#define MALLOC_NCPUS_H
11+
12+
#ifdef __cplusplus
13+
extern "C" {
14+
#endif
15+
16+
unsigned duckdb_malloc_ncpus();
17+
18+
#ifdef __cplusplus
19+
}
20+
#endif
21+
22+
#endif // MALLOC_NCPUS_H
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef JEMALLOC_INTERNAL_ACTIVITY_CALLBACK_H
2+
#define JEMALLOC_INTERNAL_ACTIVITY_CALLBACK_H
3+
4+
#include "jemalloc/internal/jemalloc_preamble.h"
5+
6+
/*
7+
* The callback to be executed "periodically", in response to some amount of
8+
* allocator activity.
9+
*
10+
* This callback need not be computing any sort of peak (although that's the
11+
* intended first use case), but we drive it from the peak counter, so it's
12+
* keeps things tidy to keep it here.
13+
*
14+
* The calls to this thunk get driven by the peak_event module.
15+
*/
16+
#define ACTIVITY_CALLBACK_THUNK_INITIALIZER {NULL, NULL}
17+
typedef void (*activity_callback_t)(void *uctx, uint64_t allocated,
18+
uint64_t deallocated);
19+
typedef struct activity_callback_thunk_s activity_callback_thunk_t;
20+
struct activity_callback_thunk_s {
21+
activity_callback_t callback;
22+
void *uctx;
23+
};
24+
25+
#endif /* JEMALLOC_INTERNAL_ACTIVITY_CALLBACK_H */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
#ifndef JEMALLOC_INTERNAL_ARENA_EXTERNS_H
2+
#define JEMALLOC_INTERNAL_ARENA_EXTERNS_H
3+
4+
#include "jemalloc/internal/jemalloc_preamble.h"
5+
#include "jemalloc/internal/arena_stats.h"
6+
#include "jemalloc/internal/bin.h"
7+
#include "jemalloc/internal/div.h"
8+
#include "jemalloc/internal/emap.h"
9+
#include "jemalloc/internal/extent_dss.h"
10+
#include "jemalloc/internal/hook.h"
11+
#include "jemalloc/internal/pages.h"
12+
#include "jemalloc/internal/stats.h"
13+
14+
/*
15+
* When the amount of pages to be purged exceeds this amount, deferred purge
16+
* should happen.
17+
*/
18+
#define ARENA_DEFERRED_PURGE_NPAGES_THRESHOLD UINT64_C(1024)
19+
20+
extern ssize_t opt_dirty_decay_ms;
21+
extern ssize_t opt_muzzy_decay_ms;
22+
23+
extern percpu_arena_mode_t opt_percpu_arena;
24+
extern const char *const percpu_arena_mode_names[];
25+
26+
extern div_info_t arena_binind_div_info[SC_NBINS];
27+
28+
extern emap_t arena_emap_global;
29+
30+
extern size_t opt_oversize_threshold;
31+
extern size_t oversize_threshold;
32+
33+
/*
34+
* arena_bin_offsets[binind] is the offset of the first bin shard for size class
35+
* binind.
36+
*/
37+
extern uint32_t arena_bin_offsets[SC_NBINS];
38+
39+
void arena_basic_stats_merge(tsdn_t *tsdn, arena_t *arena,
40+
unsigned *nthreads, const char **dss, ssize_t *dirty_decay_ms,
41+
ssize_t *muzzy_decay_ms, size_t *nactive, size_t *ndirty, size_t *nmuzzy);
42+
void arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
43+
const char **dss, ssize_t *dirty_decay_ms, ssize_t *muzzy_decay_ms,
44+
size_t *nactive, size_t *ndirty, size_t *nmuzzy, arena_stats_t *astats,
45+
bin_stats_data_t *bstats, arena_stats_large_t *lstats,
46+
pac_estats_t *estats, hpa_shard_stats_t *hpastats, sec_stats_t *secstats);
47+
void arena_handle_deferred_work(tsdn_t *tsdn, arena_t *arena);
48+
edata_t *arena_extent_alloc_large(tsdn_t *tsdn, arena_t *arena,
49+
size_t usize, size_t alignment, bool zero);
50+
void arena_extent_dalloc_large_prep(tsdn_t *tsdn, arena_t *arena,
51+
edata_t *edata);
52+
void arena_extent_ralloc_large_shrink(tsdn_t *tsdn, arena_t *arena,
53+
edata_t *edata, size_t oldusize);
54+
void arena_extent_ralloc_large_expand(tsdn_t *tsdn, arena_t *arena,
55+
edata_t *edata, size_t oldusize);
56+
bool arena_decay_ms_set(tsdn_t *tsdn, arena_t *arena, extent_state_t state,
57+
ssize_t decay_ms);
58+
ssize_t arena_decay_ms_get(arena_t *arena, extent_state_t state);
59+
void arena_decay(tsdn_t *tsdn, arena_t *arena, bool is_background_thread,
60+
bool all);
61+
uint64_t arena_time_until_deferred(tsdn_t *tsdn, arena_t *arena);
62+
void arena_do_deferred_work(tsdn_t *tsdn, arena_t *arena);
63+
void arena_reset(tsd_t *tsd, arena_t *arena);
64+
void arena_destroy(tsd_t *tsd, arena_t *arena);
65+
void arena_cache_bin_fill_small(tsdn_t *tsdn, arena_t *arena,
66+
cache_bin_t *cache_bin, szind_t binind, const cache_bin_sz_t nfill);
67+
68+
void *arena_malloc_hard(tsdn_t *tsdn, arena_t *arena, size_t size,
69+
szind_t ind, bool zero, bool slab);
70+
void *arena_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize,
71+
size_t alignment, bool zero, bool slab, tcache_t *tcache);
72+
void arena_prof_promote(tsdn_t *tsdn, void *ptr, size_t usize,
73+
size_t bumped_usize);
74+
void arena_dalloc_promoted(tsdn_t *tsdn, void *ptr, tcache_t *tcache,
75+
bool slow_path);
76+
void arena_slab_dalloc(tsdn_t *tsdn, arena_t *arena, edata_t *slab);
77+
78+
void arena_dalloc_bin_locked_handle_newly_empty(tsdn_t *tsdn, arena_t *arena,
79+
edata_t *slab, bin_t *bin);
80+
void arena_dalloc_bin_locked_handle_newly_nonempty(tsdn_t *tsdn, arena_t *arena,
81+
edata_t *slab, bin_t *bin);
82+
void arena_dalloc_small(tsdn_t *tsdn, void *ptr);
83+
bool arena_ralloc_no_move(tsdn_t *tsdn, void *ptr, size_t oldsize, size_t size,
84+
size_t extra, bool zero, size_t *newsize);
85+
void *arena_ralloc(tsdn_t *tsdn, arena_t *arena, void *ptr, size_t oldsize,
86+
size_t size, size_t alignment, bool zero, bool slab, tcache_t *tcache,
87+
hook_ralloc_args_t *hook_args);
88+
dss_prec_t arena_dss_prec_get(arena_t *arena);
89+
ehooks_t *arena_get_ehooks(arena_t *arena);
90+
extent_hooks_t *arena_set_extent_hooks(tsd_t *tsd, arena_t *arena,
91+
extent_hooks_t *extent_hooks);
92+
bool arena_dss_prec_set(arena_t *arena, dss_prec_t dss_prec);
93+
void arena_name_get(arena_t *arena, char *name);
94+
void arena_name_set(arena_t *arena, const char *name);
95+
ssize_t arena_dirty_decay_ms_default_get(void);
96+
bool arena_dirty_decay_ms_default_set(ssize_t decay_ms);
97+
ssize_t arena_muzzy_decay_ms_default_get(void);
98+
bool arena_muzzy_decay_ms_default_set(ssize_t decay_ms);
99+
bool arena_retain_grow_limit_get_set(tsd_t *tsd, arena_t *arena,
100+
size_t *old_limit, size_t *new_limit);
101+
unsigned arena_nthreads_get(arena_t *arena, bool internal);
102+
void arena_nthreads_inc(arena_t *arena, bool internal);
103+
void arena_nthreads_dec(arena_t *arena, bool internal);
104+
arena_t *arena_new(tsdn_t *tsdn, unsigned ind, const arena_config_t *config);
105+
bool arena_init_huge(arena_t *a0);
106+
arena_t *arena_choose_huge(tsd_t *tsd);
107+
bin_t *arena_bin_choose(tsdn_t *tsdn, arena_t *arena, szind_t binind,
108+
unsigned *binshard);
109+
size_t arena_fill_small_fresh(tsdn_t *tsdn, arena_t *arena, szind_t binind,
110+
void **ptrs, size_t nfill, bool zero);
111+
bool arena_boot(sc_data_t *sc_data, base_t *base, bool hpa);
112+
void arena_prefork0(tsdn_t *tsdn, arena_t *arena);
113+
void arena_prefork1(tsdn_t *tsdn, arena_t *arena);
114+
void arena_prefork2(tsdn_t *tsdn, arena_t *arena);
115+
void arena_prefork3(tsdn_t *tsdn, arena_t *arena);
116+
void arena_prefork4(tsdn_t *tsdn, arena_t *arena);
117+
void arena_prefork5(tsdn_t *tsdn, arena_t *arena);
118+
void arena_prefork6(tsdn_t *tsdn, arena_t *arena);
119+
void arena_prefork7(tsdn_t *tsdn, arena_t *arena);
120+
void arena_prefork8(tsdn_t *tsdn, arena_t *arena);
121+
void arena_postfork_parent(tsdn_t *tsdn, arena_t *arena);
122+
void arena_postfork_child(tsdn_t *tsdn, arena_t *arena);
123+
124+
#endif /* JEMALLOC_INTERNAL_ARENA_EXTERNS_H */
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef JEMALLOC_INTERNAL_ARENA_INLINES_A_H
2+
#define JEMALLOC_INTERNAL_ARENA_INLINES_A_H
3+
4+
#include "jemalloc/internal/jemalloc_preamble.h"
5+
#include "jemalloc/internal/arena_structs.h"
6+
7+
static inline unsigned
8+
arena_ind_get(const arena_t *arena) {
9+
return arena->ind;
10+
}
11+
12+
static inline void
13+
arena_internal_add(arena_t *arena, size_t size) {
14+
atomic_fetch_add_zu(&arena->stats.internal, size, ATOMIC_RELAXED);
15+
}
16+
17+
static inline void
18+
arena_internal_sub(arena_t *arena, size_t size) {
19+
atomic_fetch_sub_zu(&arena->stats.internal, size, ATOMIC_RELAXED);
20+
}
21+
22+
static inline size_t
23+
arena_internal_get(arena_t *arena) {
24+
return atomic_load_zu(&arena->stats.internal, ATOMIC_RELAXED);
25+
}
26+
27+
#endif /* JEMALLOC_INTERNAL_ARENA_INLINES_A_H */

0 commit comments

Comments
 (0)