RTS/src/SFS/blastSFS.C

00001 #include <stdio.h> 00002 #include <fcntl.h> 00003 #include <stdlib.h> 00004 #include <errno.h> 00005 #include <time.h> 00006 00007 #include <SUNRT/clock.h> 00008 #include "sfs_lib.h" 00009 00010 #define BUFFSZ 100*1024*1024 00011 00012 00013 int main(int argc, char *argv[]) 00014 { 00015 record_time(); 00016 00017 if(argc < 2) { 00018 printf("%s filename\n",argv[0]); 00019 return 0; 00020 } 00021 00022 // 100 mb... 00023 printf("Buffer size %d bytes\n",BUFFSZ); 00024 00025 char head[256]; 00026 SFS_File *file = (SFS_File *)head; 00027 00028 char *buff = (char *)malloc(BUFFSZ + 8*1024); 00029 if(!buff) { 00030 printf("Error in malloc\n"); 00031 } 00032 00033 unsigned int buffx = (unsigned int) buff; 00034 00035 buffx /= 8*1024; 00036 buffx *= 8*1024; 00037 if(buffx != (unsigned int)buff) { 00038 buffx += 8*1024; 00039 printf("new 0x%x / old 0x%x\n",buffx,(unsigned int)buff); 00040 buff = (char *)buffx; 00041 } 00042 00043 for(int i=0;i<BUFFSZ;i++) { 00044 buff[i] = i % 256; 00045 } 00046 00047 double t = record_time(); 00048 printf("setup: %10.8f secs\n", t); 00049 00050 double ltime = 0; 00051 double etime = 0; 00052 double sent = 0; 00053 double eventsz = 0; 00054 char fn[255]; 00055 int filen=0; 00056 00057 char *fp; 00058 srand(time(NULL)); 00059 00060 int fd=-1; 00061 00062 char mntname[256]; 00063 for(int ii=0;ii>=0;ii++) { 00064 filen++; 00065 00066 if(ii % 1000 == 0) { 00067 if(ii > 0) close(fd); 00068 00069 sprintf(mntname, "%s_%d",argv[1], ii/1000); 00070 fd = open(mntname, O_WRONLY | O_CREAT, 0666); 00071 00072 char seedbuff[1000]; 00073 SFS_desc desc; 00074 sfs_create_mimage(&desc, seedbuff, 1000); 00075 00076 write(fd, seedbuff, desc.sz); 00077 } 00078 00079 //sprintf(fn, "/event_%d",filen); 00080 // mkdir(fn,0777); 00081 00082 eventsz = 0; 00083 fp = buff; 00084 00085 for(int detn=0;detn<10;detn++) { 00086 //sprintf(fn,"/event_%d/det_%d",filen,detn); 00087 //mkdir(fn,0777); 00088 00089 for(int subn=0;subn<10;subn++) { 00090 if(subn == 0) 00091 sprintf(fn, "/event_%d/det_%d/sub_%d",filen,detn,subn); 00092 else 00093 sprintf(fn, "sub_%d",subn); 00094 00095 float rnd = ((float)rand()/(float)RAND_MAX) * 5000.0; 00096 int fsz = 5*1024/2; 00097 fsz = (int)rnd + fsz; 00098 fsz /= 4; 00099 fsz *= 4; // round to integer size... 00100 00101 // fsz = 4; 00102 00103 sfs_genfilerec(fn, fsz, file); 00104 00105 00106 if(fd <0) perror("Bad file?: "); 00107 00108 int ret = write(fd, (char *)file, file->head_sz); 00109 if(ret != file->head_sz) perror("Bad write?: "); 00110 00111 ret = write(fd, (char *)fp, seeksize(file->sz)); 00112 if(ret != seeksize(file->sz)) perror("Bad write?: "); 00113 00114 fp += fsz; 00115 00116 eventsz += fsz; 00117 } 00118 } 00119 00120 t = record_time(); 00121 etime += t; 00122 sent += eventsz; 00123 00124 if(etime - ltime > 10) { 00125 ltime = etime; 00126 00127 double rate = (sent / (1e6*etime)); 00128 double lrate = ((double)eventsz) / (1e6 * t); 00129 00130 printf("%6.2f %6.2f\n",lrate, rate); 00131 } 00132 } 00133 00134 printf("sent = %d\n",(int)sent); 00135 }

Generated on Sun Mar 15 04:51:00 2009 for StRoot by doxygen 1.3.7