int
sinfo_update ( Arr * sold, Arr * snew )
{
   int i;
   int n1, n2;
   int numfields;
   char * field;
   char * value;
   char * newval;
   char * oldval;
   int newp, oldp;
   Tbl * fields;

   fields = keysarr( getpf( snew, FIELDS ) );

   numfields = maxtbl( fields );
   for ( i = 0; i < numfields; i++ )
   {
       field = (char*) poptbl( fields );
       value = get_station_field( snew, field );
       oldval = get_station_field( sold, field );
       if ( strcmp( field, LATENCY ) == 0 )
       {
           newp = atoi( getpf( snew, LATENCY_ORDER ) );
           oldp = atoi( getpf( sold, LATENCY_ORDER ) );
           if ( ( !oldp  && newp ) || ( newp < oldp ) )
           {
               set_station_field( sold, field, strdup(value) );
               setarr( sold, LATENCY_ORDER, create_pf( itoa(newp), PFSTRING ) );
           }
           else if ( ( ( newp == oldp ) || ( !newp && !oldp ) ) && 
                     ( atoi( value ) < atoi( oldval ) ) )
           {
               set_station_field( sold, field, strdup(value) );
               setarr( sold, LATENCY_ORDER, create_pf( itoa(newp), PFSTRING ) );
           }
       }
       else
           /* If this is a channels value, we want to merge the values */
           if ( strcmp( field, NUMCHANS ) == 0 )
           {
               (!value)? (n1 = 0): (n1 = atoi( value ));
               (!oldval)? (n2 = 0): (n2 = atoi( oldval ));
               set_station_field( sold, field, itoa( n1 + n2 ) );
           }
           else
               if ( value != NULL )
                   set_station_field( sold, field, strdup(value) );
       
   }
   freetbl( fields, 0 );

   return 1;
}
Esempio n. 2
0
int main(int argc, char *argv[])
{
    majpfaults = 99999999;
    minpfaults = 99999999;
    int j = 0, maxAttempts = 5;

    printf("========================\n");
    printf(" Benchmark Program\n");
    printf(" Author: Andrew Xu\n");
    printf("========================\n");
    printf(" Array size: %d\n", arraysize);
    printf(" Maximum attempt: %d\n", maxAttempts);
    printf("========================\n\n");

    /*
     * Allocate space for array
     *
     */
    time_t bt=0,et=0;
    printf("# %d run : malloc >\n", 0);
    gettimeofday(&c_time, NULL);
    printf("  Begin time > %lu\n", bt=c_time.tv_sec);
    getpf(0);
    printf("  Page fault count:  maj=%lu min=%lu\n", pf_buf[0], pf_buf[1]);
    
    old_maj=pf_buf[0];
    old_min=pf_buf[1];
    
    ptr = (int*)malloc(arraysize * sizeof(*ptr));
    if(ptr==0){perror("malloc failed"); exit(1);}

    for(i=0; i<arraysize; i++)
    {
	ptr[i] = i;
    }
    
    gettimeofday(&c_time, NULL);
    printf("  End time > %lu\n", et=c_time.tv_sec);
    getpf(0);
    printf("  Page fault count:  maj=%lu min=%lu\n", pf_buf[0], pf_buf[1]);
    
    printf("  Elapse : %lu s\n", et-bt);
    printf("  Page fault increase : maj=%lu, min=%lu\n", pf_buf[0]-old_maj, pf_buf[1]-old_min);

    for(j=0; j<maxAttempts; j++)
    {
        reportTimeAndFaultCount(j+1);
    }


    return 0;
}
int
add_latencies ( Arr * networks )
{
    char * net;
    char * sta;
    char * statime;
    Arr * stations;
    Arr * sinfo;
    Arr * network;
    Tbl * stas;
    Tbl * nets;
    Pf * oldval;
    int numstas;
    int numnets;
    int i, j;
    int min = MAXINT;
    int max = 0;

    nets = keysarr( networks );
    numnets = maxtbl( nets );
    for ( i = 0; i < numnets; i++ )
    {
        net = gettbl( nets, i );
        network = getpf( networks, net );
        stations = getpf( network, STALIST );
        stas = keysarr( stations );
        numstas = maxtbl( stas );

        for ( j = 0, min=MAXINT, max=0; j < numstas; j++ )
        {
            sta = gettbl( stas, j );
            sinfo = getpf( stations, sta );
            statime = get_station_field( sinfo, LATENCY );
            if ( statime && ( atoi( statime ) < min ) )
                min = atoi( statime );
            if ( statime && ( atoi( statime ) > max ) )
                max = atoi( statime );
        }
        freetbl( stas, 0 );
        oldval = setarr( network, MINNETLATENCY, 
                         create_pf( itoa(min), PFSTRING ) ); 
        if ( oldval ) recurse_free_pf( oldval );
        oldval = setarr( network, MAXNETLATENCY, 
                         create_pf( itoa(max), PFSTRING ) ); 
        if ( oldval ) recurse_free_pf( oldval );
    }
    freetbl( nets, 0 );

    return 1;
}
int
is_station_new( Arr * sinfo )
{
    char * isnew = getpf( sinfo, ISNEW );
    if ( !strcmp( isnew, "1" ) ) return 1;
    return 0;
}
Esempio n. 5
0
void reportTimeAndFaultCount(int j){
    time_t bt=0,et=0;
    printf("# %d run >\n", j);
    gettimeofday(&c_time, NULL);
    printf("  Begin time > %lu\n", bt=c_time.tv_sec);
	
    getpf(0);
    printf("  Page fault count:  maj=%lu min=%lu\n", pf_buf[0], pf_buf[1]);
    
    old_maj=pf_buf[0];
    old_min=pf_buf[1];
        doSomething();
    gettimeofday(&c_time, NULL);
    printf("  End time > %lu\n", et=c_time.tv_sec);
    
    getpf(0);
    printf("  Page fault count:  maj=%lu min=%lu\n", pf_buf[0], pf_buf[1]);
    
    printf("  Elapse : %lu s\n", et-bt);
    printf("  Page fault increase : maj=%lu, min=%lu\n", pf_buf[0]-old_maj, pf_buf[1]-old_min);

}
int
set_station_field( Arr * sinfo, char * name, char * value )
{
    Pf * oldval;
    Pf * pf;

    if ( !sinfo || !name || !value  ) return 0;

    pf = create_pf ( value , PFSTRING );
    oldval = setarr( getpf( sinfo, FIELDS ), name, pf );
    /* if ( oldval ) recurse_free_pf( oldval ); */

    return 1;
}
Arr *
get_station ( Arr * networks, char * net, char * sta )
{
    return ( getpf( get_stations( networks, net ), sta ) );
}
Arr *
get_stations ( Arr * networks, char * net )
{
    return ( getpf( get_network( networks, net ), STALIST ) );
}
Arr *
get_network( Arr * networks, char * net ) 
{
    return ( getpf( networks, net ) );
}
char *
get_station_field( Arr * sinfo, char * name )
{
    return ( (char*) getpf( getpf( sinfo, FIELDS ), name ) );
}