Subject: Re: memsync() proposal (Was: Re: cacheflush() proposal)
To: None <eeh@netbsd.org>
From: Ignatios Souvatzis <is@jocelyn.rhein.de>
List: tech-userlevel
Date: 02/06/1999 21:17:25
On Fri, Feb 05, 1999 at 09:10:23AM -0800, Eduardo E. Horvath wrote:
> On Thu, 4 Feb 1999, Ignatios Souvatzis wrote:
>
> > > | CACHESYNC_GLOBAL
> > > |
> > > | as above, but for multi-threaded applications.
> > >
> > > This is identical to CACHESYNC for single CPU machines, or at least
> > > architectures. However: cgd mentioned (elsewhere) nobody should want this,
> > > and if yes, that this could be done by STOREBAR (see below),
> > > application-internal synchronization, and CACHESYNC in all threads. Opinions?
>
> On a multiprocessor machine CACHESYNC_GLOBAL would need to be used in
> situations where it is necessary to tell other processors to do a
> CACHESYNC because there are no convenient synchronization points. For
> instance, if you have the JIT compiler running on once CPU and the other
> CPUs are executing already compiled code, when the JIT compiler completes
> compilation of a code block it will need to inform the other CPUs to flush
> the appropriate sections of their caches. Adding some way to tell all the
> other CPUs to issue a CACHESYNC is problematical and would affect
> performance, whereas a CACHESYNC_GLOBAL would issue cross-call interrupts
> or equivalent to all CPUs to flush their caches immediately.
>
> But this is a rather obscure application, and since there really aren't
> that many JIT compilers, I don't expect it to be used very often. OTOH,
> the STOREBAR and LOOKASIDE would probably be used much more often for
> spinlocks, etc.
So, what does should I do?
I understand the question is academic, as long as we do not have SMPs...
on our m68k machines, we'll just have CACHESYNC_GLOBAL == CACHESYNC.
Regards,
Ignatios