lkml.org 
[lkml]   [2011]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/5] writeback: dirty position control
    > You somehow directly jump to  
    >
    > balanced_rate = task_ratelimit_200ms * write_bw / dirty_rate
    >
    > without explaining why following will not work.
    >
    > balanced_rate_(i+1) = balance_rate(i) * write_bw / dirty_rate

    Thanks for asking that, it's probably the root of confusions, so let
    me answer it standalone.

    It's actually pretty simple to explain this equation:

    write_bw
    balanced_rate = task_ratelimit_200ms * ---------- (1)
    dirty_rate

    If there are N dd tasks, each task is throttled at task_ratelimit_200ms
    for the past 200ms, we are going to measure the overall bdi dirty rate

    dirty_rate = N * task_ratelimit_200ms (2)

    put (2) into (1) we get

    balanced_rate = write_bw / N (3)

    So equation (1) is the right estimation to get the desired target (3).


    As for

    write_bw
    balanced_rate_(i+1) = balanced_rate_(i) * ---------- (4)
    dirty_rate

    Let's compare it with the "expanded" form of (1):

    write_bw
    balanced_rate_(i+1) = balanced_rate_(i) * pos_ratio * ---------- (5)
    dirty_rate

    So the difference lies in pos_ratio.

    Believe it or not, it's exactly the seemingly use of pos_ratio that
    makes (5) independent(*) of the position control.

    Why? Look at (4), assume the system is in a state

    - dirty rate is already balanced, ie. balanced_rate_(i) = write_bw / N
    - dirty position is not balanced, for example pos_ratio = 0.5

    balance_dirty_pages() will be rate limiting each tasks at half the
    balanced dirty rate, yielding a measured

    dirty_rate = write_bw / 2 (6)

    Put (6) into (4), we get

    balanced_rate_(i+1) = balanced_rate_(i) * 2
    = (write_bw / N) * 2

    That means, any position imbalance will lead to balanced_rate
    estimation errors if we follow (4). Whereas if (1)/(5) is used, we
    always get the right balanced dirty ratelimit value whether or not
    (pos_ratio == 1.0), hence make the rate estimation independent(*) of
    dirty position control.

    (*) independent as in real values, not the seemingly relations in equation

    Thanks,
    Fengguang


    \
     
     \ /
      Last update: 2011-08-24 02:15    [W:4.263 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site