Exemplo n.º 1
0
void Measurements::print() {
  if (!Measure)
    return;
  fprintf(stdout, "\n\nMeasurements (baseline = %ld):\n", baseline);

  print_details();
  print_summaries();
}
Exemplo n.º 2
0
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;
}