git-commit-vandalism/builtin
Nguyễn Thái Ngọc Duy b8a2486f15 index-pack: support multithreaded delta resolving
This puts delta resolving on each base on a separate thread, one base
cache per thread. Per-thread data is grouped in struct thread_local.
When running with nr_threads == 1, no pthreads calls are made. The
system essentially runs in non-thread mode.

An experiment on a Xeon 24 core machine with git.git shows that
performance does not increase proportional to the number of cores. So
by default, we use maximum 3 cores. Some numbers with --threads from 1
to 16:

1..4
real    0m8.003s  0m5.307s  0m4.321s  0m3.830s
user    0m7.720s  0m8.009s  0m8.133s  0m8.305s
sys     0m0.224s  0m0.372s  0m0.360s  0m0.360s

5..8
real    0m3.727s  0m3.604s  0m3.332s  0m3.369s
user    0m9.361s  0m9.817s  0m9.525s  0m9.769s
sys     0m0.584s  0m0.624s  0m0.540s  0m0.560s

9..12
real    0m3.036s  0m3.139s  0m3.177s  0m2.961s
user    0m8.977s  0m10.205s 0m9.737s  0m10.073s
sys     0m0.596s  0m0.680s  0m0.684s  0m0.680s

13..16
real    0m2.985s  0m2.894s  0m2.975s  0m2.971s
user    0m9.825s  0m10.573s 0m10.833s 0m11.361s
sys     0m0.788s  0m0.732s  0m0.904s  0m1.016s

On an Intel dual core and linux-2.6.git

1..4
real    2m37.789s 2m7.963s  2m0.920s  1m58.213s
user    2m28.415s 2m52.325s 2m50.176s 2m41.187s
sys     0m7.808s  0m11.181s 0m11.224s 0m10.731s

