2 * This fcrypt/crypt speed testing program
3 * is derived from one floating around in
4 * the net. It's distributed along with
5 * UFC-crypt but is not covered by any
8 * @(#)speeds.c 1.11 20 Aug 1996
16 * patch from chip@chinacat.unicom.com (Chip Rosenthal):
17 * you may enable it if your system does not include
18 * a setitimer() function. You'll have to ensure the
19 * existence an environment variable: HZ giving how many
20 * ticks goes per second.
21 * If not existing in your default environment 50, 60
22 * or even 100 may be the right value. Perhaps you should
23 * then use 'time ./ufc 10000' instead of guessing.
29 #include <sys/types.h>
30 #include <sys/times.h>
38 struct tms tstart
, tfinish
;
40 #define ITIME 10 /* Number of seconds to run test. */
42 char *crypt(), *fcrypt();
49 (void) times(&tfinish
);
50 elapsed
= ((tfinish
.tms_utime
+ tfinish
.tms_stime
) -
51 (tstart
.tms_utime
+ tstart
.tms_stime
)) / atoi(hz
);
52 printf("elapsed time = %d sec, CPU time = %f sec\n", ITIME
, elapsed
);
56 printf ("Did %f %s()s per second.\n", ((float) cnt
) / elapsed
,
67 * Silly rewrite of 'bzero'. I do so
68 * because some machines don't have
69 * bzero and some don't have memset.
72 static void clearmem(start
, cnt
)
83 extern char *getenv();
89 if ((hz
= getenv("HZ")) == NULL
) {
90 fprintf(stderr
, "HZ environment parameter undefined\n");
97 printf("Warning: this version of the speed program may run slower when\n");
98 printf("benchmarking UFC-crypt than previous versions. This is because it\n");
99 printf("stresses the CPU hardware cache in order to get benchmark figures\n");
100 printf("that corresponds closer to the performance that can be expected in\n");
101 printf("a password cracker.\n\n");
104 printf ("Running %s for %d seconds of virtual time ...\n",
117 signal(SIGALRM
, Stop
);
120 perror("fork failed");
124 kill(getppid(), SIGALRM
);
127 (void) times(&tstart
);
130 clearmem ((char*)&itv
, (int)sizeof (itv
));
131 signal (SIGVTALRM
, Stop
);
132 itv
.it_value
.tv_sec
= ITIME
;
133 itv
.it_value
.tv_usec
= 0;
134 setitimer (ITIMER_VIRTUAL
, &itv
, NULL
);
139 for (cnt
= 0;; cnt
++)
142 s
= fcrypt (s
, "eek");
144 s
= crypt (s
, "eek");