cgroups.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHSET cgroup/for-3.11] cgroup: convert cgroup_subsys_state refcnt to percpu_ref
@ 2013-06-12 21:03 Tejun Heo
  2013-06-12 21:03 ` [PATCH 04/11] cgroup: use kzalloc() and list_del_init() Tejun Heo
                   ` (4 more replies)
  0 siblings, 5 replies; 24+ messages in thread
From: Tejun Heo @ 2013-06-12 21:03 UTC (permalink / raw)
  To: lizefan-hv44wF8Li93QT0dZR+AlfA
  Cc: cgroups-u79uwXL29TY76Z2rM5mHXA,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA,
	cl-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b,
	koverstreet-hpIqsD4AKlfQT0dZR+AlfA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA

Hello,

This patchset does a lot of cleanup and then updates css
(cgroup_subsys_state) refcnt to use the new percpu reference counter.
A css (cgroup_subsys_state) is how each cgroup is represented to a
controller.  As such, it can be used in hot paths across the various
subsystems different controllers are associated with.

One of the common operations is reference counting, which up until now
has been implemented using a global atomic counter and can have
significant adverse impact on scalability.  For example, css refcnt
can be gotten and put multiple times by blkcg for each IO request.
For highops configurations which try to do as much per-cpu as
possible, the global frequent refcnting can be very expensive.

In general, given the various hugely diverse paths css's end up being
used from, we need to make it cheap and highly scalable.  In its
usage, css refcnting isn't very different from module refcnting.

This patchset contains the following 11 patches.

 0001-cgroup-remove-now-unused-css_depth.patch
 0002-cgroup-consistently-use-cset-for-struct-css_set-vari.patch
 0003-cgroup-bring-some-sanity-to-naming-around-cg_cgroup_.patch
 0004-cgroup-use-kzalloc-and-list_del_init.patch
 0005-cgroup-clean-up-css_-try-get-and-css_put.patch
 0006-cgroup-rename-CGRP_REMOVED-to-CGRP_DEAD.patch
 0007-cgroup-drop-unnecessary-RCU-dancing-from-__put_css_s.patch
 0008-cgroup-remove-cgroup-count-and-use.patch
 0009-cgroup-reorder-the-operations-in-cgroup_destroy_lock.patch
 0010-cgroup-split-cgroup-destruction-into-two-steps.patch
 0011-cgroup-use-percpu-refcnt-for-cgroup_subsys_states.patch

0001-0007 are cleanups, many of them cosmetic.  They clean up the code
paths which are related with the refcnting changes.  If you're only
interested in the precpu usage, you can probably skip these.

0008-0010 updates the cgroup destruction path so that percpu refcnting
can be used.

0011 updates css refcnting to use percpu_ref.

This patchset is on top of

  cgroup/for-3.11 d5c56ced77 ("cgroup: clean up the cftype array for the base cgroup files")
+ [1] percpu/review-percpu-ref-tryget

and available in the following git branch.

 git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git review-css-percpu-ref

diffstat follows.  Thanks.

 include/linux/cgroup.h |   87 ++----
 kernel/cgroup.c        |  710 +++++++++++++++++++++++++------------------------
 2 files changed, 406 insertions(+), 391 deletions(-)

--
tejun

[1] http://thread.gmane.org/gmane.linux.kernel/1507258

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2013-06-13  3:13 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-12 21:03 [PATCHSET cgroup/for-3.11] cgroup: convert cgroup_subsys_state refcnt to percpu_ref Tejun Heo
2013-06-12 21:03 ` [PATCH 04/11] cgroup: use kzalloc() and list_del_init() Tejun Heo
     [not found]   ` <1371070996-20613-5-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-13  2:36     ` Li Zefan
     [not found]       ` <51B93038.9010202-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-06-13  2:38         ` Kent Overstreet
2013-06-13  2:41           ` Tejun Heo
     [not found]             ` <CAOS58YPv_uKeTqZSNF=sXTEnLn=LTbsdpBPM5K_ykXoVT-+CpA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-06-13  2:43               ` Kent Overstreet
2013-06-13  2:48                 ` Tejun Heo
     [not found]                   ` <20130613024859.GA7432-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-06-13  2:52                     ` Kent Overstreet
2013-06-13  2:56                       ` Tejun Heo
     [not found]                         ` <20130613025623.GB7432-9pTldWuhBndy/B6EtB590w@public.gmane.org>
2013-06-13  3:05                           ` Tejun Heo
2013-06-13  3:13           ` Li Zefan
2013-06-13  2:39         ` Tejun Heo
2013-06-12 21:03 ` [PATCH 06/11] cgroup: rename CGRP_REMOVED to CGRP_DEAD Tejun Heo
2013-06-12 21:03 ` [PATCH 08/11] cgroup: remove cgroup->count and use Tejun Heo
     [not found] ` <1371070996-20613-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-12 21:03   ` [PATCH 01/11] cgroup: remove now unused css_depth() Tejun Heo
2013-06-12 21:03   ` [PATCH 02/11] cgroup: consistently use @cset for struct css_set variables Tejun Heo
2013-06-12 21:03   ` [PATCH 03/11] cgroup: bring some sanity to naming around cg_cgroup_link Tejun Heo
     [not found]     ` <1371070996-20613-4-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-13  2:34       ` Li Zefan
2013-06-12 21:03   ` [PATCH 05/11] cgroup: clean up css_[try]get() and css_put() Tejun Heo
     [not found]     ` <1371070996-20613-6-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2013-06-13  2:38       ` Li Zefan
2013-06-12 21:03   ` [PATCH 07/11] cgroup: drop unnecessary RCU dancing from __put_css_set() Tejun Heo
2013-06-12 21:03   ` [PATCH 09/11] cgroup: reorder the operations in cgroup_destroy_locked() Tejun Heo
2013-06-12 21:03   ` [PATCH 10/11] cgroup: split cgroup destruction into two steps Tejun Heo
2013-06-12 21:03 ` [PATCH 11/11] cgroup: use percpu refcnt for cgroup_subsys_states Tejun Heo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).