On May 16, 2007, at 10:44 AM, Dan Shoop wrote: As we all know FUSE is a project to implement ad-hoc filesystems in user space. Ad-hoc filesystems are, by nature, not readily suitable for production. Hence my comment. Furthermore if the filesystem was production quality it would most likely be implemented within the system, not a user application. User based applications don't lend themselves well as production services.
That's a rather broad categorization to make and, as such, not really supportable.
There are many instances where putting a filesystem in user space is a good idea:
1) When the filesystem relies on support services or frameworks that you'd never want to push down into the kernel for any number of reasons, ranging from fragility to layering violations to simply not wanting to wire that much kernel memory for something which does not merit that kind of impact.
2) When you'd like to be able to simply "restart'" the entire filesystem stack in case of a crash or some sort of forced rebuild scenario. It's not so easy to do that for an in-kernel filesystem but comparatively trivial, with a little extra design, to do in userland.
3) When it's simply a whole heck of a lot easier and/or more flexible to implement the filesystem in userland and time to market is important for your project.
Now, I can already hear you thinking "sure, those are all valid reasons to implement a filesystem in userland, but not in PRODUCTION dang it!" so let's switch to talking about how relative a term "production" is. Code in production is code that is serving a useful purpose and satisfying the constraints of the application. Period. Putting code in production at a bank vs a wall street brokerage vs a research institute vs some startup company racing towards a deadline are all different production scenarios, sure, but even within each of those individual scenarios you have different stipulations for security, reliability, cost of development and time to market depending on just what problem you're trying to solve. You can attempt to generalize all you like, but that generalization will always be wrong for various boxes in the decision matrix.
The round-trip performance overhead for a FUSE vs in-kernel filesystem is pretty well known, just as the penalty for taking trap in the kernel (PANIC!) or allocating kernel memory is pretty well known. Given the different constraints, there are therefore "production filesystems" I'd definitely want up in user space and production filesystems I'd want in the kernel.
- Jordan
|