George V. Reilly wrote:
Yakov Lerner wrote:

On 2/4/07, Yakov Lerner <[EMAIL PROTECTED]> wrote:

On 2/4/07, Alexei Alexandrov <[EMAIL PROTECTED]> wrote:
> >
> > Gnu malloc (glibc) is exceptionally fast, iirc. It is possible
> > to benchmark the malloc speed during  the ./configure  time.
> > And auto-select the initital size depending on the results.
> >
> > The procmail this similar technique in configure: It automatically
> > benchmarks it's own builtin strstr() vs system's strstr() and selects
> > the one which is faster.
> >
>
> In this particular case the speed of malloc is not the only factor.
> Big fraction of time is spent in memset() while initializing the array
> with zeros.

That's why I thought that it's reasonable to benchmark malloc()
relative to the time it takes to memset() that same area. (When
benchmarking, you need to know what to compare it to). If you
compare time it takes to malloc N bytes to the time it takes
to memset() same N bytes, you can tell the speed of malloc
*relative* to the time of memset()ting same size. So you will
automatically know which one is realtively more expensive,
the memset() or the malloc().


And then maybe the optimal initial size will be size where
memset() time is equal to the malloc() time ? The break-even,
so to say, in which neither of two time dominates the other ?


memset() is an O(N) operation. Its running time has to be proportional to N because it has to touch every single byte. If the pagefile gets involved, it's still O(N), but with a much larger constant.

malloc()'s running time is much harder to say anything about. Not only can it vary widely between different implementations, it also depends upon the state of the system. Is the heap fragmented? Is it suffering from lock contention? (Not a problem with single-threaded apps like Vim.) Is the memory already in the process's working set, or does malloc have to ask the OS for more pages? Is the system under intense memory pressure and will the malloc() operation cause paging to disk? Finally, malloc(N) is probably independent of N. It has to find a free entry of size N in its data structures, which is very dependent on both the implementation and the preceding factors. Benchmarking malloc() in ./configure is not likely to tell you very much about its performance in a workload you care about.


Sorry to butt in here, but I had a question about all this discussion on malloc. If you are talking about the C function malloc which I think you are as you referred to glibc, then as far as I am aware, malloc does not zero the memory that is allocated, it merely allocates it, so I do not see where memset would be used. calloc on the other hand, also zeros the memory that it allocates. Sorry if I am completely misguided but just interested to know other people's thoughts on it.
Cheers,
Rob.

Reply via email to