Skip to content

Commit

Permalink
fixup_pack_header_footer(): use nicely aligned buffer sizes
Browse files Browse the repository at this point in the history
It should be more efficient to use nicely aligned buffer sizes, either
for filesystem operations or SHA1 checksums.  Also, using a relatively
small nominal size might allow for the data to remain in L1 cache
between both SHA1_Update() calls.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Nicolas Pitre authored and Junio C Hamano committed Aug 30, 2008
1 parent 8522148 commit d35825d
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions pack-write.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ void fixup_pack_header_footer(int pack_fd,
unsigned char *partial_pack_sha1,
off_t partial_pack_offset)
{
static const int buf_sz = 128 * 1024;
int aligned_sz, buf_sz = 8 * 1024;
SHA_CTX old_sha1_ctx, new_sha1_ctx;
struct pack_header hdr;
char *buf;
Expand All @@ -188,17 +188,22 @@ void fixup_pack_header_footer(int pack_fd,
partial_pack_offset -= sizeof(hdr);

buf = xmalloc(buf_sz);
aligned_sz = buf_sz - sizeof(hdr);
for (;;) {
ssize_t m, n;
m = (partial_pack_sha1 && partial_pack_offset < buf_sz) ?
partial_pack_offset : buf_sz;
m = (partial_pack_sha1 && partial_pack_offset < aligned_sz) ?
partial_pack_offset : aligned_sz;
n = xread(pack_fd, buf, m);
if (!n)
break;
if (n < 0)
die("Failed to checksum %s: %s", pack_name, strerror(errno));
SHA1_Update(&new_sha1_ctx, buf, n);

aligned_sz -= n;
if (!aligned_sz)
aligned_sz = buf_sz;

if (!partial_pack_sha1)
continue;

Expand Down

0 comments on commit d35825d

Please sign in to comment.