master
h 78 lines 2.99 KB
Raw
1 #ifndef WORKER_UTILIZATION_H
2 #define WORKER_UTILIZATION_H 1
3
4 #include "../libnetdata.h"
5
6 // workers interfaces
7
8 #define WORKER_UTILIZATION_MAX_JOB_TYPES 80
9 #define WORKER_SPINLOCK_CONTENTION_FUNCTIONS 200
10
11 typedef enum __attribute__((packed)) {
12 WORKER_METRIC_EMPTY = 0,
13 WORKER_METRIC_IDLE_BUSY = 1,
14 WORKER_METRIC_ABSOLUTE = 2,
15 WORKER_METRIC_INCREMENT = 3,
16 WORKER_METRIC_INCREMENTAL_TOTAL = 4,
17 } WORKER_METRIC_TYPE;
18
19 typedef enum {
20 WORKERS_MEMORY_CALL_LIBC_MALLOC = 0,
21 WORKERS_MEMORY_CALL_LIBC_CALLOC,
22 WORKERS_MEMORY_CALL_LIBC_REALLOC,
23 WORKERS_MEMORY_CALL_LIBC_FREE,
24 WORKERS_MEMORY_CALL_LIBC_STRDUP,
25 WORKERS_MEMORY_CALL_LIBC_STRNDUP,
26 WORKERS_MEMORY_CALL_LIBC_POSIX_MEMALIGN,
27 WORKERS_MEMORY_CALL_LIBC_POSIX_MEMALIGN_FREE,
28 WORKERS_MEMORY_CALL_MMAP,
29 WORKERS_MEMORY_CALL_MUNMAP,
30
31 // terminator
32 WORKERS_MEMORY_CALL_MAX,
33 } WORKERS_MEMORY_CALL;
34
35 ENUM_STR_DEFINE_FUNCTIONS_EXTERN(WORKERS_MEMORY_CALL);
36
37 void workers_memory_call(WORKERS_MEMORY_CALL call);
38
39 void workers_utilization_enable(void);
40 size_t workers_allocated_memory(void);
41 void worker_register(const char *name);
42 void worker_register_job_name(size_t job_id, const char *name);
43 void worker_register_job_custom_metric(size_t job_id, const char *name, const char *units, WORKER_METRIC_TYPE type);
44 void worker_unregister(void);
45 void worker_utilization_cleanup(void);
46
47 size_t workers_get_last_job_id();
48
49 void worker_is_idle(void);
50 void worker_is_busy(size_t job_id);
51 void worker_set_metric(size_t job_id, NETDATA_DOUBLE value);
52 void worker_spinlock_contention(const char *func, size_t spins);
53
54 // statistics interface
55
56 void workers_foreach(const char *name, void (*callback)(
57 void *data
58 , pid_t pid
59 , const char *thread_tag
60 , size_t max_job_id
61 , size_t utilization_usec
62 , size_t duration_usec
63 , size_t jobs_started
64 , size_t is_running
65 , STRING **job_types_names
66 , STRING **job_types_units
67 , WORKER_METRIC_TYPE *job_metric_types
68 , size_t *job_types_jobs_started
69 , usec_t *job_types_busy_time
70 , NETDATA_DOUBLE *job_custom_values
71 , const char *spinlock_functions[]
72 , size_t *spinlock_locks
73 , size_t *spinlock_spins
74 , uint64_t *memory_calls
75 )
76 , void *data);
77
78 #endif // WORKER_UTILIZATION_H