60 lines
1.2 KiB
C
60 lines
1.2 KiB
C
#ifndef FIO_IDLETIME_H
|
|
#define FIO_IDLETIME_H
|
|
|
|
#include "fio.h"
|
|
#include "lib/output_buffer.h"
|
|
|
|
#define CALIBRATE_RUNS 10
|
|
#define CALIBRATE_SCALE 1000
|
|
#define MAX_CPU_STR_LEN 32
|
|
|
|
enum {
|
|
IDLE_PROF_OPT_NONE,
|
|
IDLE_PROF_OPT_CALI, /* calibration only */
|
|
IDLE_PROF_OPT_SYSTEM,
|
|
IDLE_PROF_OPT_PERCPU
|
|
};
|
|
|
|
enum {
|
|
IDLE_PROF_STATUS_OK,
|
|
IDLE_PROF_STATUS_CALI_STOP,
|
|
IDLE_PROF_STATUS_PROF_STOP,
|
|
IDLE_PROF_STATUS_ABORT
|
|
};
|
|
|
|
struct idle_prof_thread {
|
|
pthread_t thread;
|
|
int cpu;
|
|
int state;
|
|
struct timeval tps;
|
|
struct timeval tpe;
|
|
double cali_time; /* microseconds to finish a unit work */
|
|
double loops;
|
|
double idleness;
|
|
unsigned char *data; /* bytes to be touched */
|
|
pthread_cond_t cond;
|
|
pthread_mutex_t init_lock;
|
|
pthread_mutex_t start_lock;
|
|
|
|
os_cpu_mask_t cpu_mask;
|
|
};
|
|
|
|
struct idle_prof_common {
|
|
struct idle_prof_thread *ipts;
|
|
int nr_cpus;
|
|
int status;
|
|
int opt;
|
|
double cali_mean;
|
|
double cali_stddev;
|
|
void *buf; /* single data allocation for all threads */
|
|
};
|
|
|
|
extern int fio_idle_prof_parse_opt(const char *);
|
|
|
|
extern void fio_idle_prof_init(void);
|
|
extern void fio_idle_prof_start(void);
|
|
extern void fio_idle_prof_stop(void);
|
|
|
|
extern void show_idle_prof_stats(int, struct json_object *, struct buf_output *);
|
|
|
|
#endif
|