This is pretty relevant to my day today because I sat out to load test Fossil to make sure it will be a good fit for our future projects. I took our existing source and asset folders (so, not importing from Perforce, just taking the current 'head') of our recent project and put them into Fossil.
For reference: 78,353 files 5,708 folders total file size: 16,371,476,646 bytes (15.2 GB) Mostly text files (cpp, h, cs, html, xml, json, dae, etc.) with some binary I will provide some times, and some comparisons to Mercurial. Not because I'm out to say Mercurial is better or worse, I need some DVCS to compare it to and Mercurial is installed on my computer -- Windows 7 64-bit quad-core 7200 RPM drive Initial 'add' of all the files took roughly 10 minutes. For comparison, Mercurial took less than a minute. Initial 'commit' of all the files took roughly 50 minutes, Mercurial took about 38 minutes. Repository size (.fossil file) after initial commit was 3,529,995,264 bytes (3.28 GB -- pretty good!). The size of my ".hg" folder after commit is 3.60GB...but really 3.82GB due to filesystem overhead of 81,482 files (6,085 folders). Fossil beats Mercurial for sure here. To open the repository to a new checkout it took Fossil about 26 minutes. Roughly 13 minutes extracting the files into the directory, and then 13 minutes of ... doing something, before it came back. The equivalent command in Mercurial ("hg update null" to reset the checkout then the timed "hg update") took 19.5 minutes The above timings and stats are important, but not that important, to me. For the above are uncommon operations related to initial setup, initial clone, etc. What matters (to me) is the stats below: Fossil "ls" takes about 36 seconds, most of that time is just the spew going to the console. If I pipe the results to a file it takes about 8 seconds. Fossil "extra" takes about 8-12 seconds (with no extra files reported). Fossil "changes" takes about 6-8 seconds (with no changes reported). Fossil "info" is less than a second, Fossil "status" is about 6-8 seconds (since it is practically doing "info" + "changes"). Something to note, the very first time you do a ls/changes/extra in a fresh checkout, it takes much longer, about 50-75 seconds to complete. After that, you get the timings above. For comparison to Mercurial, "hg status" takes 3 seconds -- I did not use any other commands. Also, using fossil "artifact" and providing the artifact id of the current checkout (to get its manifest) only takes about 6 seconds -- taking that and parsing it might be faster than "ls" if you are writing tools/scripts around Fossil (as I currently am). I should note that I tried with my Fossil repository both in the default "delete mode" and went through my process again (post repository creation) with "wal mode" and the above timings did not change. And now here is where things get bad. I created a single text file in the root of my checkout (created by doing "dir * /s > out.txt") -- it was several megs in size, lets say about 12 megs. fossil add out.txt --- takes about 1-5 seconds (varies within that range) hg add out.txt --- takes about 3 seconds fossil commit -m "testing" out.txt --- takes about 17-20 minutes hg commit -m "testing" --- takes about 10 seconds This has killed me. At first I tried fossil commit without providing the file to commit and it took about 22 minutes. I repeated the process, specifying the file, and it saved ~5 minutes, but still took a bit too long for me to ask my fellow employees to wait for. Also to note: Fossil is very well behaved with its memory usage (only a couple megs of ram) while Mercurial bounces around up to 60 or 100 megs. Fossil seems to have a little better throughput when it comes to writing out files also. With all of the time "waiting" I can see Fossil is just doing a lot of file I/O (as expected). Just some numbers for you guys. Speaking for myself, I can live with a lot of the above, but that commit time kills it :( I hope there are some possible optimizations available. Thanks, Jeff _______________________________________________ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users