]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/jemalloc/include/jemalloc/internal/background_thread_structs.h
MFV r353143 (phillip):
[FreeBSD/FreeBSD.git] / contrib / jemalloc / include / jemalloc / internal / background_thread_structs.h
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 */