Skip to content

Commit

Permalink
gettime-thread: set and allow multiple CPUs
Browse files Browse the repository at this point in the history
Also use the new option checking framework instead of carrying
a flag for whether it's set or not.

Signed-off-by: Jens Axboe <[email protected]>
  • Loading branch information
axboe committed Dec 17, 2014
1 parent 80fa052 commit 79c896a
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 25 deletions.
2 changes: 0 additions & 2 deletions cconv.c
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,6 @@ void convert_thread_options_to_cpu(struct thread_options *o,
o->unified_rw_rep = le32_to_cpu(top->unified_rw_rep);
o->gtod_reduce = le32_to_cpu(top->gtod_reduce);
o->gtod_cpu = le32_to_cpu(top->gtod_cpu);
o->gtod_offload = le32_to_cpu(top->gtod_offload);
o->clocksource = le32_to_cpu(top->clocksource);
o->no_stall = le32_to_cpu(top->no_stall);
o->trim_percentage = le32_to_cpu(top->trim_percentage);
Expand Down Expand Up @@ -381,7 +380,6 @@ void convert_thread_options_to_net(struct thread_options_pack *top,
top->unified_rw_rep = cpu_to_le32(o->unified_rw_rep);
top->gtod_reduce = cpu_to_le32(o->gtod_reduce);
top->gtod_cpu = cpu_to_le32(o->gtod_cpu);
top->gtod_offload = cpu_to_le32(o->gtod_offload);
top->clocksource = cpu_to_le32(o->clocksource);
top->no_stall = cpu_to_le32(o->no_stall);
top->trim_percentage = cpu_to_le32(o->trim_percentage);
Expand Down
16 changes: 14 additions & 2 deletions gettime-thread.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,14 @@

struct timeval *fio_tv = NULL;
int fio_gtod_offload = 0;
int fio_gtod_cpu = -1;
static os_cpu_mask_t fio_gtod_cpumask;
static pthread_t gtod_thread;

void fio_gtod_init(void)
{
if (fio_tv)
return;

fio_tv = smalloc(sizeof(struct timeval));
if (!fio_tv)
log_err("fio: smalloc pool exhausted\n");
Expand All @@ -31,10 +34,16 @@ static void fio_gtod_update(void)
}
}

struct gtod_cpu_data {
struct fio_mutex *mutex;
unsigned int cpu;
};

static void *gtod_thread_main(void *data)
{
struct fio_mutex *mutex = data;

fio_setaffinity(gettid(), fio_gtod_cpumask);
fio_mutex_up(mutex);

/*
Expand Down Expand Up @@ -84,4 +93,7 @@ int fio_start_gtod_thread(void)
return ret;
}


void fio_gtod_set_cpu(unsigned int cpu)
{
fio_cpu_set(&fio_gtod_cpumask, cpu);
}
2 changes: 2 additions & 0 deletions gettime.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,6 @@ static inline int fio_gettime_offload(struct timeval *tv)
return 1;
}

extern void fio_gtod_set_cpu(unsigned int cpu);

#endif
12 changes: 6 additions & 6 deletions init.c
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,12 @@ static int fixup_options(struct thread_data *td)
ret = 1;
}

if (fio_option_is_set(o, gtod_cpu)) {
fio_gtod_init();
fio_gtod_set_cpu(o->gtod_cpu);
fio_gtod_offload = 1;
}

return ret;
}

Expand Down Expand Up @@ -2385,12 +2391,6 @@ int parse_options(int argc, char *argv[])
return 0;
}

if (def_thread.o.gtod_offload) {
fio_gtod_init();
fio_gtod_offload = 1;
fio_gtod_cpu = def_thread.o.gtod_cpu;
}

if (output_format == FIO_OUTPUT_NORMAL)
log_info("%s\n", fio_version_string);

Expand Down
12 changes: 1 addition & 11 deletions options.c
Original file line number Diff line number Diff line change
Expand Up @@ -1079,16 +1079,6 @@ static int str_gtod_reduce_cb(void *data, int *il)
return 0;
}

static int str_gtod_cpu_cb(void *data, long long *il)
{
struct thread_data *td = data;
int val = *il;

td->o.gtod_cpu = val;
td->o.gtod_offload = 1;
return 0;
}

static int str_size_cb(void *data, unsigned long long *__val)
{
struct thread_data *td = data;
Expand Down Expand Up @@ -3404,7 +3394,7 @@ struct fio_option fio_options[FIO_MAX_OPTS] = {
.name = "gtod_cpu",
.lname = "Dedicated gettimeofday() CPU",
.type = FIO_OPT_INT,
.cb = str_gtod_cpu_cb,
.off1 = td_var_offset(gtod_cpu),
.help = "Set up dedicated gettimeofday() thread on this CPU",
.verify = gtod_cpu_verify,
.category = FIO_OPT_C_GENERAL,
Expand Down
2 changes: 1 addition & 1 deletion server.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ struct fio_net_cmd_reply {
};

enum {
FIO_SERVER_VER = 41,
FIO_SERVER_VER = 42,

FIO_SERVER_MAX_FRAGMENT_PDU = 1024,
FIO_SERVER_MAX_CMD_MB = 2048,
Expand Down
5 changes: 2 additions & 3 deletions thread_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,6 @@ struct thread_options {
unsigned int unified_rw_rep;
unsigned int gtod_reduce;
unsigned int gtod_cpu;
unsigned int gtod_offload;
enum fio_cs clocksource;
unsigned int no_stall;
unsigned int trim_percentage;
Expand Down Expand Up @@ -419,7 +418,6 @@ struct thread_options_pack {
uint32_t unified_rw_rep;
uint32_t gtod_reduce;
uint32_t gtod_cpu;
uint32_t gtod_offload;
uint32_t clocksource;
uint32_t no_stall;
uint32_t trim_percentage;
Expand All @@ -428,6 +426,7 @@ struct thread_options_pack {
uint64_t trim_backlog;
uint32_t clat_percentiles;
uint32_t percentile_precision;
uint32_t pad2;
fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];

uint8_t read_iolog_file[FIO_TOP_STR_MAX];
Expand Down Expand Up @@ -480,10 +479,10 @@ struct thread_options_pack {
uint64_t number_ios;

uint32_t sync_file_range;
uint32_t pad2;

uint64_t latency_target;
uint64_t latency_window;
uint32_t pad3;
fio_fp64_t latency_percentile;
} __attribute__((packed));

Expand Down

0 comments on commit 79c896a

Please sign in to comment.