Blame src/components/powercap/tests/powercap_limit.c

Packit 577717
/**
Packit 577717
 * @author Philip Vaccaro
Packit 577717
 * Test case for powercap component
Packit 577717
 * @brief
Packit 577717
 *   Tests basic functionality of powercap component
Packit 577717
 */
Packit 577717

Packit 577717
#include <stdio.h>
Packit 577717
#include <stdlib.h>
Packit 577717
#include <string.h>
Packit 577717
#include <unistd.h>
Packit 577717

Packit 577717
#include "papi.h"
Packit 577717
#include "papi_test.h"
Packit 577717

Packit 577717
#define MAX_powercap_EVENTS 64
Packit 577717

Packit 577717
int main ( int argc, char **argv )
Packit 577717
{
Packit 577717
  (void) argv;
Packit 577717
  (void) argc;
Packit 577717
  int retval,cid,powercap_cid=-1,numcmp;
Packit 577717
  int EventSet = PAPI_NULL;
Packit 577717
  long long values[MAX_powercap_EVENTS];
Packit 577717
  int limit_map[MAX_powercap_EVENTS];
Packit 577717
  int num_events=0, num_limits=0;
Packit 577717
  int code;
Packit 577717
  char event_names[MAX_powercap_EVENTS][PAPI_MAX_STR_LEN];
Packit 577717
  int r,i;
Packit 577717

Packit 577717
  const PAPI_component_info_t *cmpinfo = NULL;
Packit 577717

Packit 577717
  /* PAPI Initialization */
Packit 577717
  retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit 577717
  if ( retval != PAPI_VER_CURRENT )
Packit 577717
    test_fail( __FILE__, __LINE__,"PAPI_library_init\n",retval );
Packit 577717

Packit 577717
  if ( !TESTS_QUIET ) printf( "Trying all powercap events\n" );
Packit 577717

Packit 577717
  numcmp = PAPI_num_components();
Packit 577717

Packit 577717
  for( cid=0; cid
Packit 577717

Packit 577717
    if ( ( cmpinfo = PAPI_get_component_info( cid ) ) == NULL )
Packit 577717
      test_fail( __FILE__, __LINE__,"PAPI_get_component_info\n", 0 );
Packit 577717

Packit 577717
    if ( strstr( cmpinfo->name,"powercap" ) ) {
Packit 577717
      powercap_cid=cid;
Packit 577717
      if ( !TESTS_QUIET ) printf( "Found powercap component at cid %d\n",powercap_cid );
Packit 577717
      if ( cmpinfo->disabled ) {
Packit 577717
        if ( !TESTS_QUIET ) {
Packit 577717
          printf( "powercap component disabled: %s\n",
Packit 577717
                  cmpinfo->disabled_reason );
Packit 577717
        }
Packit 577717
        test_skip( __FILE__,__LINE__,"powercap component disabled",0 );
Packit 577717
      }
Packit 577717
      break;
Packit 577717
    }
Packit 577717
  }
Packit 577717

Packit 577717
  /* Component not found */
Packit 577717
  if ( cid==numcmp )
Packit 577717
    test_skip( __FILE__,__LINE__,"No powercap component found\n",0 );
Packit 577717

Packit 577717
  /* Skip if component has no counters */
Packit 577717
  if ( cmpinfo->num_cntrs==0 )
Packit 577717
    test_skip( __FILE__,__LINE__,"No counters in the powercap component\n",0 );
Packit 577717

Packit 577717
  /* Create EventSet */
Packit 577717
  retval = PAPI_create_eventset( &EventSet );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_create_eventset()",retval );
Packit 577717

Packit 577717
  /* Add all package limit events */
Packit 577717
  code = PAPI_NATIVE_MASK;
Packit 577717
  r = PAPI_enum_cmp_event( &code, PAPI_ENUM_FIRST, powercap_cid );
Packit 577717

Packit 577717

Packit 577717
  /* find all package power events */
Packit 577717
  while ( r == PAPI_OK ) {
Packit 577717
    retval = PAPI_event_code_to_name( code, event_names[num_events] );
Packit 577717
    if ( retval != PAPI_OK ) 
Packit 577717
      test_fail( __FILE__, __LINE__,"PAPI_event_code_to_name", retval );
Packit 577717

Packit 577717
    retval = PAPI_add_event(EventSet, code);
Packit 577717
    if (retval != PAPI_OK)
Packit 577717
      break; /* We've hit an event limit */
Packit 577717

Packit 577717
    if (!(strstr(event_names[num_events],"SUBZONE")) && (strstr(event_names[num_events],"POWER_LIMIT"))) {
Packit 577717

Packit 577717
      limit_map[num_limits] = num_events;
Packit 577717
      num_limits++;
Packit 577717
    }
Packit 577717
    num_events++;
Packit 577717
    r = PAPI_enum_cmp_event( &code, PAPI_ENUM_EVENTS, powercap_cid );
Packit 577717
  }
Packit 577717

Packit 577717

Packit 577717
  /* start collecting power data */
Packit 577717
  retval = PAPI_start( EventSet );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717

Packit 577717
  /* initial read of package limits */
Packit 577717
  retval = PAPI_read( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717

Packit 577717

Packit 577717
  printf("\nCURRENT LIMITS\n");
Packit 577717
  for( i=0; i
Packit 577717
    printf("EVENT: %s\tLIMIT: %0.2lf Watts\n", event_names[limit_map[i]], ((double)values[limit_map[i]]*1e-6));
Packit 577717
    values[limit_map[i]] = values[limit_map[i]] - (10 * 1e6); //minus 10 Watts
Packit 577717
  }
Packit 577717
  usleep(10000);
Packit 577717

Packit 577717
  printf("\nSETTING LIMITS 10 WATTS BELOW CURRENT LIMITS\n");
Packit 577717
  retval = PAPI_write( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717

Packit 577717
  usleep(10000);
Packit 577717

Packit 577717
  printf("\nREADING LIMITS TO MAKE SURE SET\n");
Packit 577717
  retval = PAPI_read( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717
  usleep(10000);
Packit 577717

Packit 577717
  printf("\nNEW LIMITS\n");
Packit 577717
  for( i=0; i
Packit 577717
    printf("EVENT: %s\tLIMIT: %0.2lf Watts\n", event_names[limit_map[i]], ((double)values[limit_map[i]]*1e-6));
Packit 577717
    values[limit_map[i]] = values[limit_map[i]] + (10 * 1e6); //plus 10 Watts
Packit 577717
  }
Packit 577717

Packit 577717
  printf("\nRESET LIMITS BEFORE EXITING...");
Packit 577717
  retval = PAPI_write( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717
  usleep(10000);
Packit 577717

Packit 577717
  printf("\nREADING RESET LIMITS TO MAKE SURE SET\n");
Packit 577717
  retval = PAPI_read( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_start()",retval );
Packit 577717
  usleep(10000);
Packit 577717

Packit 577717
  printf("\nRESET LIMITS\n");
Packit 577717
  for( i=0; i
Packit 577717
    printf("EVENT: %s\tLIMIT: %0.2lf Watts\n", event_names[limit_map[i]], ((double)values[limit_map[i]]*1e-6));
Packit 577717
  }
Packit 577717

Packit 577717
  printf("done\n");
Packit 577717

Packit 577717
  retval = PAPI_stop( EventSet, values );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_stop()",retval );
Packit 577717

Packit 577717
  /* Done, clean up */
Packit 577717
  retval = PAPI_cleanup_eventset( EventSet );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__,"PAPI_cleanup_eventset()",retval );
Packit 577717

Packit 577717
  retval = PAPI_destroy_eventset( &EventSet );
Packit 577717
  if ( retval != PAPI_OK )
Packit 577717
    test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset()",retval );
Packit 577717

Packit 577717
  test_pass( __FILE__ );
Packit 577717

Packit 577717
  return 0;
Packit 577717
}
Packit 577717