Messages in this thread | | | Subject | Re: Fw: potential /dev/urandom scalability improvement | From | Andi Kleen <> | Date | Sat, 27 Mar 2004 02:29:12 +0100 |
| |
Andrew Morton <akpm@osdl.org> 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.
-Andi
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |