sched_yield() is very slow when other threads are busy on FreeBSD-current

Jeff Roberson jroberson at chesapeake.net
Tue Oct 2 01:11:38 PDT 2007


On Sat, 29 Sep 2007, NIIMI Satoshi wrote:

> Hi,
>
> I experienced sched_yield() is very slow when other threads are busy
> on FreeBSD-current.

Hello,

Can you please try the enclosed patch and tell me if it addresses your 
problem?

Thanks,
Jeff

>
> 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 Satoshi
> _______________________________________________
> freebsd-threads at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-threads
> To unsubscribe, send any mail to "freebsd-threads-unsubscribe at freebsd.org"
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: relinquish.diff
Type: text/x-diff
Size: 1087 bytes
Desc: 
Url : http://lists.freebsd.org/pipermail/freebsd-threads/attachments/20071002/3c98dec5/relinquish.bin


More information about the freebsd-threads mailing list