On Thu, Oct 03, 2019 at 09:45:52AM -0700, Tejun Heo wrote: > [...] but the qos file gets weird because the content of the file is > more resource control policies than device properties. I see two facets on this -- the semantics of the QoS controls and storing controller parameters generally. Because I'm not fully convinced using the root cgroup for the latter is a good idea and I don't have a better one (what about /sys/kernel/cgroup/?), I'd like to question the former to potentially postpone finding the place for its parameters :-) On Wed, Aug 28, 2019 at 03:05:58PM -0700, Tejun Heo wrote: > [...] > Please see the top comment in blk-iocost.c and documentation for > more details. I admit I did't grasp the explanations in the cgroup-v2.rst, perhaps some of the explanations from blk-iocost.c would be useful there as well. IIUC, the controls are supposed to be abstracted and generic to express high-level ideas and be independent of particular details. Here a bunch of parameters is introduced whose tuning may become a complex optimization task. What is the metric that is the QoS controller striving to guarantee? How does it differ from the io.latency policy? > [...] > + * 2-2. Vrate Adjustment > + * [...] When this delay becomes noticeable, it's a clear > + * indication that the device is saturated and we lower the vrate. This > + * saturation signal is fairly conservative as it only triggers when both > + * hardware and software queues are filled up, and is used as the default > + * busy signal. (The following paragraph is based only on naïve understanding of the block layer.) So the device's vrate is lowered, causing its vtime growing slower, i.e. postponing issuing an IO later for all cgroups accessing the device. But what's the purpose of this? If the queues fill up, wouldn't be all naturally pushed back by the longer queue time anyway? And wouldn't slowing down the device's vtime just cause queueing elsewhere? Thanks, Michal