Lockless uidinfo.

Jeff Roberson jroberson at chesapeake.net
Sat Aug 18 16:33:00 PDT 2007


On Sun, 19 Aug 2007, Pawel Jakub Dawidek wrote:

> On Sun, Aug 19, 2007 at 12:07:56AM +0200, Pawel Jakub Dawidek wrote:
>> Two more things...
>>
>>> The patch below remove per-uidinfo locks:
>>>
>>> 	http://people.freebsd.org/~pjd/patches/uidinfo_lockless.patch
>>
>> We could upgrade from lock-free algorithm I used here to wait-free
>> algorithm, but we don't have atomic_fetchadd_long(). How hard will it be
>> to implement it?
>>
>> We could then change:
>>
>> 	do {
>> 		old = uip->ui_proccnt;
>> 		if (old + diff > max)
>> 			return (0);
>> 	} while (atomic_cmpset_long(&uip->ui_proccnt, old, old + diff) == 0);
>>
>> to something like this:
>>
>> 	if (atomic_fetchadd_long(&uip->ui_proccnt, diff) + diff > max) {
>> 		atomic_subtract_long(&uip->ui_proccnt, diff);
>> 		return (0);
>> 	}
>
> Ok, after implementing atomic_fetchadd_long() on amd64, we get additional
> 6% of performance improvement:
>
> x ./uidinfo_lockfree.txt (atomic_cmpset_long loop)
> + ./uidinfo_waitfree.txt (atomic_fetchadd_long)
> +------------------------------------------------------------------------------+
> |                                                                             +|
> |                                                                             +|
> |x   xx    xx                                                              + ++|
> |  |__MA___|                                                                |AM|
> +------------------------------------------------------------------------------+
>    N           Min           Max        Median           Avg        Stddev
> x   5       1561566       1575987       1568964       1569767     5853.1399
> +   5       1662362       1665936       1665810     1664881.8     1541.2693
> Difference at 95.0% confidence
>        95114.8 +/- 6241.96
>        6.05917% +/- 0.397636%
>        (Student's t, pooled s = 4279.88)

How does this effect the single-threaded performance?  Do you attribute 
this to atomic fetchadd being cheaper than atomic cmpset?  What is your 
processor?

Thanks,
Jeff

>
> -- 
> Pawel Jakub Dawidek                       http://www.wheel.pl
> pjd at FreeBSD.org                           http://www.FreeBSD.org
> FreeBSD committer                         Am I Evil? Yes, I Am!
>


More information about the freebsd-arch mailing list