Re: memset (was: Redundant memset in AIO read_events)

Andi Kleen
2003-07-10T10:15:43Z

Arjan van de Ven <arjanv@redhat.com> writes:

> On Thu, 2003-07-10 at 12:04, Etienne Lorrain wrote:
> > Note that using memset() is better reserved to initialise variable-size
> > structures or buffers. Even if memset() is extremely optimised,
> > it is still not as fast as not doing anything.
>
> this is not always true....
> memset can be used as an optimized cache-warmup, which can avoid the
> write-allocate behavior of normal writes, which means that if you memset
> a structure first and then fill it, it can be halve the memory bandwidth
> and thus half as fast. This assumes an optimized memset which we
> *currently* don't have I think... but well, we can fix that ;)

You don't want to use such an memset unlike you're clearing areas
which are significantly bigger than all your cache (>several MB)
The problem is that the instruction that avoid write-allocate usually also force
the result out of cache. And for small data sets that is typically a loss
if you want to use the data later, because the later use eats full cache misses.
In the kernel such big buffers occur only very rarely, most operations are on
4K and less. For those only in cache operation is interesting.

-Andi