lat_fs.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /*
  2. * Benchmark creates & deletes.
  3. */
  4. char *id = "$Id$\n";
  5. #include <math.h>
  6. #include "bench.h"
  7. #include "confidence.h"
  8. #include "timing.h"
  9. #ifndef ITER
  10. #define ITER 1000
  11. #endif
  12. #define S 5
  13. void mkfile(char *s, int sz);
  14. int
  15. main(int ac, char **av)
  16. {
  17. static int sizes[] = { 0, 1024, 4096, 10*1024 };
  18. extern char *names[];
  19. int i, j, pos;
  20. double tmp, create_m, delete_m;
  21. double create_mean, delete_mean, create_var, delete_var;
  22. double time_spent;
  23. /* Just a guess. on average, get through ~500 in S time */
  24. double *create_times = malloc(sizeof(double) * ITER);
  25. double *delete_times = malloc(sizeof(double) * ITER);
  26. if (create_times == NULL || delete_times == NULL) {
  27. fprintf(stderr, "OUT OF MEMORY\n");
  28. return -1;
  29. }
  30. if (ac == 2) {
  31. chdir(av[1]);
  32. }
  33. for (i = 0; i < sizeof(sizes)/sizeof(int); ++i) {
  34. pos = 0;
  35. /*
  36. * Go around the loop a few times for those really fast Linux
  37. * boxes.
  38. */
  39. for (time_spent = create_m = delete_m = 0; time_spent <= S; ) {
  40. start(0);
  41. for (j = 0; j < ITER; ++j) {
  42. mkfile(names[j], sizes[i]);
  43. }
  44. tmp = stop(0,0) / 1000000.;
  45. create_times[pos] = tmp;
  46. if (create_m == 0 || create_m > tmp) {
  47. create_m = tmp;
  48. }
  49. time_spent += tmp;
  50. start(0);
  51. for (j = 0; j < ITER; ++j) {
  52. unlink(names[j]);
  53. }
  54. tmp = stop(0,0) / 1000000.;
  55. delete_times[pos++] = tmp;
  56. if (delete_m == 0 || delete_m > tmp) {
  57. delete_m = tmp;
  58. }
  59. time_spent += tmp;
  60. }
  61. create_mean = calc_mean_rate(create_times, pos, ITER);
  62. create_var = calc_variance_rate(create_mean, create_times, pos, ITER);
  63. delete_mean = calc_mean_rate(delete_times, pos, ITER);
  64. delete_var = calc_variance_rate(delete_mean, delete_times, pos, ITER);
  65. fprintf(stderr, "%dk\tN=%d\n", sizes[i]>>10, ITER);
  66. fprintf(stderr, "\tcreate/time max=%.0f\t mean=%.0f (+/-%.0f)\n",
  67. ITER / create_m, create_mean,
  68. ci_width(sqrt(create_var), pos));
  69. fprintf(stderr, "\tdelete/time max=%0.f\t mean=%.0f (+/-%.0f)\n",
  70. ITER / delete_m, delete_mean,
  71. ci_width(sqrt(delete_var), pos));
  72. }
  73. return(0);
  74. }
  75. void
  76. mkfile(char *s, int sz)
  77. {
  78. int fd = creat(s, 0666);
  79. char buf[128*1024]; /* XXX - track sizes */
  80. write(fd, buf, sz);
  81. close(fd);
  82. }
  83. char *names[] = {
  84. "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
  85. "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
  86. "u", "v", "w", "x", "y", "z", "aa", "ab", "ac", "ad",
  87. "ae", "af", "ag", "ah", "ai", "aj", "ak", "al", "am", "an",
  88. "ao", "ap", "aq", "ar", "as", "at", "au", "av", "aw", "ax",
  89. "ay", "az", "ba", "bb", "bc", "bd", "be", "bf", "bg", "bh",
  90. "bi", "bj", "bk", "bl", "bm", "bn", "bo", "bp", "bq", "br",
  91. "bs", "bt", "bu", "bv", "bw", "bx", "by", "bz", "ca", "cb",
  92. "cc", "cd", "ce", "cf", "cg", "ch", "ci", "cj", "ck", "cl",
  93. "cm", "cn", "co", "cp", "cq", "cr", "cs", "ct", "cu", "cv",
  94. "cw", "cx", "cy", "cz", "da", "db", "dc", "dd", "de", "df",
  95. "dg", "dh", "di", "dj", "dk", "dl", "dm", "dn", "do", "dp",
  96. "dq", "dr", "ds", "dt", "du", "dv", "dw", "dx", "dy", "dz",
  97. "ea", "eb", "ec", "ed", "ee", "ef", "eg", "eh", "ei", "ej",
  98. "ek", "el", "em", "en", "eo", "ep", "eq", "er", "es", "et",
  99. "eu", "ev", "ew", "ex", "ey", "ez", "fa", "fb", "fc", "fd",
  100. "fe", "ff", "fg", "fh", "fi", "fj", "fk", "fl", "fm", "fn",
  101. "fo", "fp", "fq", "fr", "fs", "ft", "fu", "fv", "fw", "fx",
  102. "fy", "fz", "ga", "gb", "gc", "gd", "ge", "gf", "gg", "gh",
  103. "gi", "gj", "gk", "gl", "gm", "gn", "go", "gp", "gq", "gr",
  104. "gs", "gt", "gu", "gv", "gw", "gx", "gy", "gz", "ha", "hb",
  105. "hc", "hd", "he", "hf", "hg", "hh", "hi", "hj", "hk", "hl",
  106. "hm", "hn", "ho", "hp", "hq", "hr", "hs", "ht", "hu", "hv",
  107. "hw", "hx", "hy", "hz", "ia", "ib", "ic", "id", "ie", "if",
  108. "ig", "ih", "ii", "ij", "ik", "il", "im", "in", "io", "ip",
  109. "iq", "ir", "is", "it", "iu", "iv", "iw", "ix", "iy", "iz",
  110. "ja", "jb", "jc", "jd", "je", "jf", "jg", "jh", "ji", "jj",
  111. "jk", "jl", "jm", "jn", "jo", "jp", "jq", "jr", "js", "jt",
  112. "ju", "jv", "jw", "jx", "jy", "jz", "ka", "kb", "kc", "kd",
  113. "ke", "kf", "kg", "kh", "ki", "kj", "kk", "kl", "km", "kn",
  114. "ko", "kp", "kq", "kr", "ks", "kt", "ku", "kv", "kw", "kx",
  115. "ky", "kz", "la", "lb", "lc", "ld", "le", "lf", "lg", "lh",
  116. "li", "lj", "lk", "ll", "lm", "ln", "lo", "lp", "lq", "lr",
  117. "ls", "lt", "lu", "lv", "lw", "lx", "ly", "lz", "ma", "mb",
  118. "mc", "md", "me", "mf", "mg", "mh", "mi", "mj", "mk", "ml",
  119. "mm", "mn", "mo", "mp", "mq", "mr", "ms", "mt", "mu", "mv",
  120. "mw", "mx", "my", "mz", "na", "nb", "nc", "nd", "ne", "nf",
  121. "ng", "nh", "ni", "nj", "nk", "nl", "nm", "nn", "no", "np",
  122. "nq", "nr", "ns", "nt", "nu", "nv", "nw", "nx", "ny", "nz",
  123. "oa", "ob", "oc", "od", "oe", "of", "og", "oh", "oi", "oj",
  124. "ok", "ol", "om", "on", "oo", "op", "oq", "or", "os", "ot",
  125. "ou", "ov", "ow", "ox", "oy", "oz", "pa", "pb", "pc", "pd",
  126. "pe", "pf", "pg", "ph", "pi", "pj", "pk", "pl", "pm", "pn",
  127. "po", "pp", "pq", "pr", "ps", "pt", "pu", "pv", "pw", "px",
  128. "py", "pz", "qa", "qb", "qc", "qd", "qe", "qf", "qg", "qh",
  129. "qi", "qj", "qk", "ql", "qm", "qn", "qo", "qp", "qq", "qr",
  130. "qs", "qt", "qu", "qv", "qw", "qx", "qy", "qz", "ra", "rb",
  131. "rc", "rd", "re", "rf", "rg", "rh", "ri", "rj", "rk", "rl",
  132. "rm", "rn", "ro", "rp", "rq", "rr", "rs", "rt", "ru", "rv",
  133. "rw", "rx", "ry", "rz", "sa", "sb", "sc", "sd", "se", "sf",
  134. "sg", "sh", "si", "sj", "sk", "sl", "sm", "sn", "so", "sp",
  135. "sq", "sr", "ss", "st", "su", "sv", "sw", "sx", "sy", "sz",
  136. "ta", "tb", "tc", "td", "te", "tf", "tg", "th", "ti", "tj",
  137. "tk", "tl", "tm", "tn", "to", "tp", "tq", "tr", "ts", "tt",
  138. "tu", "tv", "tw", "tx", "ty", "tz", "ua", "ub", "uc", "ud",
  139. "ue", "uf", "ug", "uh", "ui", "uj", "uk", "ul", "um", "un",
  140. "uo", "up", "uq", "ur", "us", "ut", "uu", "uv", "uw", "ux",
  141. "uy", "uz", "va", "vb", "vc", "vd", "ve", "vf", "vg", "vh",
  142. "vi", "vj", "vk", "vl", "vm", "vn", "vo", "vp", "vq", "vr",
  143. "vs", "vt", "vu", "vv", "vw", "vx", "vy", "vz", "wa", "wb",
  144. "wc", "wd", "we", "wf", "wg", "wh", "wi", "wj", "wk", "wl",
  145. "wm", "wn", "wo", "wp", "wq", "wr", "ws", "wt", "wu", "wv",
  146. "ww", "wx", "wy", "wz", "xa", "xb", "xc", "xd", "xe", "xf",
  147. "xg", "xh", "xi", "xj", "xk", "xl", "xm", "xn", "xo", "xp",
  148. "xq", "xr", "xs", "xt", "xu", "xv", "xw", "xx", "xy", "xz",
  149. "ya", "yb", "yc", "yd", "ye", "yf", "yg", "yh", "yi", "yj",
  150. "yk", "yl", "ym", "yn", "yo", "yp", "yq", "yr", "ys", "yt",
  151. "yu", "yv", "yw", "yx", "yy", "yz", "za", "zb", "zc", "zd",
  152. "ze", "zf", "zg", "zh", "zi", "zj", "zk", "zl", "zm", "zn",
  153. "zo", "zp", "zq", "zr", "zs", "zt", "zu", "zv", "zw", "zx",
  154. "zy", "zz", "aaa", "aab", "aac", "aad", "aae", "aaf", "aag", "aah",
  155. "aai", "aaj", "aak", "aal", "aam", "aan", "aao", "aap", "aaq", "aar",
  156. "aas", "aat", "aau", "aav", "aaw", "aax", "aay", "aaz", "aba", "abb",
  157. "abc", "abd", "abe", "abf", "abg", "abh", "abi", "abj", "abk", "abl",
  158. "abm", "abn", "abo", "abp", "abq", "abr", "abs", "abt", "abu", "abv",
  159. "abw", "abx", "aby", "abz", "aca", "acb", "acc", "acd", "ace", "acf",
  160. "acg", "ach", "aci", "acj", "ack", "acl", "acm", "acn", "aco", "acp",
  161. "acq", "acr", "acs", "act", "acu", "acv", "acw", "acx", "acy", "acz",
  162. "ada", "adb", "adc", "add", "ade", "adf", "adg", "adh", "adi", "adj",
  163. "adk", "adl", "adm", "adn", "ado", "adp", "adq", "adr", "ads", "adt",
  164. "adu", "adv", "adw", "adx", "ady", "adz", "aea", "aeb", "aec", "aed",
  165. "aee", "aef", "aeg", "aeh", "aei", "aej", "aek", "ael", "aem", "aen",
  166. "aeo", "aep", "aeq", "aer", "aes", "aet", "aeu", "aev", "aew", "aex",
  167. "aey", "aez", "afa", "afb", "afc", "afd", "afe", "aff", "afg", "afh",
  168. "afi", "afj", "afk", "afl", "afm", "afn", "afo", "afp", "afq", "afr",
  169. "afs", "aft", "afu", "afv", "afw", "afx", "afy", "afz", "aga", "agb",
  170. "agc", "agd", "age", "agf", "agg", "agh", "agi", "agj", "agk", "agl",
  171. "agm", "agn", "ago", "agp", "agq", "agr", "ags", "agt", "agu", "agv",
  172. "agw", "agx", "agy", "agz", "aha", "ahb", "ahc", "ahd", "ahe", "ahf",
  173. "ahg", "ahh", "ahi", "ahj", "ahk", "ahl", "ahm", "ahn", "aho", "ahp",
  174. "ahq", "ahr", "ahs", "aht", "ahu", "ahv", "ahw", "ahx", "ahy", "ahz",
  175. "aia", "aib", "aic", "aid", "aie", "aif", "aig", "aih", "aii", "aij",
  176. "aik", "ail", "aim", "ain", "aio", "aip", "aiq", "air", "ais", "ait",
  177. "aiu", "aiv", "aiw", "aix", "aiy", "aiz", "aja", "ajb", "ajc", "ajd",
  178. "aje", "ajf", "ajg", "ajh", "aji", "ajj", "ajk", "ajl", "ajm", "ajn",
  179. "ajo", "ajp", "ajq", "ajr", "ajs", "ajt", "aju", "ajv", "ajw", "ajx",
  180. "ajy", "ajz", "aka", "akb", "akc", "akd", "ake", "akf", "akg", "akh",
  181. "aki", "akj", "akk", "akl", "akm", "akn", "ako", "akp", "akq", "akr",
  182. "aks", "akt", "aku", "akv", "akw", "akx", "aky", "akz", "ala", "alb",
  183. "alc", "ald", "ale", "alf", "alg", "alh", "ali", "alj", "alk", "all",
  184. };