Thanks Ramsay Jones for troubleshooting and support on MinGW platform.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-07 15:48:15 -07:00
..
add.c Merge branch 'js/add-e-submodule-fix' into maint 2012-02-13 11:42:18 -08:00
annotate.c
apply.c Use correct grammar in diffstat summary line 2012-02-03 23:19:42 -08:00
archive.c Revert "upload-archive: use start_command instead of fork" 2011-11-15 15:39:33 -08:00
bisect--helper.c
blame.c Merge branch 'zj/decimal-width' 2012-02-20 00:15:11 -08:00
branch.c branch --edit-description: protect against mistyped branch name 2012-02-05 17:28:03 -08:00
bundle.c
cat-file.c drop odd return value semantics from userdiff_config 2012-02-07 10:44:54 -08:00
check-attr.c Merge branch 'bc/attr-ignore-case' 2011-10-17 21:37:14 -07:00
check-ref-format.c Change check_refname_format() to reject unnormalized refnames 2011-10-05 13:45:30 -07:00
checkout-index.c
checkout.c Merge branch 'jc/checkout-out-of-unborn' 2012-02-12 22:43:45 -08:00
clean.c
clone.c Merge branch 'cb/transfer-no-progress' 2012-02-20 00:14:55 -08:00
commit-tree.c Merge branch 'jc/show-sig' 2012-01-06 12:44:07 -08:00
commit.c Merge branch 'jc/parse-date-raw' into maint 2012-02-13 11:42:15 -08:00
config.c config: add include directive 2012-02-17 07:59:55 -08:00
count-objects.c
describe.c
diff-files.c
diff-index.c
diff-tree.c
diff.c use struct sha1_array in diff_tree_combined() 2011-12-17 18:21:37 -08:00
fast-export.c Fix an enum assignment issue spotted by Sun Studio 2011-12-21 10:19:04 -08:00
fetch-pack.c Merge branch 'cb/transfer-no-progress' 2012-02-20 00:14:55 -08:00
fetch.c Merge branch 'cb/transfer-no-progress' 2012-02-20 00:14:55 -08:00
fmt-merge-msg.c Convert resolve_ref+xstrdup to new resolve_refdup function 2011-12-13 09:26:52 -08:00
for-each-ref.c Convert resolve_ref+xstrdup to new resolve_refdup function 2011-12-13 09:26:52 -08:00
fsck.c Rename resolve_ref() to resolve_ref_unsafe() 2011-12-13 09:39:46 -08:00
gc.c prune: handle --progress/no-progress 2011-11-07 22:12:19 -08:00
grep.c Merge branch 'jk/grep-binary-attribute' 2012-02-14 12:57:18 -08:00
hash-object.c
help.c
index-pack.c index-pack: support multithreaded delta resolving 2012-05-07 15:48:15 -07:00
init-db.c builtin/init-db.c: eliminate -Wformat warning on Solaris 2011-12-20 16:02:08 -08:00
log.c Sync with v1.7.8.1 2011-12-21 12:02:44 -08:00
ls-files.c Merge branch 'cb/common-prefix-unification' 2011-10-10 15:56:17 -07:00
ls-remote.c Merge branch 'jc/ls-remote-short-help' 2011-10-05 12:36:26 -07:00
ls-tree.c
mailinfo.c mailinfo: with -b, keep space after [foo] 2012-01-16 16:06:57 -08:00
mailsplit.c
merge-base.c
merge-file.c
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c
merge.c merge: do not trust fstat(2) too much when checking interactiveness 2012-02-23 12:48:26 -08:00
mktag.c
mktree.c Merge "Move 'builtin-*' into a 'builtin/' subdirectory" 2011-11-10 09:10:51 -08:00
mv.c Merge branch 'jk/maint-mv' into maint 2011-12-28 11:32:36 -08:00
name-rev.c Merge branch 'jc/maint-name-rev-all' into maint-1.7.6 2011-12-13 21:12:34 -08:00
notes.c Merge branch 'nd/war-on-nul-in-commit' 2011-12-22 11:27:26 -08:00
pack-objects.c pack-objects: Fix compilation with NO_PTHREDS 2012-02-26 17:46:00 -08:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c
prune.c prune: handle --progress/no-progress 2011-11-07 22:12:19 -08:00
push.c Merge branch 'fc/push-prune' 2012-02-26 23:05:45 -08:00
read-tree.c
receive-pack.c Merge branch 'cb/receive-pack-keep-errors' 2012-02-20 00:14:50 -08:00
reflog.c prune: show progress while marking reachable objects 2011-11-07 22:12:19 -08:00
remote-ext.c
remote-fd.c
remote.c Merge branch 'pj/remote-set-branches-usage-fix' 2012-02-23 13:30:00 -08:00
replace.c Convert many resolve_ref() calls to read_ref*() and ref_exists() 2011-11-13 12:21:06 -08:00
rerere.c
reset.c reset: update cache-tree data when appropriate 2011-12-06 15:13:39 -08:00
rev-list.c git rev-list: fix invalid typecast 2012-02-13 12:49:15 -08:00
rev-parse.c
revert.c Merge branch 'jc/advise-i18n' 2012-01-31 22:01:14 -08:00
rm.c
send-pack.c push/fetch/clone --no-progress suppresses progress output 2012-02-13 13:06:53 -08:00
shortlog.c Merge branch 'jk/format-patch-am' 2011-05-31 12:19:11 -07:00
show-branch.c Rename resolve_ref() to resolve_ref_unsafe() 2011-12-13 09:39:46 -08:00
show-ref.c Convert many resolve_ref() calls to read_ref*() and ref_exists() 2011-11-13 12:21:06 -08:00
stripspace.c Update documentation for stripspace 2011-12-12 16:48:54 -08:00
symbolic-ref.c Rename resolve_ref() to resolve_ref_unsafe() 2011-12-13 09:39:46 -08:00
tag.c Merge branch 'tg/tag-points-at' 2012-02-20 00:15:28 -08:00
tar-tree.c
unpack-file.c
unpack-objects.c
update-index.c
update-ref.c
update-server-info.c
upload-archive.c upload-archive: use start_command instead of fork 2011-11-21 14:32:40 -08:00
var.c
verify-pack.c
verify-tag.c Split GPG interface into its own helper library 2011-11-04 21:40:25 -07:00
write-tree.c