All of lore.kernel.org
 help / color / mirror / Atom feed
From: Glauber Costa <glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
To: Suleiman Souhlal <suleiman-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: Suleiman Souhlal
	<ssouhlal-h+KGxgPPiopAfugRpC6u6w@public.gmane.org>,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org,
	penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	yinghan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org,
	linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org,
	devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org
Subject: Re: [PATCH 07/10] memcg: Stop res_counter underflows.
Date: Wed, 29 Feb 2012 14:05:52 -0300	[thread overview]
Message-ID: <4F4E5AF0.1080303@parallels.com> (raw)
In-Reply-To: <CABCjUKCaJVGShRKRkvBMrz_XNVGNrcguQ1uTP8Am1fQ1Te6PWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On 02/28/2012 08:07 PM, Suleiman Souhlal wrote:
> On Tue, Feb 28, 2012 at 5:31 AM, Glauber Costa<glommer-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>  wrote:
>> I don't fully understand this.
>> To me, the whole purpose of having a cache tied to a memcg, is that we know
>> all allocations from that particular cache should be billed to a specific
>> memcg. So after a cache is created, and has an assigned memcg,
>> what's the point in bypassing it to root?
>>
>> It smells like you're just using this to circumvent something...
>
> In the vast majority of the cases, we will be able to account to the cgroup.
> However, there are cases when __mem_cgroup_try_charge() is not able to
> do so, like when the task is being killed.
> When this happens, the allocation will not get accounted to the
> cgroup, but the slab accounting code will still think the page belongs
> to the memcg's kmem_cache.
> So, when we go to free the page, we assume that the page belongs to
> the memcg and uncharge it, even though it was never charged to us in
> the first place.
>
> This is the situation this patch is trying to address, by keeping a
> counter of how much memory has been bypassed like this, and uncharging
> from the root if we have any outstanding bypassed memory.
>
> Does that make sense?
>
Yes, but how about the following:

I had a similar problem in tcp accounting, and solved that by adding 
res_counter_charge_nofail().

I actually implemented something very similar to your bypass (now that I 
understand it better...) and gave up in favor of this.

The tcp code has its particularities, but still, that could work okay 
for the general slab.

Reason being:

Consider you have a limit of X, and is currently at X-1. You bypassed a 
page.

So in reality, you should fail the next allocation, but you will not - 
(unless you start considering the bypassed memory at allocation time as 
well).

If you use res_counter_charge_nofail(), you will:

  1) Still proceed with the allocations that shouldn't fail - so no
     difference here
  2) fail the normal allocations if you have "bypassed" memory filling
     up your limit
  3) all that without coupling something alien to the res_counter API.




WARNING: multiple messages have this Message-ID (diff)
From: Glauber Costa <glommer@parallels.com>
To: Suleiman Souhlal <suleiman@google.com>
Cc: Suleiman Souhlal <ssouhlal@freebsd.org>,
	cgroups@vger.kernel.org, kamezawa.hiroyu@jp.fujitsu.com,
	penberg@kernel.org, yinghan@google.com, hughd@google.com,
	gthelen@google.com, linux-mm@kvack.org, devel@openvz.org
Subject: Re: [PATCH 07/10] memcg: Stop res_counter underflows.
Date: Wed, 29 Feb 2012 14:05:52 -0300	[thread overview]
Message-ID: <4F4E5AF0.1080303@parallels.com> (raw)
In-Reply-To: <CABCjUKCaJVGShRKRkvBMrz_XNVGNrcguQ1uTP8Am1fQ1Te6PWA@mail.gmail.com>

On 02/28/2012 08:07 PM, Suleiman Souhlal wrote:
> On Tue, Feb 28, 2012 at 5:31 AM, Glauber Costa<glommer@parallels.com>  wrote:
>> I don't fully understand this.
>> To me, the whole purpose of having a cache tied to a memcg, is that we know
>> all allocations from that particular cache should be billed to a specific
>> memcg. So after a cache is created, and has an assigned memcg,
>> what's the point in bypassing it to root?
>>
>> It smells like you're just using this to circumvent something...
>
> In the vast majority of the cases, we will be able to account to the cgroup.
> However, there are cases when __mem_cgroup_try_charge() is not able to
> do so, like when the task is being killed.
> When this happens, the allocation will not get accounted to the
> cgroup, but the slab accounting code will still think the page belongs
> to the memcg's kmem_cache.
> So, when we go to free the page, we assume that the page belongs to
> the memcg and uncharge it, even though it was never charged to us in
> the first place.
>
> This is the situation this patch is trying to address, by keeping a
> counter of how much memory has been bypassed like this, and uncharging
> from the root if we have any outstanding bypassed memory.
>
> Does that make sense?
>
Yes, but how about the following:

