Re: get_fs_excl/put_fs_excl/has_fs_excl

Jamie Lokier
2009-04-23T21:23:28Z

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