Re: VFS in userspace & how to improve it
Posted: Wed Jan 28, 2015 12:45 am
I disagree and so do others. Did you read the paper that willedwards linked. I don't actually understand your statement about not wanting to wake up the blocked app. Isn't that precisely what we want to do?Rusky wrote:It is priority inheritance - just generalized so a message send isn't the only way to bestow a process's priority on another. Putting it in the scheduler is a slight complication but also a performance win because you don't wake up the blocked application just to have it donate its time slice.gerryg400 wrote:That sound like a priority inversion problem that should be solved one of the usual ways that priority inversion is solved (e.g. priority inheritance). A message passing system can easily handle that scenario without any help from the scheduler by simply elevating the priority of a receiver of a messages to that of the highest sender/message that's on its queue.
MIT exokernels are irrelevant. What microkernels are great for or not great for is irrelevant. Isolation is irrelevant. The VFS going down is irrelevant.Rusky wrote:Sure, if you still want the VFS as a separate server, with a minimum of one cross-domain call per FS operation. Moving the VFS into a library is another perfectly valid organization that gets rid of a lot of those message sends, keeping the nice property of only messaging FS/disk driver on cache misses. It's actually been implemented in several research kernels at MIT, although in the context of exokernels so they had the file systems in the kernel rather than servers.gerryg400 wrote:The correct way to address that issue (and it solves other problems) is to make the page/disk cache part of the VFS. So the VFS is a tree of all open (and recently used) files with cached pages of those files. The filesystem server, and disk driver are only messaged on a cache miss. When a cache miss occurs the extra message passes are not noticed because of the time taken for actual disk IO.
Microkernels are great for isolating failure, but you have to think about where you want to isolate the failure to. The VFS doesn't really have anything that needs to be isolated from applications (unless you want to make that tradeoff like you could with any other normal shared library), but if your VFS server goes down, it's going to impact a lot more applications than if a VFS library takes down its one host application.
Having the VFS in a shared library might be worth considering but how would files be shared between processes. All files are potentially shared resources and a VFS process allows the cache buffers to be shared. I'm not sure how that's possible with a library.