int totsz
[N
+1] = { 1,512,1024,2048,4096,1024,512 };
int indsz
[N
+1] = { 0,512*512/4,1024*1024/4, 2048*2048/4, 4096*4096/4,1024*1024/4,512*512/4};
int cnt1
,cnt8
, cnt51
, cnt58
;
register struct dinode
*dp
;
fprintf(stderr
, "sizes filsys\n"), exit(1);
read(f
, &filsys
, sizeof (struct filsys
));
tino
= (filsys
.s_isize
-2) * (BSIZE
/ sizeof (struct dinode
)) + 1;
printf("tino %d\n", tino
);
for (inum
= 1; inum
< tino
; inum
++) {
read(f
, inobuf
, sizeof (inobuf
));
nleft
= (BSIZE
* 60) / sizeof (struct dinode
);
dp
= (struct dinode
*)&inobuf
;
blocks
= dp
->di_size
/ 512;
for (i
= 0; i
< N
-1; i
++) {
tot
[i
] += (dp
->di_size
+totsz
[i
]-1)/totsz
[i
];
if (i
&& dp
->di_size
> totsz
[i
] * 10)
tot
[i
] += (dp
->di_size
-totsz
[i
]*10+indsz
[i
]-1)/indsz
[i
];
if (dp
->di_size
< 24*1024) {
tot
[N
] += (dp
->di_size
+511)/512;
cnt51
+= (dp
->di_size
+511)/512;
if (dp
->di_size
> totsz
[i
] * 8)
tot
[N
] += (dp
->di_size
-totsz
[N
]*8+indsz
[N
]-1)/indsz
[N
];
tot
[N
] += 8*((dp
->di_size
+4095)/4096) +
(dp
->di_size
-totsz
[N
]*8+indsz
[N
]-1)/indsz
[N
];
cnt58
+= ((dp
->di_size
+4095)/4096)*8;
if (dp
->di_size
< 24*1024) {
tot
[N
-1] += (dp
->di_size
+1023)/1024;
cnt1
+= (dp
->di_size
+1023)/1024;
if (dp
->di_size
> totsz
[i
] * 8)
tot
[N
-1] += (dp
->di_size
-totsz
[N
-1]*8+indsz
[N
-1]-1)/indsz
[N
-1];
tot
[N
-1] += 8*((dp
->di_size
+8191)/8192) +
(dp
->di_size
-totsz
[N
-1]*8+indsz
[N
-1]-1)/indsz
[N
-1];
cnt8
+= ((dp
->di_size
+8191)/8192)*8;
if (blocks
>= 0 && blocks
< 10000)
printf("lost inum %d size %d\n", inum
, dp
->di_size
);
for (blocks
= 0; blocks
< 10000; blocks
++)
printf("%d\t%d\n", blocks
, counts
[blocks
]);
printf("size\tspace\t\tratio\tblocks\n");
for (blocks
= 0; blocks
< N
+1; blocks
++)
printf("%d\t%d\t%7.4f\t%d\n", totsz
[blocks
],
tot
[blocks
]*totsz
[blocks
],
((float)tot
[blocks
])*totsz
[blocks
]/(float)tot
[0],
printf("cnt1=%d, cnt8=%d\n", cnt1
, cnt8
);
printf("cnt51=%d, cnt58=%d\n", cnt51
, cnt58
);