I had a similar problem in tcp accounting, and solved that by adding 
res_counter_charge_nofail().

I actually implemented something very similar to your bypass (now that I 
understand it better...) and gave up in favor of this.

The tcp code has its particularities, but still, that could work okay 
for the general slab.

Reason being:

Consider you have a limit of X, and is currently at X-1. You bypassed a 
page.

So in reality, you should fail the next allocation, but you will not - 
(unless you start considering the bypassed memory at allocation time as 
well).

If you use res_counter_charge_nofail(), you will:

  1) Still proceed with the allocations that shouldn't fail - so no
     difference here
  2) fail the normal allocations if you have "bypassed" memory filling
     up your limit
  3) all that without coupling something alien to the res_counter API.




--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2012-02-29 17:05 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-27 22:58 [PATCH 00/10] memcg: Kernel Memory Accounting Suleiman Souhlal
2012-02-27 22:58 ` [PATCH 01/10] memcg: Kernel memory accounting infrastructure Suleiman Souhlal
     [not found]   ` <1330383533-20711-2-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-28 13:10     ` Glauber Costa
2012-02-28 13:10       ` Glauber Costa
     [not found]       ` <4F4CD231.907-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-29  0:37         ` Suleiman Souhlal
2012-02-29  0:37           ` Suleiman Souhlal
2012-02-28 13:11     ` Glauber Costa
2012-02-28 13:11       ` Glauber Costa
2012-02-27 22:58 ` [PATCH 02/10] memcg: Uncharge all kmem when deleting a cgroup Suleiman Souhlal
     [not found]   ` <1330383533-20711-3-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-28 19:00     ` Glauber Costa
2012-02-28 19:00       ` Glauber Costa
     [not found]       ` <4F4D2459.3010908-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-29  0:24         ` Suleiman Souhlal
2012-02-29  0:24           ` Suleiman Souhlal
2012-02-29 16:51           ` Glauber Costa
2012-02-29  6:22     ` KAMEZAWA Hiroyuki
2012-02-29  6:22       ` KAMEZAWA Hiroyuki
     [not found]       ` <20120229152227.aa416668.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-02-29 19:00         ` Suleiman Souhlal
2012-02-29 19:00           ` Suleiman Souhlal
2012-02-27 22:58 ` [PATCH 05/10] memcg: Slab accounting Suleiman Souhlal
     [not found]   ` <1330383533-20711-6-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-28 13:24     ` Glauber Costa
2012-02-28 13:24       ` Glauber Costa
     [not found]       ` <4F4CD573.20208-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-28 23:31         ` Suleiman Souhlal
2012-02-28 23:31           ` Suleiman Souhlal
2012-02-29 17:00           ` Glauber Costa
2012-02-27 22:58 ` [PATCH 08/10] memcg: Add CONFIG_CGROUP_MEM_RES_CTLR_KMEM_ACCT_ROOT Suleiman Souhlal
2012-02-28 13:34   ` Glauber Costa
2012-02-28 23:36     ` Suleiman Souhlal
     [not found]       ` <CABCjUKAUQZuW9hFeMJ1Oh=0UeS2Ffx4-vHpnaGpjOFu+3KktAA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-28 23:54         ` KAMEZAWA Hiroyuki
2012-02-28 23:54           ` KAMEZAWA Hiroyuki
2012-02-29 17:09         ` Glauber Costa
2012-02-29 17:09           ` Glauber Costa
     [not found]           ` <4F4E5BC5.9010408-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-29 19:24             ` Suleiman Souhlal
2012-02-29 19:24               ` Suleiman Souhlal
     [not found] ` <1330383533-20711-1-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-27 22:58   ` [PATCH 03/10] memcg: Reclaim when more than one page needed Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
2012-02-29  6:18     ` KAMEZAWA Hiroyuki
2012-02-27 22:58   ` [PATCH 04/10] memcg: Introduce __GFP_NOACCOUNT Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
2012-02-29  6:00     ` KAMEZAWA Hiroyuki
2012-02-29 16:53       ` Glauber Costa
     [not found]       ` <20120229150041.62c1feeb.kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
