DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T s

⟦c4adc9fa0⟧ TextFile

    Length: 4081 (0xff1)
    Types: TextFile
    Names: »saxer7.c«

Derivation

└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/saxer/saxer7.c« 

TextFile

#include <stdio.h>
#define CEIL(x) ((int) (x+1))
#include "../install/signal.h"
#include "saxer8.c"

/*  DISK -- Develop timings of disk writes
**
**      Use: saxerdisk	[-w<record length>]
**			[-m<max Mbytes to write>]
**			[-t<max time for experiment (s)>]
**			[-i<desired report interval (s) (goal)>]
**
**      Will issue n-character writes to WFILE until disk full, announcing
**      bytes-per-second thruput at intervals.
*/
 
#ifndef WFILE
#define WFILE "saxer.disk"
#endif
        char wfile[20] = WFILE;
 
#ifndef NREPORT
#define NREPORT 1000 /* initial value for number of bytes to write between
                        reports; will be automatically adjusted */
#endif
        long time(),t1, tot_nw = 0;
        char chunk[4096];
        int  nw, fd;
        int  byebye();
        long m = 10000000;      /*  max disk written in bytes  */
        int     n = 512;        /*  length of write */
        float   interval;       /*  elapsed time in sec */
        float   I = 560.;        /*  desired reporting interval in sec */
        float   thruput;        /*  thruput in bytes per second */
        float   t = 600.;       /*  max time disk test */
 
main(argc,argv)
int argc; char **argv;
{
        long    nr, nrsav;                 /* nb bytes report interval */
        int     nrept = 0;              /* number of reports thus far */
        char    *p;                     /* argv parameter pointer */
        /*
        **  munch arglist.
        */
 
        while (--argc>0 && (p = *++argv)[0]=='-')
              switch (p[1])
                    {
                        case 'w': n = abs(atoi(p+=2)); break;/* bytes/write */
                        case 'm': m = 1000000*abs(atoi(p+=2)); break;/* max disk bytes */
                        case 't': alarm(2+(int) (t = 1.0*abs(atoi(p+=2)))); break; /* max timing */
                        case 'i': I = 1.0*abs(atoi(p+=2)); break; /* desired report interval in secs */
                        default: fprintf(stderr,"disk-unknown option %.10s\n",p),exit(1);
                    }
 
        /*
        **  open file and unlink
        */
        
        if ((fd = creat( wfile, 0777))<0 || unlink(wfile)<0)
              exit(fprintf(stderr,"disk-cannot creat %s\n",wfile));
 
        /*
        **  catch interrupt signals
        */
        
        signal(SIGINT,byebye);
        signal(SIGALRM,byebye);
        /*
        **  write m-Mbyte file, record length n bytes, reporting
        **  statistics every i seconds.
        */
 
        t1 = rtmsec();
        nr = NREPORT;                   /* nbytes before report */
        nrsav = NREPORT;
        while ( tot_nw < m )
              {
                nw = write(fd,chunk,n);
                if (nw>0)
                      tot_nw += nw;     /* tally */
                if (nw != n)
                      break;    /* end of medium reached */ 
 
                if((nr -= nw) < 0)      /* if it's time to report (more than nr bytes written) */
                      {
                        /*  
                        **  report write disk statistics.
                        */
                        
                        interval = (rtmsec()-t1) / 1000. + .001; /* sec */
                        thruput = tot_nw / interval;    /* bytes/sec */
                
                        if ( interval < .030 )
                              {nr += nr; continue;}     /* if no time, double */
                        else
                              nr = ( (float) nrsav +I*thruput)/2.;
                              nrsav = nr;
                        if (interval>=t)
                              break;            /* exit max time exceeded */
                      }
              }
        byebye();
}
byebye()
{
                        interval = (rtmsec()-t1) / 1000. + .001;
                        thruput = tot_nw/interval;
                        printf("\ndisk: %.3f Mb (%d bytes io) throughput  %4.2f Kbytes/sec %5.1f seconds\n",
                        tot_nw/1000000.,nw,thruput/1000.,interval);
        exit(0);
}