Poll statistics moved to worker
Each worker now has a separate structure for collecting the polling statistics that is passed to epoll_waitevents(). When the stats are asked for, we loop over all separate stats and combine them. So, instead of having every statistics of each thread one cacheline apart, each thread has all its statistics in one lump that, for obvious reasons, are going to be apart. The primary purpose of this excersize is to remove the hardwired nature of the statistics collection. For instance, the admin thread will be doing I/O but that I/O should not be included in the statistics of the workers.
This commit is contained in:
@ -81,6 +81,39 @@ typedef struct
|
||||
|
||||
extern THREAD_DATA *thread_data;
|
||||
|
||||
// TODO: Temporarily moved here.
|
||||
/**
|
||||
* The number of buckets used to gather statistics about how many
|
||||
* descriptors where processed on each epoll completion.
|
||||
*
|
||||
* An array of wakeup counts is created, with the number of descriptors used
|
||||
* to index that array. Each time a completion occurs the n_fds - 1 value is
|
||||
* used to index this array and increment the count held there.
|
||||
* If n_fds - 1 >= MAXFDS then the count at MAXFDS -1 is incremented.
|
||||
*/
|
||||
#define MAXNFDS 10
|
||||
|
||||
// TODO: Temporarily moved here.
|
||||
typedef struct
|
||||
{
|
||||
int64_t n_read; /*< Number of read events */
|
||||
int64_t n_write; /*< Number of write events */
|
||||
int64_t n_error; /*< Number of error events */
|
||||
int64_t n_hup; /*< Number of hangup events */
|
||||
int64_t n_accept; /*< Number of accept events */
|
||||
int64_t n_polls; /*< Number of poll cycles */
|
||||
int64_t n_pollev; /*< Number of polls returning events */
|
||||
int64_t n_nbpollev; /*< Number of polls returning events */
|
||||
int64_t n_nothreads; /*< Number of times no threads are polling */
|
||||
int32_t n_fds[MAXNFDS]; /*< Number of wakeups with particular n_fds value */
|
||||
int64_t evq_length; /*< Event queue length */
|
||||
int64_t evq_max; /*< Maximum event queue length */
|
||||
int64_t blockingpolls; /*< Number of epoll_waits with a timeout specified */
|
||||
} POLL_STATS;
|
||||
|
||||
// TODO: Temporarily moved here.
|
||||
extern POLL_STATS* pollStats;
|
||||
|
||||
/**
|
||||
* A file descriptor should be added to the poll set of all workers.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user