void Measurements::print() { if (!Measure) return; fprintf(stdout, "\n\nMeasurements (baseline = %ld):\n", baseline); print_details(); print_summaries(); }
int spe_record__record(struct spe_record__conf *conf) { signal(SIGCHLD, spe_record__handler); print_spe_record__conf(conf); spe__prepare_workload(conf->wl_args); /* * Set affinity masks */ check_return(sched_setaffinity(0, sizeof(cpu_set_t), &conf->record_aff_mask), "Failed to set record process affinity mask, Error: %d\n", errno); check_return(sched_setaffinity(wl_state.pid, sizeof(cpu_set_t), &conf->load_aff_mask), "Failed to set load process affinity mask, Error: %d\n", errno); sc_init(conf, pe_handler); check_return(initialize_groups(&g_groups, conf, wl_state.pid), "Error initializing groups.\n"); check_return(open_outputs(&g_groups, conf->output_preffix), "Error opening outputs.\n"); check_return(open_pe_group(&g_groups), "Error opening groups.\n"); printf("Ready to go.\n"); check_return(start_pe_group(&g_groups), "Error starting groups.\n"); check_return(spe__start_workload(), "Error start_workload.\n"); int awaken = 0, bytes_curr = 0; int bytes_written = 0; //TODO: How to improve efficiency of polling? int nr_signal_to_wait = 20; int i; while (wl_state.wait_child) { for (i = 0; wl_state.wait_child && i < nr_signal_to_wait; ++i) pause(); ++awaken; bytes_curr = perf_mmap_read_all(&g_groups); if (bytes_curr < 0) { REPORTERROR("Error reading mmap.\n"); } else { bytes_written += bytes_curr; } } perf_mmap_read_all(&g_groups); check_return(stop_pe_group(&g_groups), "Error stopping groups.\n"); printf("End. Written %d bytes. Awaken %d times\n", bytes_written, awaken); check_return(stop_pe_group(&g_groups), "Error stopping groups\n"); check_return(print_summaries(&g_groups, conf->output_preffix), "Error printing outputs.\n"); check_return(close_outputs(&g_groups), "Error closing outputs.\n"); check_return(close_pe_group(&g_groups), "Error closing groups\n"); return 0; }