{"thread":{"id":"189","subject":"Similarities with Vesta","startedAt":"2005-04-21T03:33:53Z","lastAt":"2005-04-21T03:33:53Z","messageCount":1,"participants":["Kenneth C. Schalk"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"1084","messageId":"32982.192.168.1.11.1114054433.squirrel@localhost","threadId":"189","inReplyTo":null,"subject":"Similarities with Vesta","fromName":"Kenneth C. Schalk","fromEmail":"ken@xorian.net","sentAt":"2005-04-21T03:33:53Z","receivedAt":"2005-04-21T03:33:53Z","isPatch":false,"sender":{"key":"ken@xorian.net","avatar":null},"body":"When I first read about git a few days ago, I was pretty surprised by\nhow similar it seemed to the project I've been working on for several\nyears.  (Coming off BK, I would have expected a more Darcs/Codeville\nkind of change-merging-centric approach.)\n\nSince I don't see any mention of Vesta on this list or lkml, I thought\nI should at least join the list and say a few words.  Some of the\nsimilarities which jumped out at me:\n\n  - The Vesta repository is a filesystem.  It was written by a\n  \"filesystem person\" at a systems research lab.  It has a versioning\n  system (and a build system) built on top of it.\n\n  - The Vesta repository's backing store is indexed by a hash of file\n  contents (though this is a detail mostly hidden from users).\n\n  - The Vesta repository stores complete copies of every source file,\n  but only one copy of each (thanks to the hash-based indexing).\n\n  - The Vesta repository's directory structure makes it possible to\n  quickly determine what files and directories have changed between\n  two versions.  (Actually, I normally just use \"diff -r\", but I\n  hacked up something similar to git's diff-tree in about an hour\n  using the Python binding for the repository's API.)\n\nSince this isn't entirely on topic, I'll refrain from going into too\nmuch detail, but I'd be happy to answer any questions.  (There's also\nlots of information on http://www.vestasys.org/, multiple published\npapers, and a book from Springer-Verlag coming out sometime later this\nyear.)  I'm hoping that there's some opportunities for the kernel\ndevelopers to get some benefit from the considerable research and\ndevelopment that's gone into Vesta.\n\nA very brief history of Vesta:\n\n  - The project started in the early '90s at DEC's Systems Research\n  Center.  In the mid '90s, a from-scratch re-write was done based on\n  the research group's experiences with the first prototype.\n\n  - In 1998, the Alpha microprocessor group started using it for chip\n  design.  When the Alpha group was acquired by Intel in 2001, Compaq\n  (which had acquired DEC) agreed to release Vesta as free software.\n\n  - The former Alpha group continues to use Vesta at Intel, and\n  employs two developers to work on maintaining and improving it.\n\nLastly, since I know git's development has been focused on\nperformance, here's a quick example of checking in, patching, and\ndiffing the kernel source in Vesta:\n\n# Create a branch to use for the 2.6.0 sources.\n\n% vbranch -O /vesta/ktest1.xorian.net/kernel/2.6.0\nCreating branch /vesta/ktest1.xorian.net/kernel/2.6.0\n% vcheckout /vesta/ktest1.xorian.net/kernel/2.6.0\nReserving version /vesta/ktest1.xorian.net/kernel/2.6.0/1\nCreating session /vesta/ktest1.xorian.net/kernel/2.6.0/checkout/1\nMaking working directory /vesta-work/ken/kernel\n\n# Unpack the 2.6.0 source into the working directory.\n\n% cd /vesta-work/ken/kernel\n% tar -jxf /tmp/kernel/linux-2.6.0.tar.bz2\n31.90s user 7.98s system 46% cpu 1:24.92 total\n\n# Move everything up out of the directory with the version name just\n# to simplify the rest of the example.\n\n% mv linux-2.6.0/* .\n% rmdir linux-2.6.0\n\n# Take an immutable snapshot of the working copy.  This is basically\n# hashing the file contents and taking a snapshot of the directory\n# structure.  (The real work happens inside the repository server,\n# which is running in the background.)\n\n% vadvance\nAdvancing to /vesta/ktest1.xorian.net/kernel/2.6.0/checkout/1/1\n0.75s user 1.08s system 4% cpu 39.371 total\n\n# Check in the snapshot.  (This is a very fast operation, because all\n# it's really doing is giving a new name to the snapshot taken in the\n# previous step.)\n\n% cd ..\n% vcheckin kernel\nChecking in /vesta/ktest1.xorian.net/kernel/2.6.0/1\nDeleting /vesta-work/ken/kernel\n0.10s user 0.07s system 33% cpu 0.510 total\n\n# Make a new branch for 2.6.1 based on the 2.6.0 version just checked\n# in.  (Again, no real work here.)\n\n% vbranch -o /vesta/ktest1.xorian.net/kernel/2.6.0/1 \\\n  /vesta/ktest1.xorian.net/kernel/2.6.1\nCreating branch /vesta/ktest1.xorian.net/kernel/2.6.1\n0.01s user 0.01s system 27% cpu 0.073 total\n\n# Apply the 2.6.1 patch.\n\n% cd /vesta-work/ken/kernel\n% bzcat /tmp/kernel/patch-2.6.1.bz2 | patch -p1\n[...]\nbzcat  0.70s user 0.03s system 91% cpu 0.796 total\npatch  0.74s user 1.52s system 22% cpu 10.216 total\n\n# Take a snapshot of the changes and check them in.\n\n% vadvance\nAdvancing to /vesta/ktest1.xorian.net/kernel/2.6.1/checkout/1/1\n0.33s user 0.38s system 22% cpu 3.092 total\n% cd ..\n% vcheckin kernel\nChecking in /vesta/ktest1.xorian.net/kernel/2.6.1/1\nDeleting /vesta-work/ken/kernel\n0.05s user 0.03s system 41% cpu 0.193 total\n\n# Repeat just for some more timing numbers.\n\n% vbranch -o /vesta/ktest1.xorian.net/kernel/2.6.1/1 \\\n  /vesta/ktest1.xorian.net/kernel/2.6.2\nCreating branch /vesta/ktest1.xorian.net/kernel/2.6.2\n0.01s user 0.01s system 167% cpu 0.012 total\n% vcheckout /vesta/ktest1.xorian.net/kernel/2.6.2\nReserving version /vesta/ktest1.xorian.net/kernel/2.6.2/1\nCreating session /vesta/ktest1.xorian.net/kernel/2.6.2/checkout/1\nMaking working directory /vesta-work/ken/kernel\n0.01s user 0.00s system 62% cpu 0.016 total\n% cd /vesta-work/ken/kernel\n% bzcat /tmp/kernel/patch-2.6.2.bz2 | patch -p1\n[...]\nbzcat  1.89s user 0.06s system 92% cpu 2.107 total\npatch  1.67s user 3.21s system 19% cpu 24.807 total\n% vadvance\nAdvancing to /vesta/ktest1.xorian.net/kernel/2.6.2/checkout/1/1\n0.38s user 0.47s system 18% cpu 4.559 total\n% cd ..\n% vcheckin kernel\nChecking in /vesta/ktest1.xorian.net/kernel/2.6.2/1\nDeleting /vesta-work/ken/kernel\n0.07s user 0.03s system 38% cpu 0.260 total\n\n# Let's see how fast my quick diff-tree clone is.\n\n% cd /vesta/ktest1.xorian.net/kernel\n% diff-tree.py 2.6.0/1 2.6.1/1\n< 2.6.0/1/CREDITS\n> 2.6.1/1/CREDITS\n< 2.6.0/1/Documentation/DocBook/kernel-locking.tmpl\n> 2.6.1/1/Documentation/DocBook/kernel-locking.tmpl\n[...]\n< 2.6.0/1/sound/sound_core.c\n> 2.6.1/1/sound/sound_core.c\n< 2.6.0/1/usr/gen_init_cpio.c\n> 2.6.1/1/usr/gen_init_cpio.c\n1.50s user 0.44s system 50% cpu 3.871 total\n% diff-tree.py 2.6.1/1 2.6.2/1\n[...]\n1.70s user 0.47s system 47% cpu 4.526 total\n% diff-tree.py 2.6.0/1 2.6.2/1\n[...]\n1.85s user 0.56s system 48% cpu 4.935 total\n\n# /vesta is a mount point for a virtual filesystem provided by the\n# repository server.  All the versions created above can be accessed\n# directly, so you can use normal diff to generate patches.\n\n% diff -Nru 2.6.0/1 2.6.1/1 > /tmp/kernel/patch-2.6.1-recreated\n0.79s user 2.00s system 39% cpu 7.149 total\n% diff -Nru 2.6.1/1 2.6.2/1 > /tmp/kernel/patch-2.6.2-recreated\n1.40s user 2.51s system 38% cpu 10.070 total\n\nJust a couple final notes on this demonstration:\n\n  - The repository server and all client programs were running on a\n  1.7GHz AthlonXP\n\n  - The Vesta tools came from the latest pre-release version\n  (12.pre13/5)\n\nThanks for your time.\n\n--Ken Schalk\n\n\n"}]}