orib.dev: Gefs -- Future Work

Gefs was recently committed to 9front. Because it hasn't had many miles put on it yet, I still consider it very experimental.

It is available as a hidden option in the installer. You can get a GEFS based system by manually typing gefs at the prompt where it asks you to select between cwfs64x and hjfs.

While gefs is in tree, it's far from done. This is an incomplete list of future work that I would like to complete:

  • Repair tools; right now, we can check for corruption, but more would be welcome. there's also nothing to fix corruption if it's detected.
  • Storing small files inline; there's no need to create a new block if the file is smaller than the maximum size of a value in the Bε tree.
  • Merging/annihilating messages early; right now, all messages flush all the way down to the leaf before being applied, but they could be merged early; eg, a delete could eliminate an insert, or a chain of mtime changes could be merged into one.
  • Modifying the root block buffer in-place; right now, the root block is copied for every upsertion. With some care, an upsert can modify the in-memory copy of the root block, which only needs to be serialized and flushed on sync or when it is full.
  • Custom snapshot timing; right now, snaps are either taken automatically on a hard-coded schedule, or not taken at all.
  • Microoptimization; right now, performance is ok, but could be faster; measure and optimize.
  • Doing more eager space reclaim; getting back space from deleted files is delayed, and we could do some work in the sweeper to reclaim the space early.
  • Raid and Autorepair; it would be useful to have the filesystem able to support raid. It would also be and to use the corruption detection it has to build in to repair corrupt reads. The split between devfs and the file system in this situation isn't clear.

    All of these seem like they should be easy to implement without any breaks to compatibility. The locations for feature flags are all in place.

    I plan to hack on these as time permits, but at a fairly low priority. Patches are welcome.