seek.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. char *id = "$Id$\n";
  2. /*
  3. * Seek - calculate seeks as a function of distance.
  4. *
  5. * Usage: seek file size
  6. *
  7. * Copyright (c) 1994,1995,1996 Larry McVoy. All rights reserved.
  8. */
  9. #include "bench.h"
  10. #define STRIDE 1024*1024
  11. main(ac, av)
  12. int ac;
  13. char *av[];
  14. {
  15. char buf[512];
  16. int disk;
  17. off_t size;
  18. off_t begin, end;
  19. int usecs;
  20. if (ac != 3) {
  21. exit(1);
  22. }
  23. if ((disk = open(av[1], 0)) == -1) {
  24. exit(1);
  25. }
  26. size = atol(av[2]);
  27. switch (av[2][strlen(av[2])-1]) {
  28. case 'k': size <<= 10; break;
  29. case 'K': size *= 1000; break;
  30. case 'm': size <<= 20; break;
  31. case 'M': size *= 1000000; break;
  32. case 'g': size <<= 30; break;
  33. case 'G': size *= 1000000000L; break;
  34. }
  35. /*
  36. * We flip back and forth, in strides of 1MB.
  37. * If we have a 100MB disk, that means we do
  38. * 1, 99, 2, 98, etc.
  39. */
  40. end = size;
  41. begin = 0;
  42. lseek(disk, begin, 0);
  43. read(disk, buf, sizeof(buf));
  44. while (end > begin) {
  45. end -= STRIDE;
  46. start();
  47. lseek(disk, end, 0);
  48. read(disk, buf, sizeof(buf));
  49. usecs = stop();
  50. printf("%.04f %.04f\n", (end - begin) / 1000000., usecs/1000.);
  51. begin += STRIDE;
  52. start();
  53. lseek(disk, begin, 0);
  54. read(disk, buf, sizeof(buf));
  55. usecs = stop();
  56. printf("%.04f %.04f\n", (end - begin) / 1000000., usecs/1000.);
  57. }
  58. exit(0);
  59. }