More new schedule() results ...

Davide Libenzi (dlibenzi@maticad.it)
Fri, 11 Jun 1999 02:37:18 +0200 (CEST)


This is a multimedia message in MIME format. If you are reading this
prefix, your mail reader does not understand MIME or is not currently
configured to parse MIME messages. You may wish to look into
upgrading to a mail reader that does.

--kkbhccbdehge-pcdavide.home-02561-0
Content-Type: text/plain; charset=us-ascii

Hi guys,

as requested by mingo I post the switching speed results of
my new schedule() implementation.
More tests has been done and these are the benchmarks on my
PII 400MHz ( using the program posted with my first annouce ):

Test time = 60s

N.Threads 2.3.5 MyPatch Diff

2 700000 600000 -15 %
10 280000 365000 +25 %
450 6100 8900 +45 %

The 450 threads test has given, some times, values of about 10800
with improvement near to 80 %.
The results of these tests is clear.
When You have 2 threads You have no switching overload on Your system
and my implementation must pay the cost of the slot insertion.
But with only 10 threads You have a switching speed increased of about 25 %
that linear grow up to 60-80 %.

Since some guys has asked my the patch because they lose the first post,
I include it with this mail as long as the test program ( THX to Willy Terreau).

Cheers,
Davide.

--
"Debian, the Freedom in Freedom."

--kkbhccbdehge-pcdavide.home-02561-0 Content-Type: application/octet-stream Content-Transfer-Encoding: base64

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

--kkbhccbdehge-pcdavide.home-02561-0 Content-Type: text/plain Content-Transfer-Encoding: 7bit

/* Tester for the kernel's speed in scheduling. (C) 1999 / Willy Tarreau <willy@meta-x.org>

Modified by Davide Libenzi <davidel@maticad.it>

You can do whatever you want with this program, but I'm not responsible for any misuse. Be aware that it can heavily load a host. As it is multithreaded, it might take advantages of SMP.

It basically creates a growing amount of threads and measures their cumulative work (i.e. loop iterations/second). The output is easily useable by gnuplot.

To compile, you need libpthread :

gcc -O2 -fomit-frame-pointer -o threads threads.c -lpthread

Output on stdout is : <nb_threads> <average_work> <zero_work_threads> <std_deviation>

*/

#include <stdio.h> #include <pthread.h> #include <signal.h> #include <unistd.h> #include <time.h>

#define MAXTHREADS 450 #define MEASURE_TIME 60

pthread_t thr[MAXTHREADS]; int nbthreads = MAXTHREADS; int measure_time = MEASURE_TIME; volatile actthreads = 0;

long long int totalwork[MAXTHREADS]; volatile int stop = 0, start = 0, count = 0;

void oneatwork(int thr) { int i; while (!start) /* don't disturb pthread_create() */ usleep(10000);

actthreads++; while (!stop) { if (count) totalwork[thr]++;

syscall(158); /* sys_sched_yield() */ } actthreads--; pthread_exit(0); }

main(int argc, char **argv) {

int i, err, avgwork, thrzero; long long int value, avgvalue; double sqrdev; time_t ts, te;

if (argc < 3) { printf("usage: %s threads time\n", argv[0]); exit(1); }

nbthreads = atoi(argv[1]); measure_time = atoi(argv[2]); start = 0; count = 0; stop = 0; actthreads = 0; thrzero = 0; value = 0; sqrdev = 0.0;

fprintf(stderr, "\nCreating %d threads ...", nbthreads); for (i = 0; i < nbthreads; i++) { if ((err = pthread_create(&thr[i], NULL, (void *) &oneatwork, (void *) i)) != 0) { fprintf(stderr, "thread %d pthread_create=%d -> ", i, err); perror(""); exit(1); } pthread_detach(thr[i]); }

for (i = 0; i < nbthreads; i++) totalwork[i] = 0;

fprintf(stderr, " OK !\nWaiting for all threads to start ...");

start = 1; while (actthreads != nbthreads) usleep(10000); /* waiting for a bit of stability */

fprintf(stderr, "Go !\n");

count = 1; time(&ts);

sleep(measure_time);

count = 0; stop = 1; time(&te);

for (i = 0; i < nbthreads; i++) { value += totalwork[i]; if (totalwork[i] == 0) ++thrzero; } avgvalue = value / nbthreads; value /= (int) difftime(te, ts); avgwork = (int) (value / nbthreads);

for (i = 0; i < nbthreads; i++) { double difvv = (double) (totalwork[i] - avgvalue);

sqrdev += difvv * difvv; }

while (actthreads > 0) usleep(10000);

printf("%d\t\t%lld\t\t%d\t\t%d\t\t%f\n", nbthreads, value, avgwork, thrzero, sqrdev / ((double) nbthreads * avgvalue * avgvalue));

exit(0);

}

--kkbhccbdehge-pcdavide.home-02561-0--

DO NOT DELETE the above boundary line. Anything placed after this line will be ignored by MIME readers.

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/