[Tux3] Tux3 Report: Kernel development moved to Git mainline
Daniel Phillips
phillips at phunq.net
Mon Jan 26 20:58:33 PST 2009
Tux3 kernel development is now tracking Linus mainline, and will no
longer maintain compatibility with older kernels. With the arrival of
delayed allocation, Tux3 now compiles only on kernels newer than
2.6.28. A patch against v2.6.29-rc1 is here:
http://tux3.org/patches/tux3-v2.6.29-rc1
Tux3 user space development remains in Mercurial:
http://hg.tux3.org/tux3/
The Mercurial tree contains a complete, current copy of the fs/tux3
kernel files. Our normal development mode is to add new functionality
and unit tests in user space, then port to kernel. Sometimes it goes
the other way, with kernel changes backported to userspace. In any
case, I use rsync to keep the Git and Mercurial kernel files in sync:
rsync -t .../hg/tux3/user/kernel/* fs/tux3/ && make CONFIG_TUX3=y
There will be a public git tree soon. For today, there is a patch
against Linus's tagged revision v2.6.29-rc1, the most recent one that
builds UML without a patch. (I still do the majority of my Tux3 kernel
development on UML, while Hirofumi uses KVM and real machines, and
others use Xen.)
Status
Tux3 now uses delayed allocation, which is not just a performance hack
but a step in the direction of atomic commit. Tux3 now keeps its
metadata blocks in a normal inode->mapping owned by the filesystem,
rather than the blockdev mapping, which has a different superblock than
the fs. This sounds like a big change, but it was actually pretty
easy and not much code. We made this change because block_dev.c is
dependent on buffer_head, and has its own ideas how metadata flushing
should be done. Rather than fight with it, we switched. It is nice to
be able to find our own superblock, given a buffer. We will eventually
replace buffers entirely, with a new mechanism called block handles
that provides the block state we need with 16 bytes per page instead of
the 192 bytes worth of circular buffer list you get now with 1K blocks.
Tux3 has passed 27 hours of fsx-linux stress testing under memory
pressure, with delalloc and the new volmap metadata mapping. We will
now say sayonara to stability for a while, as atomic commit goes in.
When atomic commit is in, the main structure of Tux3 is done, and we
plan to call for review at that time, leaving a bunch of features and
optimizations for later. We expect Tux3 will perform decently as an
Ext3-class filesystem at that point, including crash recovery, though
it will be no benchmark champion before further optimization.
Build instructions
If you already have Linus's Git tree, please be nice and clone it
locally, otherwise:
# Clone Linus's Git tree:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
cd linux-2.6
git checkout v2.6.29-rc1
# Get the current Tux3 patch and apply it:
wget http://tux3.org/patches/tux3-v2.6.29-rc1
patch <tux3-v2.6.29-rc1 -p1
# Build linux with tux3:
make defconfig
make CONFIG_TUX3=y
sudo make install
# Check out the Tux3 user space Mercurial tree:
hg clone http://hg.tux3.org/tux3/
cd tux3/user
make
# make a tux3 filesystem
sudo ./tux3 mkfs /dev/<testpartition>
Boot and mount!
cat /proc/filesystems | grep tux3 && mount /dev/<testpartition> /mnt
Recovery after crash or unexpected shutdown is easy:
tux3 mkfs <volname>
Regards,
Daniel
_______________________________________________
Tux3 mailing list
Tux3 at tux3.org
http://mailman.tux3.org/cgi-bin/mailman/listinfo/tux3
More information about the Tux3
mailing list