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; }
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; }
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 ) ); }