From: Bandan Das <bsd@redhat.com>
To: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
mst@redhat.com, jiangshanlai@gmail.com, RAPOPORT@il.ibm.com
Subject: Re: [RFC PATCH 0/4] cgroup aware workqueues
Date: Mon, 21 Mar 2016 13:35:54 -0400 [thread overview]
Message-ID: <jpg60wfd98l.fsf@linux.bootlegged.copy> (raw)
In-Reply-To: <20160320181038.GQ20028@mtj.duckdns.org> (Tejun Heo's message of "Sun, 20 Mar 2016 14:10:38 -0400")
Tejun Heo <tj@kernel.org> writes:
> Hello,
>
> On Fri, Mar 18, 2016 at 06:14:47PM -0400, Bandan Das wrote:
>> These changes don't populate the "numa awareness" fields/attrs and
>> unlike unbounded numa worker pools, cgroup worker pools are created
>> on demand. Every work request could potentially have a new cgroup
>
> Hmmm... I don't get it. Why would this be exclusive with numa
> support? Can't cgroup be just another attribute in addition to numa?
Yes, I think it can. I am not certain what would be a good representation
of the cgroup information; maybe, all cgroups could be represented by just a
simple bitmap just like numa attrs ? The other thing that was on my mind is
what happens when there's no intersection between the cgroups
of a task and the numa locality. For example, if node 1 with cpus 0,1,2,3 is local to
task A but it's cgroups want to attach to cpus 4-5, then who wins in this case ?
Or a simple logic would be to always attach to cgroups as the last step.
>> aware pool created for it based on the combination of cgroups it's attached
>> to. However, workqueues themselves are incognizant of the actual cgroups -
>> they rely on the cgroups provided helper functions either for 1. a match
>> of all the cgroups or 2. to attach a worker thread to all cgroups of
>> a userspace task. We do maintain a list of cgroup aware pools so that
>> when a new request comes in and a suitable worker pool needs to be
>> found, we search the list first before creating a new one. A worker
>> pool also stores a a list of all "task owners" - a list of processes
>> that we are serving currently.
>
> Why is this separate from the normal lookup mechanism? Can't it be
> hashed together?
>
>> Todo:
>> What about bounded workqueues ?
>
> I don't think it'd matter. This is only interesting for work items
> which may consume a significant amount of resources, which shouldn't
> be served by per-cpu workers anyway.
Ok.
>> What happens when cgroups of a running process changes ?
>
> Existing work items will be served with the old association. New work
> items will be served with the new association. This is consistent
> with how other attributes are handled too.
In the current implementation, the cgroup info is fetched just once
when alloc_workqueue is called. So, there's no way of knowing if the
cgroups changed. Maybe I should rethink this too.
>> Better performance numbers ? (although the onese above don't look bad)
>
> Where is performance regression coming from? Why is there *any*
> performance penalty?
I am still investigating this but creating more worker threads could
be one.
/* do we need to manage? */
if (unlikely(!may_start_working(pool)) && manage_workers(worker))
goto recheck;
Since all work gets queued to the default pwq in this implementation,
we do end up creating workers in the middle of a run.
> Thanks.
next prev parent reply other threads:[~2016-03-21 17:35 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-18 22:14 [RFC PATCH 0/4] cgroup aware workqueues Bandan Das
2016-03-18 22:14 ` [RFC PATCH 1/4] cgroup: Introduce a function to compare two tasks Bandan Das
2016-03-18 22:14 ` [RFC PATCH 2/4] workqueue: introduce support for attaching to cgroups Bandan Das
2016-03-18 22:14 ` [RFC PATCH 3/4] cgroup: use spin_lock_irq for cgroup match and attach fns Bandan Das
2016-03-18 22:14 ` [RFC PATCH 4/4] vhost: use workqueues for the works Bandan Das
2016-03-20 18:10 ` [RFC PATCH 0/4] cgroup aware workqueues Tejun Heo
2016-03-21 17:35 ` Bandan Das [this message]
2016-03-21 7:58 ` Michael Rapoport
2016-03-21 17:43 ` Bandan Das
2016-03-22 7:12 ` vhost threading model (was: Re: [RFC PATCH 0/4] cgroup aware workqueues) Michael Rapoport
2016-03-22 7:12 ` Michael Rapoport
2016-03-22 7:12 ` Michael Rapoport
2016-03-22 19:00 ` vhost threading model Bandan Das
2016-03-23 11:13 ` Michael Rapoport
2016-03-23 11:13 ` Michael Rapoport
2016-03-21 7:58 ` [RFC PATCH 0/4] cgroup aware workqueues Michael Rapoport
2016-03-21 7:58 ` Michael Rapoport
2016-03-21 8:29 ` Christian Borntraeger
2016-03-21 17:49 ` Bandan Das
[not found] ` <201603210758.u2L7wiY9003907@d06av07.portsmouth.uk.ibm.com>
2016-03-30 17:04 ` Tejun Heo
2016-03-31 6:17 ` Michael Rapoport
2016-03-31 6:17 ` Michael Rapoport
2016-03-31 6:17 ` Michael Rapoport
2016-03-31 17:14 ` Tejun Heo
2016-03-31 18:45 ` Bandan Das
2016-04-03 10:43 ` Michael Rapoport
2016-04-03 10:43 ` Michael Rapoport
2016-04-03 10:43 ` Michael Rapoport
[not found] ` <201604031043.u33AhpSF023771@d06av06.portsmouth.uk.ibm.com>
2016-04-04 17:00 ` Bandan Das
2016-04-03 10:43 ` Michael Rapoport
2016-04-03 10:43 ` Michael Rapoport
2016-05-27 9:22 ` Michael Rapoport
2016-05-27 9:22 ` Michael Rapoport
2016-05-27 14:17 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=jpg60wfd98l.fsf@linux.bootlegged.copy \
--to=bsd@redhat.com \
--cc=RAPOPORT@il.ibm.com \
--cc=jiangshanlai@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.