Re: Fw: potential /dev/urandom scalability improvement

From: Matt Mackall
Date: Sat Mar 27 2004 - 10:50:12 EST


On Sat, Mar 27, 2004 at 02:29:12AM +0100, Andi Kleen wrote:
> Andrew Morton <akpm@xxxxxxxx> writes:
> >
> > I think this gets it right, but I probably screwed something up.
> >
> > static inline void prefetch_range(void *addr, size_t len)
> > {
> > #ifdef ARCH_HAS_PREFETCH
> > char *cp;
> > unsigned long end;
> >
> > end = ((unsigned long)addr + len + PREFETCH_STRIDE - 1);
> > end &= ~(PREFETCH_STRIDE - 1);
> >
> > for (cp = addr; cp < (char *)end; cp += PREFETCH_STRIDE)
> > prefetch(cp);
> > #endif
> > }
>
> The memory/bus controller usually only has a limited queue of
> outstanding transactions and for a big buffer you will likely overflow
> it. Also usually on modern CPUs it is enough to do prefetch for 2-3
> cache lines at the beginning, then an automatic hardware prefetcher
> will kick in and take care of the rest.

Presumable the automatic prefetcher doesn't deal well with
non-sequential access patterns. But I suspect the right thing to do is
put the knowledge of what's sensible for prefetch priming inside an
arch-specific prefetch_range.

--
Matt Mackall : http://www.selenic.com : Linux development and consulting
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/