diff options
Diffstat (limited to 'src/ffio.c')
-rw-r--r-- | src/ffio.c | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/src/ffio.c b/src/ffio.c new file mode 100644 index 0000000..a8bfca3 --- /dev/null +++ b/src/ffio.c @@ -0,0 +1,108 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <time.h> +#include <sys/times.h> +#include <sys/statfs.h> +#include <ffio.h> + + +#define MINBLOCKSIZE (1*1024) +#define MAXBLOCKSIZE (512*1024) /* multiple of MINBLOCKSIZE */ + +#define MAXFILESIZE (128*1024*1024) /* multiple of MAXBLOCKSIZE */ +#define DATAFILE "bla" +#define STATFILE "ffio.c" + +#define LAYERS "" /*bufa.bufsize=1024.num_buffers=1"*/ + +#ifdef T3E +#define S_IWRITE 00200 +#define S_IREAD 00400 +#endif + + +int main (int argc, char *argv []) +{ + int i, blocksize, rank=3; + int outfile; + void *data; + struct tms starttime, stoptime; + double utime, stime; + int open_mode; + int cblks; /* size = cblks * 512 words */ + long cbits; + char layers [256]; + struct ffsw ffopens_status; +#ifdef T3E + struct statfs statfs_info; +#endif + + + data = (void *) calloc (sizeof (char), MAXBLOCKSIZE); + if (! data) { + printf ("Couldn't allocate enough memory\n"); + exit (1); + } + + /* set file open parameters */ +#ifdef T3E +#if 0 + if (statfs (STATFILE, &statfs_info, sizeof (statfs_info), 0) < 0) { + perror ("statfs() failed: "); + exit (1); + } + printf ("secondary partitions' bitmask: 0x%lx\n", statfs_info.f_secparts); + + cbits = 0; + cbits |= (1 << 24); + cbits |= (1 << 06); + cbits |= (1 << 26); + cbits |= (1 << 23); +#endif + open_mode = O_WRONLY | O_CREAT | O_PLACE; + cbits = 0; + cblks = 100; +#else + open_mode = O_WRONLY | O_CREAT; + cbits = 0; + cblks = 0; +#endif + + for (blocksize = MINBLOCKSIZE; blocksize <= MAXBLOCKSIZE; blocksize *= 2) { + + times (&starttime); + + /* open the file */ + outfile = ffopens (DATAFILE, open_mode, S_IWRITE | S_IREAD, + cbits, cblks, &ffopens_status, LAYERS); + if (! outfile) { + perror ("ffopens() failed: "); + exit (1); + } + + /* system ("setf -n32768b:128b -c -p 24:06:23:26 bla");*/ + + /* write some data */ + for (i = 0; i < MAXFILESIZE / blocksize; i++) + if (ffwrite (outfile, data, blocksize) < 0) { + perror ("ffwrite() failed: "); + exit (1); + } + + /* close and remove the file */ + ffclose (outfile); + remove (DATAFILE); + + times (&stoptime); + utime = (stoptime.tms_utime -starttime.tms_utime) / (double) CLK_TCK; + stime = (stoptime.tms_stime -starttime.tms_stime) / (double) CLK_TCK; + printf ("blocksize [bytes]: %d\ttimes(u/s) [s]: %f %f\tbandwidth [MB/s]: %f\n", + blocksize, utime, stime, + MAXFILESIZE / (utime + stime) / (1024*1024)); + } + free (data); + + return (0); +} |