sha1_file: don't malloc the whole compressed result when writing out objects
authorNicolas Pitre <nico@fluxnic.net>
Sun, 21 Feb 2010 04:27:31 +0000 (23:27 -0500)
committerJunio C Hamano <gitster@pobox.com>
Sun, 21 Feb 2010 19:36:23 +0000 (11:36 -0800)
commit9892bebafe0865d8f4f3f18d60a1cfa2d1447cd7
treeb6f46ee135586730aa35f0d31b9f8a679f4bb93d
parente923eaeb901ff056421b9007adcbbce271caa7b6
sha1_file: don't malloc the whole compressed result when writing out objects

There is no real advantage to malloc the whole output buffer and
deflate the data in a single pass when writing loose objects. That is
like only 1% faster while using more memory, especially with large
files where memory usage is far more. It is best to deflate and write
the data out in small chunks reusing the same memory instead.

For example, using 'git add' on a few large files averaging 40 MB ...

Before:
21.45user 1.10system 0:22.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+142640minor)pagefaults 0swaps

After:
21.50user 1.25system 0:22.76elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+828040outputs (0major+104408minor)pagefaults 0swaps

While the runtime stayed relatively the same, the number of minor page
faults went down significantly.

Signed-off-by: Nicolas Pitre <nico@fluxnic.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sha1_file.c