Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 Mar 2003 13:41:25 +1100 (EST)
From:      Bruce Evans <bde@zeta.org.au>
To:        Peter Wemm <peter@wemm.org>
Cc:        Dag-Erling =?iso-8859-1?q?Sm=F8rgrav?= <des@ofug.org>
Subject:   Re: Checksum/copy 
Message-ID:  <20030329133505.J9370@gamplex.bde.org>
In-Reply-To: <20030329002321.BE6752A8C1@canning.wemm.org>
References:  <20030329002321.BE6752A8C1@canning.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 28 Mar 2003, Peter Wemm wrote:

> Dag-Erling =?iso-8859-1?q?Sm=F8rgrav?= wrote:
> > David Malone <dwmalone@maths.tcd.ie> writes:
> > > On Thu, Mar 27, 2003 at 09:57:35AM +0100, des@ofug.org wrote:
> > > > Might it be a good idea to have separate b{copy,zero} implementations
> > > > for special purposes like pmap_{copy,zero}_page?
> > > We do have a i686_pagezero already, which seems to be used in
> > > pmap_zero_page - I guess it may not be well tuned to modern processors,
> > > as it is almost 5 years old.
> >
> > i686_pagezero uses 'rep stosl' after an initial 'rep scasl' to check
> > if the page was already zero (which is a pessimization unless we zero
> > a lot of pages that are already zeroed).  SSE can do far better than
> > that.
>
> i686_pagezero was written with SMP in mind.  The cache state ends up in
> a more favourable condition when sharing with other cpus.

Hmm.  The SMP advantage seems to be mainly a poor man's avoidance of
clobbering caches.  By writing only to cache lines that are are not all
zero, we avoid busting all on-CPU caches except the ones on the CPU
doing the zeroing.

This makes the main bug in i686_pagezero() even sillier.  We actually
write zeros to everything after the first nonzero word, so we only get
the cache benefit for cache lines up to the first not-all-zero one.

Bruce



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