1 /* (c) 2009 Jerome Loyet */ 2 3 #ifndef FPM_SCOREBOARD_H 4 #define FPM_SCOREBOARD_H 1 5 6 #include <sys/time.h> 7 #ifdef HAVE_TIMES 8 #include <sys/times.h> 9 #endif 10 11 #include "fpm_request.h" 12 #include "fpm_worker_pool.h" 13 #include "fpm_atomic.h" 14 15 #define FPM_SCOREBOARD_ACTION_SET 0 16 #define FPM_SCOREBOARD_ACTION_INC 1 17 18 #define FPM_SCOREBOARD_LOCK_HANG 0 19 #define FPM_SCOREBOARD_LOCK_NOHANG 1 20 21 struct fpm_scoreboard_proc_s { 22 union { 23 atomic_t lock; 24 char dummy[16]; 25 }; 26 int used; 27 time_t start_epoch; 28 pid_t pid; 29 unsigned long requests; 30 enum fpm_request_stage_e request_stage; 31 struct timeval accepted; 32 struct timeval duration; 33 time_t accepted_epoch; 34 struct timeval tv; 35 char request_uri[128]; 36 char query_string[512]; 37 char request_method[16]; 38 size_t content_length; /* used with POST only */ 39 char script_filename[256]; 40 char auth_user[32]; 41 #ifdef HAVE_TIMES 42 struct tms cpu_accepted; 43 struct timeval cpu_duration; 44 struct tms last_request_cpu; 45 struct timeval last_request_cpu_duration; 46 #endif 47 size_t memory; 48 }; 49 50 struct fpm_scoreboard_s { 51 union { 52 atomic_t lock; 53 char dummy[16]; 54 }; 55 char pool[32]; 56 int pm; 57 time_t start_epoch; 58 int idle; 59 int active; 60 int active_max; 61 unsigned long int requests; 62 unsigned int max_children_reached; 63 int lq; 64 int lq_max; 65 unsigned int lq_len; 66 unsigned int nprocs; 67 int free_proc; 68 unsigned long int slow_rq; 69 size_t memory_peak; 70 struct fpm_scoreboard_s *shared; 71 struct fpm_scoreboard_proc_s procs[] ZEND_ELEMENT_COUNT(nprocs); 72 }; 73 74 int fpm_scoreboard_init_main(void); 75 int fpm_scoreboard_init_child(struct fpm_worker_pool_s *wp); 76 77 void fpm_scoreboard_update_begin(struct fpm_scoreboard_s *scoreboard); 78 void fpm_scoreboard_update_commit(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, size_t memory_max, int action, struct fpm_scoreboard_s *scoreboard); 79 void fpm_scoreboard_update(int idle, int active, int lq, int lq_len, int requests, int max_children_reached, int slow_rq, size_t memory_max, int action, struct fpm_scoreboard_s *scoreboard); 80 81 struct fpm_scoreboard_s *fpm_scoreboard_get(void); 82 struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get(struct fpm_scoreboard_s *scoreboard, int child_index); 83 struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_get_from_child(struct fpm_child_s *child); 84 85 struct fpm_scoreboard_s *fpm_scoreboard_acquire(struct fpm_scoreboard_s *scoreboard, int nohang); 86 void fpm_scoreboard_release(struct fpm_scoreboard_s *scoreboard); 87 struct fpm_scoreboard_proc_s *fpm_scoreboard_proc_acquire(struct fpm_scoreboard_s *scoreboard, int child_index, int nohang); 88 void fpm_scoreboard_proc_release(struct fpm_scoreboard_proc_s *proc); 89 90 void fpm_scoreboard_free(struct fpm_worker_pool_s *wp); 91 92 void fpm_scoreboard_child_use(struct fpm_child_s *child, pid_t pid); 93 94 void fpm_scoreboard_proc_free(struct fpm_child_s *child); 95 int fpm_scoreboard_proc_alloc(struct fpm_child_s *child); 96 97 struct fpm_scoreboard_s *fpm_scoreboard_copy(struct fpm_scoreboard_s *scoreboard, int copy_procs); 98 void fpm_scoreboard_free_copy(struct fpm_scoreboard_s *scoreboard); 99 100 #ifdef HAVE_TIMES 101 float fpm_scoreboard_get_tick(void); 102 #endif 103 104 #endif 105