| 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 |