I am investigating some locking scheme using semaphores. To evaluate basic system speed I run a loop of getting some semaphore info and display it:
while : ; do ./semshow; done > res.txt
I ran this on 3 boxes - two similar modern HP XEON boxes, one running SCO OpenServer 5, the other is Fedora 2.6.9, and one old PIII box under modern Linux (have no info).
The results are very counter intuitive: H/W | OS | avg number of runs ber sec ---- | --- | ------------------------- XEON | SCO | 1700 XEON | Fedora | 500 PIII | Linux (recent distro, unknown) | 900
All three systems were pretty much idle at the test run time.
I would like to ask, what would be the factors that makes ancient Unix to outperform modern OSes, also, how come PIII box outperform modern XEON box under similar OS. Any ponters would be appreciated.
The semshow program is very basic, see listing below:
semlib.h has these defs:
Here's one answer: your time measurement is buggy. See man on ftime() under Linux:
Quote:
This function is obsolete. Don't use it. If the time in seconds suffices, time(2) can
be used; gettimeofday(2) gives microseconds; clock_gettime(3) gives nanoseconds but
is not yet widely available.
Under libc4 and libc5 the millitm field is meaningful. But early glibc2 is buggy and
returns 0 there; glibc 2.1.1 is correct again.
The Fedora box has /lib/tls/libc.so.6 -> libc-2.3.5.so
so, I assume the version is 2.3.5.
But that is besides the point.
The pure number of times system ran the program within a second would indicate overall system's power, so to speak. To my astonishment PIII under linux managed to run almost twice as many cycles withi a second than Xeon 3.2GHz under linux. Then the same Xeon h/w under old SCO OSR run twice as fast as PIII box.
But Problem #1 is that you are measuring this the wrong way. You have too many dependencies on library calls that are irrelevant to what you are trying to measure. Take out ALL the semaphore code, re-test, and see what times you get. Or, run a 10,000 x loop around the semaphore. Then scale down to the nearest second so that microseconds mistimings aren't coming into play.
Problem #2 is that semaphores require bus-access and are relatively independent of Processor speed.
I replaced the ftime with gettimeofday and re-run, the results are the same.
To summarize again, same h/w :
program under SCO runs 3 times faster than under Linux, same OS :
program runs 2 times faster on old PIII than on modern Xeon
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.
I was asked to add this piece of code to a c program which I will execute through the shell:
for(long i = 0; i < NITER; i++)
{ sem_wait( &sema);
count++;
sem_post( &sema); }
I didn't get it, which is the critical section ? if it's "count++" how would a thread wake up in order to enter it... (1 Reply)
If I create a semaphore and then I fork a number of child processes then all the child process use that same semaphore.
Since the process address spaces are different rfom each other then how all the child process are able to access the same semaphore?
I understand that semaphore/mutex is at os... (0 Replies)
Control two exclusively shared resources(semaphore). The two resources are two files. The producer will write even numbers to one file, and odd numbers to another one. The consumer respectively reads from each file until it gets 5 even numbers and 5 odd numbers.
Can any one help me with the... (0 Replies)
I analysed disk performance with blktrace and get some data:
read:
8,3 4 2141 2.882115217 3342 Q R 195732187 + 32
8,3 4 2142 2.882116411 3342 G R 195732187 + 32
8,3 4 2144 2.882117647 3342 I R 195732187 + 32
8,3 4 2145 ... (1 Reply)
Hi,
I am looking to use a semaphore for the first time in one of my scripts. I am just wondering if there are any simple examples or tutorials around?
I am a beginner so the simpler the better :)
Thanks
-Jaken (2 Replies)
Hello,
I have a Supermicro server with a P4SCI mother board running Debian Sarge 3.1. This is the "dmidecode" output related to RAM info:
RAM speed information is incomplete.. "Current Speed: Unknown", is there anyway/soft to get the speed of installed RAM modules? thanks!!
Regards :)... (0 Replies)