Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 06 Jun 2012 09:52:35 +0300
From:      Resit Sahin <resit.sahin@inforcept.com>
To:        freebsd-threads@freebsd.org
Subject:   Re: Inter Process Synchronisation
Message-ID:  <4FCEFE33.9010708@inforcept.com>
In-Reply-To: <4FCE0AB6.32705.5122593A@s_sourceforge.nedprod.com>
References:  <4FCDF845.9080704@inforcept.com> <4FCE0AB6.32705.5122593A@s_sourceforge.nedprod.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello,

I thought i can ask inter-process related issues in this list. Which 
list is appropriate for such issues?

I did not get why should i need to create a new copy of the stats each 
time? I have users and a counter for each user. This counter is 
incremented for each incoming network packet destined to this user. I 
consider to use a semaphore for the whole data structure. This means i 
have to lock the semaphore at least 100.000 times a second and all 
processes have to wait for that. Is it possible to use a semaphore so 
frequent? I would lock only the specific user if was able to use 
memory-based semaphores but i can use named semaphores only as we are 
using FreeBSD 8.2 at the moment.

My structure:
User1,counter=x
User2,counter=y
..........................

I wanted to post in this list because i want to learn if there are other 
ways to synchronise between processes without using semaphores. As far 
as i understand from your answer i can use atomic variables between 
multiple processes. Do you mean this 
<http://www.freebsd.org/cgi/man.cgi?query=atomic_add&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html>; 
with atomic operations?



On 06/05/2012 04:33 PM, Niall Douglas wrote:
> General programming questions aren't really an appropriate topic for
> this list. However, if I were you, I'd have an atomic pointer which
> points to the "current" version of the statistics. I'd then write a
> new copy of the statistics each time there is a new copy, having an
> atomic incremented usage count per copy, and set the "current"
> version pointer atomically. When the atomic usage count goes to zero,
> you retire that memory section for reuse if it is no longer current.
>
> The reason you should choose this design is because it's friendly on
> cache coherency. You only have one cache line for the "current"
> version pointer being bounced between all CPU cores rather than all
> the cache lines which make up your statistics.
>
> Niall
>
> On 5 Jun 2012 at 15:15, Resit Sahin wrote:
>
>> Hello Everybody,
>>
>>
>> I am working on a multi process system. I have 10 or more processes
>> (that are created with fork) and i want to synchronise them. There is a
>> data structure which must be shared among the processes. The data
>> structure contains statistics about some users which are more then some
>> thousands. Each process needs to "read from" / "write to" this data
>> structure thousands of times in a second. They all may need to update it
>> 500.000 times a second in total.  This is the scenario i need to build.
>>
>> I am using NUMA architecture and ia64 CPUs like E5506.
>>
>> I have investigated the options i have in FreeBSD and come up with few
>> solutions. I am already using sockets for inter-process communication
>> but it does not seem to be suitable for the above scenario. It is very
>> slow.
>>
>> The most suitable way seems to create a shared memory between the
>> processes. The question is how to synchronise the access to the memory:
>>
>> I have found two solutions for synchronisation. One is mutexes and
>> other is semaphores.
>>
>> The mutexes works only between threads but not between processes. Is
>> there any support for inter process mutexes in FreeBSD 8.2 ?
>>
>> The second option is semaphores. There are two types of semaphores, they
>> are named semaphores and the memory based semaphores. Memory based
>> semaphores seem to be a better option but they do not support inter
>> process operation in FreeBSD 8.2 .
>>
>> The only option seems to be using named semaphores and locking the whole
>> data structure for each access. Would it be feasible to use named
>> semaphores for locking 500.000 times a second?
>>
>>
>>
>> I have read about atomic operations here:
>> http://www.freebsd.org/cgi/man.cgi?query=atomic_add&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html
>>
>>
>> Would atomic operations be an option in my case?
>>
>> The manual page says :
>>
>> "On the i386 architecture, the cache coherency
>>        model requires that the hardware perform this task, thus the atomic oper-
>>        ations are atomic across multiple processors.  On the ia64 architecture,
>>        coherency is only guaranteed for pages that are configured to using a
>>        caching policy of either uncached or write back."
>>
>>
>> Is it safe to use named semaphores for*ia64* architecture ? Does FreeBSD
>> 8.2 support interprocess locking for ia64 architecture?
>>
>>
>>
>> Kind Regards
>> Res,i S,ahin
>>
>> _______________________________________________
>> freebsd-threads@freebsd.org mailing list
>> http://lists.freebsd.org/mailman/listinfo/freebsd-threads
>> To unsubscribe, send any mail to "freebsd-threads-unsubscribe@freebsd.org"
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FCEFE33.9010708>