m and n of mkfs
agp at mh3bs.UUCP
agp at mh3bs.UUCP
Sun Nov 20 01:45:58 AEST 1983
A few USENIX conferences ago, someone presented a
paper on computing optimal magic numbers for a
cpu/disk pair. For what it is worth, I will post
their program here:
#include <stdio.h>
#define SECTORS (disk[n].d_sec_tk * disk[n].d_surf)
struct cpu
{
char *cpu_name;
int Bps;
};
struct cpu cpu[] =
{
"PDP23", 119,
"pdp23", 119,
"11/23", 119,
"23", 119,
"PDP34", 119,
"pdp34", 119,
"11/34", 119,
"34", 119,
"PDP45", 170,
"pdp45", 170,
"11/45", 170,
"45", 170,
"PDP70", 210,
"pdp70", 210,
"11/70", 210,
"70", 210,
"VAX780", 210,
"vax780", 210,
"11/780", 210,
"780", 210,
"VAX", 210,
"vax", 210,
NULL, NULL
};
struct disk
{
char *d_name;
int d_spin;
int d_sec_tk;
int d_byte_bk;
int d_surf;
int d_cyl;
int d_tk_seek;
int d_avg_seek;
};
struct disk disk[] =
{
/* disk spin sec_tk byte_blk surf cyl tk_seek avg_seek */
"rk05", 1500, 12, 512, 2, 203, 10, 50,
"rl01", 2400, 20, 256, 2, 256, 15, 55,
"rp03", 2400, 10, 512, 20, 406, 8, 29,
"rp04", 3600, 22, 512, 19, 411, 7, 28,
"rp05", 3600, 22, 512, 19, 411, 6, 29,
"rp06", 3600, 22, 512, 19, 815, 6, 29,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
main(argc,argv)
char **argv;
{
register int k, n, i;
int block, speed;
int f_n;
for(k=0; cpu[k].cpu_name[0] != NULL; ++k) {
if(strcmp(argv[1],cpu[k].cpu_name) == 0) break;
}
if(cpu[k].Bps == NULL) {
printf("unknown cpu: %s\n",argv[1]);
exit(1);
}
for(n=0; disk[n].d_name[0] != NULL; ++n) {
block=((disk[n].d_spin/10)*disk[n].d_sec_tk);
speed=((60*(cpu[k].Bps + 1))/10);
for(i=1; i <= disk[n].d_surf; ++i) {
f_n = SECTORS / i;
if(f_n >= 100) continue;
if((SECTORS % i) == 0) {
if((f_n % disk[n].d_sec_tk) == 0) break;
}
break;
}
printf("%s: %d / %d",
disk[n].d_name,
(block / speed) + 1, SECTORS);
printf("\n");
}
}
More information about the Comp.unix.wizards
mailing list