Hi, I experienced sched_yield() is very slow when other threads are busy on FreeBSD-current. When I run the program: ------------------------------------------------ #include <assert.h> #include <stdio.h> #include <pthread.h> #define NUM_THREAD (10) volatile int run = 0; void *start(void *p) { while (!run) ; return p; } int main() { pthread_t th[NUM_THREAD]; int i; for (i = 0; i < NUM_THREAD; i++) { assert(pthread_create(&th[i], NULL, start, NULL) == 0); sched_yield(); } run = 1; for (i = 0; i < NUM_THREAD; i++) assert(pthread_join(th[i], NULL) == 0); return 0; } ------------------------------------------------ The output of /usr/bin/time: FreeBSD 6.2-RELEASE, libthr, HZ=100, GENERIC kernel: 0.55 real 0.55 user 0.00 sys FreeBSD 7-CURRENT, libthr, HZ=100, kernel include GENERIC nooptions INVARIANTS, INVARIANT_SUPPORT, WITNESS, WITNESS_SKIPSPIN: 164.16 real 162.80 user 0.00 sys I tried SCHED_ULE too, but does not help so much. Increasing HZ helps to perform better, but still very slower than FreeBSD-6. Thanks, -- NIIMI SatoshiReceived on Fri Sep 28 2007 - 17:07:14 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:18 UTC