git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: josh robb <josh_robb@fastmail.fm>
To: git@vger.kernel.org
Subject: [patch] git svn slowness on win32
Date: Tue, 16 Feb 2010 23:04:04 +1300	[thread overview]
Message-ID: <13237f021002160204o3c8af7a6i3e7105bd6bc43fa3@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 951 bytes --]

Hi,

I'm using git svn (1.6.4.msysgit.0) within a WindowsXP VM running
under VMWare fusion on OSX 10.5. For me (and at least one other person
I know) git svn has been unbearably slow.

My profiling shows that almost all of the git-svn runtime is being
spent in DynaLoader (via SVN::Base::import) which I guess is slow in a
virtualized windows environment. For example:

$ time perl /libexec/git-core/git-svn rebase
Current branch master is up to date.

real 2m56.750s
user 0m3.129s
sys 2m39.232s

I've been able to make significant (an order of magnitude)
improvements to it's performance by delaying SVN::Base::import from
running until it's actually needed. After making this change:

$ time perl /libexec/git-core/git-svn rebase
Current branch master is up to date.

real 0m33.407s
user 0m1.409s
sys 0m23.054s

git svn rebase -n goes from 3m7.046s to 0m10.312s.

Would love to get some feedback/thoughts etc...

j.

[-- Attachment #2: git-svn.patch.txt --]
[-- Type: text/plain, Size: 990 bytes --]

--- git-svn.orig	Wed Jul 29 22:55:26 2009
+++ git-svn	Fri Dec  4 13:38:52 2009
@@ -27,11 +27,13 @@
 $| = 1; # unbuffer STDOUT
 
 sub fatal (@) { print STDERR "@_\n"; exit 1 }
-require SVN::Core; # use()-ing this causes segfaults for me... *shrug*
-require SVN::Ra;
-require SVN::Delta;
-if ($SVN::Core::VERSION lt '1.1.0') {
-	fatal "Need SVN::Core 1.1.0 or better (got $SVN::Core::VERSION)";
+sub _req_svn {
+	require SVN::Core; # use()-ing this causes segfaults for me... *shrug*
+	require SVN::Ra;
+	require SVN::Delta;
+	if ($SVN::Core::VERSION lt '1.1.0') {
+		fatal "Need SVN::Core 1.1.0 or better (got $SVN::Core::VERSION)";
+	}
 }
 my $can_compress = eval { require Compress::Zlib; 1};
 push @Git::SVN::Ra::ISA, 'SVN::Ra';
@@ -4379,6 +4381,8 @@
 	my ($class, $url) = @_;
 	$url =~ s!/+$!!;
 	return $RA if ($RA && $RA->{url} eq $url);
+
+	::_req_svn();
 
 	SVN::_Core::svn_config_ensure($config_dir, undef);
 	my ($baton, $callbacks) = SVN::Core::auth_open_helper(_auth_providers);

             reply	other threads:[~2010-02-16 10:04 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-16 10:04 josh robb [this message]
2010-02-16 10:34 ` [patch] git svn slowness on win32 Johannes Schindelin
2010-02-17 23:15   ` Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=13237f021002160204o3c8af7a6i3e7105bd6bc43fa3@mail.gmail.com \
    --to=josh_robb@fastmail.fm \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).