lkml.org 
[lkml]   [2011]   [Aug]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/5] writeback: dirty position control
    On Wed, Aug 10, 2011 at 01:20:27AM +0800, Peter Zijlstra wrote:
    > On Tue, 2011-08-09 at 12:32 +0200, Peter Zijlstra wrote:
    > > > origin - dirty
    > > > pos_ratio = --------------
    > > > origin - goal
    > >
    > > > which comes from the below [*] control line, so that when (dirty == goal),
    > > > pos_ratio == 1.0:
    > >
    > > OK, so basically you want a linear function for which:
    > >
    > > f(goal) = 1 and has a root somewhere > goal.
    > >
    > > (that one line is much more informative than all your graphs put
    > > together, one can start from there and derive your function)
    > >
    > > That does indeed get you the above function, now what does it mean?
    >
    > So going by:
    >
    > write_bw
    > ref_bw = dirty_ratelimit * pos_ratio * --------
    > dirty_bw
    >
    > pos_ratio seems to be the feedback on the deviation of the dirty pages
    > around its setpoint.

    Yes.

    > So we adjust the reference bw (or rather ratelimit)
    > to take account of the shift in output vs input capacity as well as the
    > shift in dirty pages around its setpoint.

    However the above function should better be interpreted as

    write_bw
    ref_bw = task_ratelimit_in_past_200ms * --------
    dirty_bw

    where
    task_ratelimit_in_past_200ms ~= dirty_ratelimit * pos_ratio

    It would be highly confusing if trying to find the direct "logical"
    relationships between ref_bw and pos_ratio in the above equation.

    > From that we derive the condition that:
    >
    > pos_ratio(setpoint) := 1

    Right.

    > Now in order to create a linear function we need one more condition. We
    > get one from the fact that once we hit the limit we should hard throttle
    > our writers. We get that by setting the ratelimit to 0, because, after
    > all, pause = nr_dirtied / ratelimit would yield inf. in that case. Thus:
    >
    > pos_ratio(limit) := 0
    >
    > Using these two conditions we can solve the equations and get your:
    >
    > limit - dirty
    > pos_ratio(dirty) = ----------------
    > limit - setpoint
    >
    > Now, for some reason you chose not to use limit, but something like
    > min(limit, 4*thresh) something to do with the slope affecting the rate
    > of adjustment. This wants a comment someplace.

    Thanks to your reasoning that lead to the more elegant

    setpoint - dirty 3
    pos_ratio(dirty) := 1 + (----------------)
    limit - setpoint

    Thanks,
    Fengguang


    \
     
     \ /
      Last update: 2011-08-12 15:23    [W:0.025 / U:89.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site