Hi Juri,
let me reply first to last Bart comments, and then to the
suggestions/information you provide.
First, as for using the RT class as a way to tell BFQ which processes
to privilege, I have three main concerns.
The first is, as I already said, is that we would overload a simple
and clean priority scheme (RT > BE > NONE) with a set of complex
mechanisms: weight raising, much longer idling periods, tendency to
deny idling to non-privileged processes when there are privileged
process. Doing so doesn't sound clean to me. But, if it is only a
problem of my personal taste, and we all agree that it is fine to
proceed this way, then I would be ok with this sort of overloading.
The second is that, if we use I/O classes, and not groups, to decide
privileges, then, perhaps, the way to get a hierarchical privileging
scheme becomes confusing? For example, suppose we have two groups
that share I/O bandwidth, one with a high share, say 80%, the other
with the remaining low 20% share. Suppose then that we have a process
to privilege in each group. The process to privilege in the second
group must get all 20% of the bandwidth, but no more. Yet, if we use
the RT-class interface to decide whom to privilege, would it be it
clear and ok for everybody that these two processes get,
asymmetrically, 80% and 20% of the bandwidth? I mean, per-process I/O
classes seem a rather orthogonal concept with respect to groups. Or,
are they are already assumed to be well encapsulated in groups?
I guess that both the above issues may not be dramatic. In contrast,
the following last issue seems harder to address: BFQ uses two
different privileging schemes, one suitable for interactive
applications, and one suitable for soft real-time applications. So,
what scheme should BFQ enable for processes in the RT I/O class?
Because of these concerns, also for I/O I would find much clearer and
flexible an ad-hoc, complete and explicit solution like the one(s)
Juri reports (I've already nagged some of the recipients here to get
support and collaboration on such sort of extensions of the basic
benefits of a good I/O scheduler).
As for using a more holistic scheme, or at least user interface, I
think it may make users and sysadmins very happy. In the first place,
they could just flag some app as latency sensitive, and have it served
as quickly as possible, whatever the app wants to do. Then, for
applications with real-timish requirements, they could set such
requirements and have them met, as well as possible, regardless of
whether the app is CPU-boud, I/O-bound, or both.
Thanks,
Paolo