Beispiel #1
0
void vt_esync_init()
{
  /* get sync. interval */

  SyncIntv = (uint64_t)vt_env_etimesync_intv() * vt_pform_clockres();
  if (SyncIntv > 0)
    SyncNext = vt_pform_wtime() + SyncIntv;
  else
    SyncNext = (uint64_t)-1;
}
uint32_t vt_rusage_open()
{
  char* env;
  char* var;
  char* token;
  uint32_t intv = (uint32_t)vt_env_rusage_intv();
  uint32_t i;

  /* read environment variable "VT_RUSAGE" */
  if ( ( env = vt_env_rusage() ) == NULL )
    return 0;

  var = strdup(env);
  vt_cntl_msg(2, "VT_RUSAGE=%s", var);

  /* convert VT_RUSAGE's letters to lower case */
  token = var;
  while ( *token ) { *token = tolower(*token); token++; }

  if ( strcmp(var, "all") == 0 )
  {
    /* add all rusage counters */
    for ( i = 0; i < RU_CNTR_MAXNUM; i++ )
      ru_active_cntrv[ru_active_cntrn++] = &(ru_cntrv[i]);
  }
  else
  {
    int idx;

    /* read rusage counter from specification string */
    token = strtok(var, ":");
    while ( token )
    {
      idx = -1;

      if ( ru_active_cntrn == RU_CNTR_MAXNUM )
      {
	vt_error_msg("Number of resource usage counters exceeds maximum of %d",
		     RU_CNTR_MAXNUM);
      }
      /* search counter name in vector of counter specifications */
      for ( i = 0; i < RU_CNTR_MAXNUM; i++ )
	if( strcmp(ru_cntrv[i].name, token) == 0) idx = (int)ru_cntrv[i].idx;

      /* if found, add the address of this counter specification to vector
	 of active counters; otherwise abort */
      if ( idx != -1 )
	ru_active_cntrv[ru_active_cntrn++] = &(ru_cntrv[idx]);
      else
	vt_error_msg("Unknown resource usage counter %s", token);

      token = strtok(NULL, ":");
    }
  }

  /* set rusage read interval */
  if ( intv > 0 )
    vt_rusage_intv = (vt_pform_clockres() * (uint64_t)intv) / 1000;

  free(var);

  return ru_active_cntrn;
}