git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] update-index/diff-index: use core.preloadindex to improve performance

From
Karsten Blees <karsten.blees@gmail.com>
Date
Nov 13, 2012, 21:51 UTC
Message-ID
<50A2C0F2.20606@gmail.com>
In-Reply-To
<7v4nktfo35.fsf@alter.siamese.dyndns.org>
Am 13.11.2012 17:46, schrieb Junio C Hamano:
> karsten.blees@dcon.de writes:
> 
> If anything, "fix your mailer" probably is the policy you are
> looking for, I think.
Well then...I've cloned myself @gmail, I hope this is better.
Just some provoking thoughts...(if I may):
RFC-5322 recommends wrapping lines at 78, and mail relays and gateways are allowed to change message content according to the capabilities of the receiver (RFC-5598). In essence, plaintext mail is completely unsuitable for preformatted text such as source code.
On the other hand, git tries to solve the very problem of distributed source code management, and consistency by strong sha-1 checksums is on the top of the feature list.
It is somehow hard to believe that contributing to git itself should only be possible using the most unreliable of protocols. Don't you trust your own software?
-- >8 --
Subject: [PATCH] update-index/diff-index: use core.preloadindex to improve performance

'update-index --refresh' and 'diff-index' (without --cached) don't honor the core.preloadindex setting yet. Porcelain commands using these (such as git [svn] rebase) suffer from this, especially on Windows.

Use read_cache_preload to improve performance.

Additionally, in builtin/diff.c, don't preload index status if we don't access the working copy (--cached).

Results with msysgit on WebKit repo (2GB in 200k files):
                | update-index | diff-index | rebase
----------------+--------------+------------+---------
msysgit-v1.8.0  |       9.157s |    10.536s | 42.791s
+ preloadindex  |       9.157s |    10.536s | 28.725s
+ this patch    |       2.329s |     2.752s | 15.152s
+ fscache [1]   |       0.731s |     1.171s |  8.877s
[1] https://github.com/kblees/git/tree/kb/fscache-v3
Thanks-to: Albert Krawczyk <pro-logic@optusnet.com.au>
Signed-off-by: Karsten Blees <blees@dcon.de>
---
Can also be pulled from: https://github.com/kblees/git/tree/kb/update-diff-index-preload-upstream
More performance figures (for msysgit) can be found in this discussion: https://github.com/pro-logic/git/commit/32c03dd8
 builtin/diff-index.c   |  8 ++++++--
 builtin/diff.c         | 12 ++++++++----
 builtin/update-index.c |  1 +
 3 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/builtin/diff-index.c b/builtin/diff-index.c
index 2eb32bd..1c737f7 100644
--- a/builtin/diff-index.c
+++ b/builtin/diff-index.c
@@ -41,9 +41,13 @@ int cmd_diff_index(int argc, const char **argv, const char *prefix)
 	if (rev.pending.nr != 1 ||
 	    rev.max_count != -1 || rev.min_age != -1 || rev.max_age != -1)
 		usage(diff_cache_usage);
-	if (!cached)
+	if (!cached) {
 		setup_work_tree();
-	if (read_cache() < 0) {
+		if (read_cache_preload(rev.diffopt.pathspec.raw) < 0) {
+			perror("read_cache_preload");
+			return -1;
+		}
+	} else if (read_cache() < 0) {
 		perror("read_cache");
 		return -1;
 	}
diff --git a/builtin/diff.c b/builtin/diff.c
index 9650be2..198b921 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -130,8 +130,6 @@ static int builtin_diff_index(struct rev_info *revs,
 			usage(builtin_diff_usage);
 		argv++; argc--;
 	}
-	if (!cached)
-		setup_work_tree();
 	/*
 	 * Make sure there is one revision (i.e. pending object),
 	 * and there is no revision filtering parameters.
@@ -140,8 +138,14 @@ static int builtin_diff_index(struct rev_info *revs,
 	    revs->max_count != -1 || revs->min_age != -1 ||
 	    revs->max_age != -1)
 		usage(builtin_diff_usage);
-	if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) {
-		perror("read_cache_preload");
+	if (!cached) {
+		setup_work_tree();
+		if (read_cache_preload(revs->diffopt.pathspec.raw) < 0) {
+			perror("read_cache_preload");
+			return -1;
+		}
+	} else if (read_cache() < 0) {
+		perror("read_cache");
 		return -1;
 	}
 	return run_diff_index(revs, cached);
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 74986bf..ada1dff 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -593,6 +593,7 @@ struct refresh_params {
 static int refresh(struct refresh_params *o, unsigned int flag)
 {
 	setup_work_tree();
+	read_cache_preload(NULL);
 	*o->has_errors |= refresh_cache(o->flags | flag);
 	return 0;
 }
-- 
1.8.0.msysgit.0.3.g7d9d98c

-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en
Previous: Junio C HamanoNext: karsten.blees@dcon.de
Message 8 of 9 in “update-index/diff-index: use core.preloadindex to improve performance”
  1. update-index/diff-index: use core.preloadindex to improve performancekarsten.blees@dcon.de, Oct 30, 2012
  2. Erik Faye-LundOct 30, 2012
  3. Albert KrawczykOct 30, 2012
  4. Jeff KingNov 2, 2012
  5. Jeff KingNov 2, 2012
  6. karsten.blees@dcon.deNov 13, 2012
  7. Junio C HamanoNov 13, 2012
  8. Karsten BleesNov 13, 2012
  9. karsten.blees@dcon.deNov 13, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.