minix/test/select/speed.c
2010-07-06 11:29:23 +00:00

62 lines
1.4 KiB
C

/*
* Test name: speed.c
*
* Objetive: Test the time it takes for select to run.
*
* Description: This tests creates a number of udp connections and performs
* a select call waiting on them for reading with timeout of 0.
* This is done 10,000 thousands of times and then the average time it takes
* is computed
*
* Jose M. Gomez
*/
#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/select.h>
#include <sys/asynchio.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <net/netlib.h>
#include <time.h>
#define NUMBER 12
int main(int argc, char *argv[])
{
char *udp_device;
int fd[NUMBER];
fd_set fds_write;
struct timeval timeout;
time_t start_time, end_time;
int i;
FD_ZERO(&fds_write);
for (i = 0; i < NUMBER; i++) {
fd[i] = open("/dev/tty", O_RDWR);
if (fd[i] < 0) {
fprintf(stderr, "Error opening tty %d\n", i);
exit(-1);
}
FD_SET(fd[i], &fds_write);
}
printf("Select will send 1 msg to terminal and %d to inet: \n", NUMBER);
timeout.tv_sec = 0;
timeout.tv_usec = 0;
/* get initial time */
start_time = time(NULL);
for (i = 0; i < 32000; i++) {
select(NUMBER + 4, NULL, &fds_write, NULL, &timeout);
}
/* get final time */
end_time = time(NULL);
printf("The select call took on average: %f\n", (float)(end_time - start_time) / 32000.0);
for (i = 0; i < NUMBER; i++) {
close(fd[i]);
}
return 0;
}