Re: [PATCH 2/2] Implement a simple delta_base cache
- From
Julian Phillips <julian@quantumfyre.co.uk>
- Date
- Mar 18, 2007, 05:30 UTC
- Message-ID
- <Pine.LNX.4.64.0703180517360.24626@beast.quantumfyre.co.uk>
- In-Reply-To
- <Pine.LNX.4.64.0703172013340.6730@woody.linux-foundation.org>
On Sat, 17 Mar 2007, Linus Torvalds wrote:
Show 14 quoted lines
> On Sat, 17 Mar 2007, Nicolas Pitre wrote: >> >> Sure. But at this point the reference to compare GIT performance >> against might be GIT itself. And while 1 second is really nice in this >> case, there are some repos where it could be (and has already been >> reported to be) much more. > > I'd still like to see the KDE repo, that thing went quiet after it was > supposed to hit sneaker-net.. > > If it was 30 seconds before to do a "git log" for some individual file, > after the recent optimizations it should hopefully be down to 10. And I > agree that I might be more motivated to try to get it down further if I > could just find a repository where it's that much.
In my test repository (which emulates a real repository in terms of approximate size in terms of commits, branches and tags) "git log f12000" takes about 15m (using 1.5.0.4). After applying patches 1/2 and 2/2 on top of master I get ~3m50s. With 3/2 as well it goes down a bit more to ~3m20s.
I've attached the script that generated the repository in case you feel the urge to try some move time shaving exercises ... ;)
(This is a rather unrealistic repository consisting of a long series of commits of new binary files, but I don't have access to the repository that is being approximated until I get back to work on Monday ...)
--
Julian
---
That must be wonderful: I don't understand it at all.
-- Moliere
#!/bin/bash
# no. of commits branches and tags to make
commits=25000;
branches=900;
tags=8000;
# create a new file of this size (kb) for each commit
commit_size=102;
bs=1024;
large=$1;
((bg = $commits / $branches));
((tg = $commits / $tags));
echo "creating $large";
mkdir $large;
cd $large;
git init-db;
i=0
while [ $i -lt $commits ]; do
dd if=/dev/urandom of=f$i bs=${bs} count=${commit_size} > /dev/null 2>&1
git add f$i;
git commit -m "add t$i";
((ig = $i % $tg));
if [ $ig -eq 0 ]; then
git tag t$i;
echo -n "t";
fi
((ig = $i % $bg));
if [ $ig -eq 0 ]; then
git branch b$i;
echo -n "b";
fi
echo -n "$i ";
((i = $i + 1))
done
echo;
echo "complete.";