--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/