p_bench_read.c
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* ==== p_bench_read.c ============================================================
  2.  * Copyright (c) 1993 by Chris Provenzano, proven@athena.mit.edu
  3.  *
  4.  * Description : Benchmark reads of /dev/null. Gives a good aprox. of
  5.  *  syscall times.
  6.  *
  7.  *  1.00 93/08/01 proven
  8.  *      -Started coding this file.
  9.  */
  10. #include <pthread.h>
  11. #include <sys/types.h>
  12. #include <sys/time.h>
  13. #include <stdio.h>
  14. #include <fcntl.h>
  15. #include <errno.h>
  16. #define OK 0
  17. #define NOTOK  -1
  18. /* ==========================================================================
  19.  * usage();
  20.  */
  21. void usage(void)
  22. {
  23. printf("p_bench_read [-d?] [-c count] [-s size] [-f file]n");
  24.     errno = 0;
  25. }
  26. main(int argc, char **argv)
  27. {
  28. struct timeval starttime, endtime;
  29. char *infile = "/dev/null";
  30. int count = 1000000;
  31. int debug = 0;
  32. int size = 1;
  33. int fd;
  34. int i;
  35. char word[16384], *word_ptr;
  36.     /* Getopt variables. */
  37.     extern int optind, opterr;
  38.     extern char *optarg;
  39. pthread_init();
  40. while ((word[0] = getopt(argc, argv, "c:df:s:?")) != (char)EOF) {
  41. switch (word[0]) {
  42. case 'c':
  43. count = atoi(optarg);
  44. break;
  45. case 'd':
  46. debug++;
  47. break;
  48. case 'f':
  49. infile = optarg;
  50. break;
  51. case 's':
  52. if ((size = atoi(optarg)) > 8192) {
  53. size = 8192;
  54. }
  55. break;
  56. case '?':
  57. usage();
  58. return(OK);
  59. default:
  60. usage();
  61. return(NOTOK);
  62. }
  63. }
  64. /* Align buffer boundary to a page boundary */
  65. word_ptr = (char *)(((size_t) word + 4095) & ~4095);
  66. if ((fd = open(infile, O_RDONLY)) < OK) {
  67.   perror ("open");
  68.   return 1;
  69. }
  70. if (gettimeofday(&starttime, NULL)) {
  71.   perror ("gettimeofday");
  72.   return 1;
  73. }
  74. for (i = 0; i < count; i++) {
  75. if (read(fd, word_ptr, size) < OK) {
  76. printf("Error: readn");
  77. exit(0);
  78. }
  79. }
  80. if (gettimeofday(&endtime, NULL)) {
  81.   perror ("gettimeofday");
  82.   return 1;
  83. }
  84. printf("%d reads of %s took %d usecs.n", count, infile,
  85. (endtime.tv_sec - starttime.tv_sec) * 1000000 +
  86. (endtime.tv_usec - starttime.tv_usec));
  87. return 0;
  88. }