summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
ec55e63)
This leaves a 32-bit filler in thread_options_pack that can be removed when it is possible to maintain required byte alignment
o->ss_dur = le64_to_cpu(top->ss_dur);
o->ss_ramp_time = le64_to_cpu(top->ss_ramp_time);
o->ss = le32_to_cpu(top->ss);
o->ss_dur = le64_to_cpu(top->ss_dur);
o->ss_ramp_time = le64_to_cpu(top->ss_ramp_time);
o->ss = le32_to_cpu(top->ss);
- o->ss_pct = le32_to_cpu(top->ss_pct);
o->ss_limit.u.f = fio_uint64_to_double(le64_to_cpu(top->ss_limit.u.i));
o->zone_range = le64_to_cpu(top->zone_range);
o->zone_size = le64_to_cpu(top->zone_size);
o->ss_limit.u.f = fio_uint64_to_double(le64_to_cpu(top->ss_limit.u.i));
o->zone_range = le64_to_cpu(top->zone_range);
o->zone_size = le64_to_cpu(top->zone_size);
top->ss_dur = __cpu_to_le64(top->ss_dur);
top->ss_ramp_time = __cpu_to_le64(top->ss_ramp_time);
top->ss = cpu_to_le32(top->ss);
top->ss_dur = __cpu_to_le64(top->ss_dur);
top->ss_ramp_time = __cpu_to_le64(top->ss_ramp_time);
top->ss = cpu_to_le32(top->ss);
- top->ss_pct = cpu_to_le32(top->ss_pct);
top->ss_limit.u.i = __cpu_to_le64(fio_double_to_uint64(o->ss_limit.u.f));
top->zone_range = __cpu_to_le64(o->zone_range);
top->zone_size = __cpu_to_le64(o->zone_size);
top->ss_limit.u.i = __cpu_to_le64(fio_double_to_uint64(o->ss_limit.u.f));
top->zone_range = __cpu_to_le64(o->zone_range);
top->zone_size = __cpu_to_le64(o->zone_size);
if (parse_dryrun())
return 0;
if (parse_dryrun())
return 0;
+ td->o.ss |= __FIO_SS_PCT;
td->o.ss_limit.u.f = val;
} else if (td->o.ss & __FIO_SS_IOPS) {
if (!str_to_float(nr, &val, 0)) {
td->o.ss_limit.u.f = val;
} else if (td->o.ss & __FIO_SS_IOPS) {
if (!str_to_float(nr, &val, 0)) {
if (parse_dryrun())
return 0;
if (parse_dryrun())
return 0;
td->o.ss_limit.u.f = val;
td->o.ss_limit.u.f = val;
} else { /* bandwidth criterion */
if (str_to_decimal(nr, &ll, 1, td, 0, 0)) {
log_err("fio: steadystate BW threshold postfix parsing failed\n");
} else { /* bandwidth criterion */
if (str_to_decimal(nr, &ll, 1, td, 0, 0)) {
log_err("fio: steadystate BW threshold postfix parsing failed\n");
if (parse_dryrun())
return 0;
if (parse_dryrun())
return 0;
td->o.ss_limit.u.f = (double) ll;
td->o.ss_limit.u.f = (double) ll;
}
td->ss.state = td->o.ss;
}
td->ss.state = td->o.ss;
ss->state & __FIO_SS_IOPS ? "iops" : "bw",
ss->state & __FIO_SS_SLOPE ? "_slope" : "",
(float) ss->limit,
ss->state & __FIO_SS_IOPS ? "iops" : "bw",
ss->state & __FIO_SS_SLOPE ? "_slope" : "",
(float) ss->limit,
+ ss->state & __FIO_SS_PCT ? "%" : "");
tmp = json_create_object();
json_object_add_value_object(root, "steadystate", tmp);
tmp = json_create_object();
json_object_add_value_object(root, "steadystate", tmp);
json_object_add_value_int(tmp, "steadystate_ramptime", ss->ramp_time / 1000000L);
json_object_add_value_int(tmp, "attained", (ss->state & __FIO_SS_ATTAINED) > 0);
json_object_add_value_int(tmp, "steadystate_ramptime", ss->ramp_time / 1000000L);
json_object_add_value_int(tmp, "attained", (ss->state & __FIO_SS_ATTAINED) > 0);
- snprintf(ss_buf, sizeof(ss_buf), "%f%s", (float) ss->criterion, ss->pct ? "%" : "");
+ snprintf(ss_buf, sizeof(ss_buf), "%f%s", (float) ss->criterion,
+ ss->state & __FIO_SS_PCT ? "%" : "");
json_object_add_value_string(tmp, "criterion", ss_buf);
json_object_add_value_float(tmp, "max_deviation", ss->deviation);
json_object_add_value_float(tmp, "slope", ss->slope);
json_object_add_value_string(tmp, "criterion", ss_buf);
json_object_add_value_float(tmp, "max_deviation", ss->deviation);
json_object_add_value_float(tmp, "slope", ss->slope);
*/
ss->slope = (ss->sum_xy - (double) ss->sum_x * ss->sum_y / ss->dur) /
(ss->sum_x_sq - (double) ss->sum_x * ss->sum_x / ss->dur);
*/
ss->slope = (ss->sum_xy - (double) ss->sum_x * ss->sum_y / ss->dur) /
(ss->sum_x_sq - (double) ss->sum_x * ss->sum_x / ss->dur);
+ if (ss->state & __FIO_SS_PCT)
ss->criterion = 100.0 * ss->slope / (ss->sum_y / ss->dur);
else
ss->criterion = ss->slope;
ss->criterion = 100.0 * ss->slope / (ss->sum_y / ss->dur);
else
ss->criterion = ss->slope;
ss->deviation = max(ss->deviation, diff * (diff < 0.0 ? -1.0 : 1.0));
}
ss->deviation = max(ss->deviation, diff * (diff < 0.0 ? -1.0 : 1.0));
}
+ if (ss->state & __FIO_SS_PCT)
ss->criterion = 100.0 * ss->deviation / mean;
else
ss->criterion = ss->deviation;
ss->criterion = 100.0 * ss->deviation / mean;
else
ss->criterion = ss->deviation;
ss->dur = o->ss_dur;
ss->limit = o->ss_limit.u.f;
ss->ramp_time = o->ss_ramp_time;
ss->dur = o->ss_dur;
ss->limit = o->ss_limit.u.f;
ss->ramp_time = o->ss_ramp_time;
ss->state = o->ss;
if (!td->ss.ramp_time)
ss->state = o->ss;
if (!td->ss.ramp_time)
if (ss2->dur != ss->dur ||
ss2->limit != ss->limit ||
ss2->ramp_time != ss->ramp_time ||
if (ss2->dur != ss->dur ||
ss2->limit != ss->limit ||
ss2->ramp_time != ss->ramp_time ||
ss2->state != ss->state ||
ss2->sum_x != ss->sum_x ||
ss2->sum_x_sq != ss->sum_x_sq) {
ss2->state != ss->state ||
ss2->sum_x != ss->sum_x ||
ss2->sum_x_sq != ss->sum_x_sq) {
double limit;
unsigned long long dur;
unsigned long long ramp_time;
double limit;
unsigned long long dur;
unsigned long long ramp_time;
__FIO_SS_ATTAINED = 8,
__FIO_SS_RAMP_OVER = 16,
__FIO_SS_DATA = 32,
__FIO_SS_ATTAINED = 8,
__FIO_SS_RAMP_OVER = 16,
__FIO_SS_DATA = 32,
FIO_SS_IOPS = __FIO_SS_IOPS,
FIO_SS_IOPS_SLOPE = __FIO_SS_IOPS | __FIO_SS_SLOPE,
FIO_SS_IOPS = __FIO_SS_IOPS,
FIO_SS_IOPS_SLOPE = __FIO_SS_IOPS | __FIO_SS_SLOPE,
unsigned long long timeout;
unsigned long long ramp_time;
unsigned int ss;
unsigned long long timeout;
unsigned long long ramp_time;
unsigned int ss;
fio_fp64_t ss_limit;
unsigned long long ss_dur;
unsigned long long ss_ramp_time;
fio_fp64_t ss_limit;
unsigned long long ss_dur;
unsigned long long ss_ramp_time;
uint64_t ss_dur;
uint64_t ss_ramp_time;
uint32_t ss;
uint64_t ss_dur;
uint64_t ss_ramp_time;
uint32_t ss;
fio_fp64_t ss_limit;
uint32_t overwrite;
uint32_t bw_avg_time;
fio_fp64_t ss_limit;
uint32_t overwrite;
uint32_t bw_avg_time;
uint64_t trim_backlog;
uint32_t clat_percentiles;
uint32_t percentile_precision;
uint64_t trim_backlog;
uint32_t clat_percentiles;
uint32_t percentile_precision;
+ uint32_t padding; /* REMOVE ME when possible to maintain alignment */
fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
uint8_t read_iolog_file[FIO_TOP_STR_MAX];
fio_fp64_t percentile_list[FIO_IO_U_LIST_MAX_LEN];
uint8_t read_iolog_file[FIO_TOP_STR_MAX];