I simplified my program to the very basic minimum, it gets ipc key, gets semaphore id and reads values of semaphores and then it outputs on line (time and semaphore values). That is all it does.
Then I run it in following manner:
$ while : ; do tstshow; done > x.txt
and I hit interrupt key after waiting for some time.
sample of the x.txt file content:
1221785538 [1,99]
1221785538 [1,99]
1221785538 [1,99]
Then to see how many times system was able to run it I do:
$ cut -c-12 x.txt | uniq -c
sample of the output:
616 1221785538
615 1221785539
612 1221785540
That tels me the system is capable of running this simple process just roughly 600 times per second.
Just to be consistent I would repeat results here:
PIII under Linux - 900 times/sec
Xeon 3.2 Linux - 600 times/sec
Xeon 3.2 SCO - 1800 times/sec
Systems are idle at the time of test.
How would you explain the results I got? I am trying to find a bottleneck on the modern h/w running Linux.
Please see my new simplified code below:
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#define NSEMS 2
main(int argc, char *argv[])
{
int sid;
ushort vals[NSEMS] = {0, 0};
if((sid = semget(get_ipc_key(), NSEMS, 0)) == -1)
{
errexit("Can Not Get Semaphore ID");
}
if(semctl(sid, NSEMS, GETALL, vals) == -1)
{
errexit("Can Not Get Semaphore Values");
}
printf("%12li [%i,%i]\n", time(NULL), vals[0], vals[1]);
exit(0);
}