Line data Source code
1 : #ifndef HEADER_fd_src_disco_wksp_fd_wksp_mon_h 2 : #define HEADER_fd_src_disco_wksp_fd_wksp_mon_h 3 : 4 : /* fd_wksp_mon incrementally scans fd_wksp partitions lockfree to 5 : track space utilization. */ 6 : 7 : #include "../../util/wksp/fd_wksp.h" 8 : 9 0 : #define FD_WKSP_MON_BURST_MAX (4096UL) 10 0 : #define FD_WKSP_MON_DEFAULT_RATE (10UL<<20) /* 10 MB/s */ 11 : 12 : struct fd_wksp_mon { 13 : fd_wksp_t * wksp; 14 : ulong part_max; 15 : ulong ticks_per_part; 16 : 17 : ulong scan_idx; 18 : long last_tick; 19 : long tick_rem; 20 : 21 : ulong acc_free_cnt; 22 : ulong acc_free_sz; 23 : ulong acc_free_max_sz; 24 : ulong acc_used_cnt; 25 : ulong acc_used_sz; 26 : ulong acc_used_hist[64]; /* log2-bucketed used partition sizes */ 27 : 28 : ulong free_cnt; 29 : ulong free_sz; 30 : ulong free_max_sz; 31 : ulong part_median_sz; 32 : ulong part_mean_sz; 33 : ulong sweep_cnt; 34 : }; 35 : 36 : typedef struct fd_wksp_mon fd_wksp_mon_t; 37 : 38 : FD_PROTOTYPES_BEGIN 39 : 40 : /* fd_wksp_mon_init starts monitoring wksp. bytes_per_sec controls the 41 : pinfo scan rate (use FD_WKSP_MON_DEFAULT_RATE for 10 MB/s). 42 : Internally converts to ticks_per_part via fd_tempo_tick_per_ns. 43 : now is fd_tickcount(). */ 44 : 45 : fd_wksp_mon_t * 46 : fd_wksp_mon_init( fd_wksp_mon_t * mon, 47 : fd_wksp_t * wksp, 48 : ulong bytes_per_sec, 49 : long now ); 50 : 51 : void * 52 : fd_wksp_mon_fini( fd_wksp_mon_t * mon ); 53 : 54 : /* fd_wksp_mon_tick does incremental scanning. Call with now from 55 : fd_tickcount(). Scans a rate-limited burst of partitions per call. 56 : Publishes metrics when a full sweep completes. */ 57 : 58 : fd_wksp_mon_t * 59 : fd_wksp_mon_tick( fd_wksp_mon_t * mon, 60 : long now ); 61 : 62 : FD_PROTOTYPES_END 63 : 64 : #endif /* HEADER_fd_src_disco_wksp_fd_wksp_mon_h */