Re: get_fs_excl/put_fs_excl/has_fs_excl
From: Jamie Lokier
Date: Thu Apr 23 2009 - 17:23:29 EST
Jens Axboe wrote:
> The intent was to add some sort of notification mechanism from the file
> system to inform the IO scheduler (and others?) that this process is how
> holding a file system wide resource. So if you have a low priority
> process getting access to such a resource, you want to boost its
> priority to avoid higher priority apps getting stuck beind it. Sort of a
> poor mans priority inheritance.
Very closely related to this: I'm building something where I want one
particular task to have absolute higher I/O priority than all other
tasks. No problem, use the lovely RT I/O priority facility.
But if that task needs access to a buffer or page which is already
undergoing I/O started by another task - what happens? I'd like the
_I/O_ priority to be boosted in that case, so that the high priority
task does not have to wait on a long queue of low priority I/Os.
E.g. this happens when the high priority task reads from a file, and a
low priority task has already initiated readahead for that file. It's
a particular problem if the low priority task's I/O is queued behind a
lot of other low priority I/O.
That can be avoided by just not reading the same files :-) But more
subtly, the high priority task may find itself waiting on metadata
blocks which overlap metadata blocks from I/O in a low priority tasks.
The application can't easily avoid this.
So I'd like operations which wait for I/O to complete to compare the
task's I/O priority with the I/O request already queued, and boost the
request priority if it's lower, moving it forward in the elevator if
necessary.
All this to guarantee a high I/O priority task has a maximum response
time no matter what low priority I/O is doing. Even O_DIRECT has to
read metadata sometimes...
It seems if I/O priority boosting were implemented like this, that
might solve the superblock priority thing too, without needing
filesystem changes and generically for all metadata?
How hard would it be to do this?
Thanks,
-- Jamie
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/