Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 05 Jun 2012 14:33:42 +0100
From:      "Niall Douglas" <s_sourceforge@nedprod.com>
To:        freebsd-threads@freebsd.org
Subject:   Re: Inter Process Synchronisation
Message-ID:  <4FCE0AB6.32705.5122593A@s_sourceforge.nedprod.com>
In-Reply-To: <4FCDF845.9080704@inforcept.com>
References:  <4FCDF845.9080704@inforcept.com>

next in thread | previous in thread | raw e-mail | index | archive | help
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"


-- 
Technology & Consulting Services - ned Productions Limited.
http://www.nedproductions.biz/. VAT reg: IE 9708311Q.
Work Portfolio: http://careers.stackoverflow.com/nialldouglas/






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