Import TBBT (NFS trace replay).
[bluesky.git] / TBBT / trace_play / generate_xmgr.c.old
diff --git a/TBBT/trace_play/generate_xmgr.c.old b/TBBT/trace_play/generate_xmgr.c.old
new file mode 100644 (file)
index 0000000..4a12ce2
--- /dev/null
@@ -0,0 +1,70 @@
+#include <stdio.h>
+main(int argc, char ** argv)
+{
+       char line[1024];
+       FILE * fp;
+       unsigned long long distance;
+       unsigned long long tll;
+       int avg_frag_distance = 0;
+#define SEQ_NUM 11
+       int frag_num[SEQ_NUM], td_MB[SEQ_NUM], td[SEQ_NUM], tblock_num[SEQ_NUM], file_num;
+       int max_blockno=0, avg_block_distance=0;
+       char * p;
+       int sequence[SEQ_NUM]={1,2,5,10,20,30,50,100,200,250,500};
+       int i;
+       int file_ratio, active_ratio, chunk_num, fs_size_MB;
+       char fhmap[1024];
+
+       fp = fopen (argv[1], "r");
+       if (!fp) {
+               perror("open"); 
+               exit(-1);
+       }
+       i=-1;
+       while (fgets(line, sizeof(line), fp)) {
+               if (feof(fp))
+                       break;
+               if (strstr(line, "==>")) {
+                       if (i!=-1) {
+                               printf("error 1\n");
+                               exit(-1);
+                       }
+                       p = strrchr (line, '/');
+                       if (p==NULL)
+                               p=line;
+                       p = strchr (p, '_');
+                       if (p==NULL) {
+                               printf("error 2\n");
+                               exit(-1);
+                       }
+                       sscanf (p, "_%d_%d_%d_%d_%s.5 <==\n", &file_ratio, &active_ratio, &chunk_num, &fs_size_MB, fhmap);
+                       i = chunk_num;
+               }
+               if (strstr(line, "****")) {
+                       if (i==-1) {
+                               printf("error 3\n");
+                               exit(-1);
+                       }
+                       sscanf(line, "****total FRAG_NUM %d td_MB %d td %d tblock_num %d max_blockno %d file_num %d avg_frag_distance %d avg_block_distance %d", &frag_num[0], &td_MB[0], &td[0],  &tblock_num[0], &max_blockno, &file_num, &avg_frag_distance, &avg_block_distance);
+
+#ifdef checkit
+                       distance = td_MB[0];
+                       distance *=1000000;
+                       distance +=td[0];
+                       tll = frag_num[0];
+                       distance /= frag_num[0];
+
+                       if (distance > 1000000000) {
+                               printf ("error 4\n");
+                               exit(-1);
+                       }
+                       avg_frag_distance = distance;
+                       printf("%d %d %d %d %d\n", chunk_num, frag_num[0], avg_frag_distance, td_MB[0], tblock_num[0]);
+#else
+                       printf("%d %d %d %d %d %d\n", chunk_num, frag_num[0], avg_frag_distance, td_MB[0], tblock_num[0], avg_block_distance);
+#endif
+                       i = -1;
+               } 
+       }
+}
+