2012-02-29 19:09         ` Suleiman Souhlal
2012-02-29 19:09           ` Suleiman Souhlal
     [not found]           ` <CABCjUKBHjLHKUmW6_r0SOyw42WfV0zNO7Kd7FhhRQTT6jZdyeQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-03-01  0:10             ` KAMEZAWA Hiroyuki
2012-03-01  0:10               ` KAMEZAWA Hiroyuki
2012-03-01  0:24               ` Glauber Costa
     [not found]                 ` <4F4EC1AB.8050506-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-03-01  6:05                   ` KAMEZAWA Hiroyuki
2012-03-01  6:05                     ` KAMEZAWA Hiroyuki
2012-03-03 14:22                     ` Glauber Costa
     [not found]                       ` <4F522910.1050402-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-03-03 16:38                         ` Suleiman Souhlal
2012-03-03 16:38                           ` Suleiman Souhlal
     [not found]                           ` <CABCjUKBngJx0o5jnJk3FEjWUDA6aNTAiFENdEF+M7BwB85NaLg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-03-03 23:24                             ` Glauber Costa
2012-03-03 23:24                               ` Glauber Costa
2012-03-04  0:10                               ` Suleiman Souhlal
     [not found]                                 ` <CABCjUKBP=pKgDP5RkD4BimTjoE=bQQO7NxNNAiGUfy602T4c7A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-03-06 10:36                                   ` Glauber Costa
2012-03-06 10:36                                     ` Glauber Costa
     [not found]                                     ` <4F55E8BB.5060704-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-03-06 16:13                                       ` Suleiman Souhlal
2012-03-06 16:13                                         ` Suleiman Souhlal
2012-03-06 18:31                                         ` Glauber Costa
2012-02-27 22:58   ` [PATCH 06/10] memcg: Track all the memcg children of a kmem_cache Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
2012-02-27 22:58   ` [PATCH 07/10] memcg: Stop res_counter underflows Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
     [not found]     ` <1330383533-20711-8-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-28 13:31       ` Glauber Costa
2012-02-28 13:31         ` Glauber Costa
2012-02-28 23:07         ` Suleiman Souhlal
     [not found]           ` <CABCjUKCaJVGShRKRkvBMrz_XNVGNrcguQ1uTP8Am1fQ1Te6PWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-29 17:05             ` Glauber Costa [this message]
2012-02-29 17:05               ` Glauber Costa
2012-02-29 19:17               ` Suleiman Souhlal
2012-02-27 22:58   ` [PATCH 09/10] memcg: Per-memcg memory.kmem.slabinfo file Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
2012-02-27 22:58   ` [PATCH 10/10] memcg: Document kernel memory accounting Suleiman Souhlal
2012-02-27 22:58     ` Suleiman Souhlal
     [not found]     ` <1330383533-20711-11-git-send-email-ssouhlal-HZy0K5TPuP5AfugRpC6u6w@public.gmane.org>
2012-02-27 23:05       ` Randy Dunlap
2012-02-27 23:05         ` Randy Dunlap
2012-02-28  8:49   ` [PATCH 00/10] memcg: Kernel Memory Accounting Pekka Enberg
2012-02-28  8:49     ` Pekka Enberg
2012-02-28 22:12     ` Suleiman Souhlal
2012-02-28 13:03   ` Glauber Costa
2012-02-28 13:03     ` Glauber Costa
     [not found]     ` <4F4CD0AF.1050508-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-28 22:47       ` Suleiman Souhlal
2012-02-28 22:47         ` Suleiman Souhlal
     [not found]         ` <CABCjUKCQk0RDWH80uQw+SxYsu=1L4GSGBNJWNFD=20o_j8P+ng-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-02-29 16:47           ` Glauber Costa
2012-02-29 16:47             ` Glauber Costa
     [not found]             ` <4F4E56A8.4000703-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
2012-02-29 19:28               ` Suleiman Souhlal
2012-02-29 19:28                 ` Suleiman Souhlal

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=4F4E5AF0.1080303@parallels.com \
    --to=glommer-bzqdu9zft3wakbo8gow8eq@public.gmane.org \
    --cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org \
    --cc=gthelen-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=hughd-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org \
    --cc=linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org \
    --cc=penberg-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=ssouhlal-h+KGxgPPiopAfugRpC6u6w@public.gmane.org \
    --cc=suleiman-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=yinghan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.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.