+static void get_act_ref(void)
+{
+ fio_mutex_down(act_run_data->mutex);
+ act_run_data->pending++;
+ fio_mutex_up(act_run_data->mutex);
+}
+
+static void act_show_all_stats(void)
+{
+ unsigned int i;
+
+ log_info(" trans device\n");
+ log_info(" %%>(ms) %%>(ms)\n");
+ log_info(" slice");
+
+ for (i = 0; i < ACT_MAX_CRIT; i++)
+ log_info("\t%2u", act_pass[i].max_usec / 1000);
+ for (i = 0; i < ACT_MAX_CRIT; i++)
+ log_info("\t%2u", act_pass[i].max_usec / 1000);
+
+ log_info("\n");
+ log_info(" ----- ------ ------ ------ ------ ------ ------\n");
+ log_info(" 1");
+
+ for (i = 0; i < ACT_MAX_CRIT; i++) {
+ double perc;
+
+ perc = 100.0 * (double) act_run_data->lat_buckets[i] / (double) act_run_data->total_ios;
+ log_info("\t%2.2f", perc);
+ }
+ for (i = 0; i < ACT_MAX_CRIT; i++) {
+ double perc;
+
+ perc = 100.0 * (double) act_run_data->lat_buckets[i] / (double) act_run_data->total_ios;
+ log_info("\t%2.2f", perc);
+ }
+
+}
+
+static void put_act_ref(struct thread_data *td)
+{
+ struct act_prof_data *apd = td->prof_data;
+ unsigned int i;
+
+ fio_mutex_down(act_run_data->mutex);
+
+ for (i = 0; i < ACT_MAX_CRIT; i++) {
+ act_run_data->lat_buckets[i] += apd->cum_lat_buckets[i];
+ act_run_data->lat_buckets[i] += apd->lat_buckets[i];
+ }
+
+ act_run_data->total_ios += apd->cum_total_ios + apd->total_ios;
+
+ if (!--act_run_data->pending)
+ act_show_all_stats();
+
+ fio_mutex_up(act_run_data->mutex);
+}
+