[lkml]   [2009]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCH] libata: use single threaded work queue
    Alan Cox wrote:
    >> Are work threads per workqueue? Combined with per-cpu binding,
    >> dynamic thread pool per workqueue can get quite messy. All three
    >> factors end up getting multiplied - ie. #cpus * pool_size which can be
    >> enlarged by the same work hopping around * #workqueues.
    > Stop a moment. Exactly how many work queue users need per cpu binding
    > wizardry ?

    It's not about needing per-cpu binding but if works can be executed on
    the same cpu they were issued, it's almost always beneficial. The
    only reason why we have single threaded workqueue now is to limit the
    number of threads.

    >> Another problem is that if we apply this to the existing default
    >> workqueue which is used by many different supposed-to-be-short works
    >> in essentially batch mode, we might end up enlarging cache footprint
    >> by scheduling unnecessarily many threads, which, in tight situations,
    >> might show up as small but noticeable performance regression.
    > Only if you make the default assumed max wait time for the work too low -
    > its a tunable behaviour in fact.

    If the default workqueue is made to manage concurrency well, most
    works should be able to just use it, so the queue will contain both
    long running ones and short running ones which can disturb the current
    batch like processing of the default workqueue which is assumed to
    have only short ones.

    If we maintain separate workqueues for different purposes, a tuning
    knob could be enough. If we try to manage the whole thing in uniform
    manner, a good tune might not exist.

    I'm not sure either way yet. One of the reasons the current situation
    is messy is because there are too many segregations among different
    thread pools (different workqueues, async thread pool, other private
    kthreads). It would be great if a single work API is exported and
    concurrency is managed automatically so that no one else has to worry
    about concurrency but achieving that requires much more intelligence
    on the workqueue implementation as the basic concurrency policies
    which used to be imposed by those segregations need to be handled
    automatically. Maybe it's better trade-off to leave those
    segregations as-are and just add another workqueue type with dynamic
    thread pool.



     \ /
      Last update: 2009-08-19 19:01    [W:0.024 / U:8.420 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site