1 | #ifndef JEMALLOC_INTERNAL_BACKGROUND_THREAD_STRUCTS_H |
2 | #define JEMALLOC_INTERNAL_BACKGROUND_THREAD_STRUCTS_H |
3 | |
4 | /* This file really combines "structs" and "types", but only transitionally. */ |
5 | |
6 | #if defined(JEMALLOC_BACKGROUND_THREAD) || defined(JEMALLOC_LAZY_LOCK) |
7 | # define JEMALLOC_PTHREAD_CREATE_WRAPPER |
8 | #endif |
9 | |
10 | #define BACKGROUND_THREAD_INDEFINITE_SLEEP UINT64_MAX |
11 | #define MAX_BACKGROUND_THREAD_LIMIT MALLOCX_ARENA_LIMIT |
12 | |
13 | typedef enum { |
14 | background_thread_stopped, |
15 | background_thread_started, |
16 | /* Thread waits on the global lock when paused (for arena_reset). */ |
17 | background_thread_paused, |
18 | } background_thread_state_t; |
19 | |
20 | struct background_thread_info_s { |
21 | #ifdef JEMALLOC_BACKGROUND_THREAD |
22 | /* Background thread is pthread specific. */ |
23 | pthread_t thread; |
24 | pthread_cond_t cond; |
25 | #endif |
26 | malloc_mutex_t mtx; |
27 | background_thread_state_t state; |
28 | /* When true, it means no wakeup scheduled. */ |
29 | atomic_b_t indefinite_sleep; |
30 | /* Next scheduled wakeup time (absolute time in ns). */ |
31 | nstime_t next_wakeup; |
32 | /* |
33 | * Since the last background thread run, newly added number of pages |
34 | * that need to be purged by the next wakeup. This is adjusted on |
35 | * epoch advance, and is used to determine whether we should signal the |
36 | * background thread to wake up earlier. |
37 | */ |
38 | size_t npages_to_purge_new; |
39 | /* Stats: total number of runs since started. */ |
40 | uint64_t tot_n_runs; |
41 | /* Stats: total sleep time since started. */ |
42 | nstime_t tot_sleep_time; |
43 | }; |
44 | typedef struct background_thread_info_s background_thread_info_t; |
45 | |
46 | struct background_thread_stats_s { |
47 | size_t num_threads; |
48 | uint64_t num_runs; |
49 | nstime_t run_interval; |
50 | }; |
51 | typedef struct background_thread_stats_s background_thread_stats_t; |
52 | |
53 | #endif /* JEMALLOC_INTERNAL_BACKGROUND_THREAD_STRUCTS_H */ |
54 | |