1b7eaed25SJason Evans #ifndef JEMALLOC_INTERNAL_TCACHE_EXTERNS_H 2b7eaed25SJason Evans #define JEMALLOC_INTERNAL_TCACHE_EXTERNS_H 3b7eaed25SJason Evans 4b7eaed25SJason Evans extern bool opt_tcache; 5b7eaed25SJason Evans extern ssize_t opt_lg_tcache_max; 6b7eaed25SJason Evans 70ef50b4eSJason Evans extern cache_bin_info_t *tcache_bin_info; 8b7eaed25SJason Evans 9b7eaed25SJason Evans /* 10c5ad8142SEric van Gyzen * Number of tcache bins. There are SC_NBINS small-object bins, plus 0 or more 11b7eaed25SJason Evans * large-object bins. 12b7eaed25SJason Evans */ 13b7eaed25SJason Evans extern unsigned nhbins; 14b7eaed25SJason Evans 15b7eaed25SJason Evans /* Maximum cached size class. */ 16b7eaed25SJason Evans extern size_t tcache_maxclass; 17b7eaed25SJason Evans 18b7eaed25SJason Evans /* 19b7eaed25SJason Evans * Explicit tcaches, managed via the tcache.{create,flush,destroy} mallctls and 20b7eaed25SJason Evans * usable via the MALLOCX_TCACHE() flag. The automatic per thread tcaches are 21b7eaed25SJason Evans * completely disjoint from this data structure. tcaches starts off as a sparse 22b7eaed25SJason Evans * array, so it has no physical memory footprint until individual pages are 23b7eaed25SJason Evans * touched. This allows the entire array to be allocated the first time an 24b7eaed25SJason Evans * explicit tcache is created without a disproportionate impact on memory usage. 25b7eaed25SJason Evans */ 26b7eaed25SJason Evans extern tcaches_t *tcaches; 27b7eaed25SJason Evans 28b7eaed25SJason Evans size_t tcache_salloc(tsdn_t *tsdn, const void *ptr); 29b7eaed25SJason Evans void tcache_event_hard(tsd_t *tsd, tcache_t *tcache); 30b7eaed25SJason Evans void *tcache_alloc_small_hard(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache, 310ef50b4eSJason Evans cache_bin_t *tbin, szind_t binind, bool *tcache_success); 320ef50b4eSJason Evans void tcache_bin_flush_small(tsd_t *tsd, tcache_t *tcache, cache_bin_t *tbin, 33b7eaed25SJason Evans szind_t binind, unsigned rem); 340ef50b4eSJason Evans void tcache_bin_flush_large(tsd_t *tsd, cache_bin_t *tbin, szind_t binind, 35b7eaed25SJason Evans unsigned rem, tcache_t *tcache); 36b7eaed25SJason Evans void tcache_arena_reassociate(tsdn_t *tsdn, tcache_t *tcache, 37b7eaed25SJason Evans arena_t *arena); 38b7eaed25SJason Evans tcache_t *tcache_create_explicit(tsd_t *tsd); 39b7eaed25SJason Evans void tcache_cleanup(tsd_t *tsd); 40b7eaed25SJason Evans void tcache_stats_merge(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena); 41b7eaed25SJason Evans bool tcaches_create(tsd_t *tsd, unsigned *r_ind); 42b7eaed25SJason Evans void tcaches_flush(tsd_t *tsd, unsigned ind); 43b7eaed25SJason Evans void tcaches_destroy(tsd_t *tsd, unsigned ind); 44b7eaed25SJason Evans bool tcache_boot(tsdn_t *tsdn); 45b7eaed25SJason Evans void tcache_arena_associate(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena); 46b7eaed25SJason Evans void tcache_prefork(tsdn_t *tsdn); 47b7eaed25SJason Evans void tcache_postfork_parent(tsdn_t *tsdn); 48b7eaed25SJason Evans void tcache_postfork_child(tsdn_t *tsdn); 498b2f5aafSJason Evans void tcache_flush(tsd_t *tsd); 50b7eaed25SJason Evans bool tsd_tcache_data_init(tsd_t *tsd); 51b7eaed25SJason Evans bool tsd_tcache_enabled_data_init(tsd_t *tsd); 52b7eaed25SJason Evans 53b7eaed25SJason Evans #endif /* JEMALLOC_INTERNAL_TCACHE_EXTERNS_H */ 54