• Corrado Zoccolo's avatar
    cfq-iosched: fairness for sync no-idle queues · 718eee05
    Corrado Zoccolo authored
    Currently no-idle queues in cfq are not serviced fairly:
    even if they can only dispatch a small number of requests at a time,
    they have to compete with idling queues to be serviced, experiencing
    large latencies.
    
    We should notice, instead, that no-idle queues are the ones that would
    benefit most from having low latency, in fact they are any of:
    * processes with large think times (e.g. interactive ones like file
      managers)
    * seeky (e.g. programs faulting in their code at startup)
    * or marked as no-idle from upper levels, to improve latencies of those
      requests.
    
    This patch improves the fairness and latency for those queues, by:
    * separating sync idle, sync no-idle and async queues in separate
      service_trees, for each priority
    * service all no-idle queues together
    * and idling when the last no-idle queue has been serviced, to
      anticipate for more no-idle work
    * the timeslices allotted for idle and no-idle service_trees are
      computed proportionally to the number of processes in each set.
    
    Servicing all no-idle queues together should have a performance boost
    for NCQ-capable drives, without compromising fairness.
    Signed-off-by: default avatarCorrado Zoccolo <czoccolo@gmail.com>
    Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
    718eee05
cfq-iosched.c 76.5 KB