Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1552592 > unrolled thread

[rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

Started byMike Galbraith <efault@gmx.de>
First post2017-01-06 09:20 +0100
Last post2017-01-06 14:20 +0100
Articles 6 — 3 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [rfc patch-rt] radix-tree: Partially disable memcg accounting in  radix_tree_node_alloc() Mike Galbraith <efault@gmx.de> - 2017-01-06 09:20 +0100
    Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting in  radix_tree_node_alloc() Michal Hocko <mhocko@kernel.org> - 2017-01-06 10:00 +0100
      Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting  in radix_tree_node_alloc() Mike Galbraith <efault@gmx.de> - 2017-01-06 12:00 +0100
        Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting  in radix_tree_node_alloc() Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-01-06 13:30 +0100
          Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting  in radix_tree_node_alloc() Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-01-06 14:00 +0100
    Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting  in radix_tree_node_alloc() Mike Galbraith <umgwanakikbuti@gmail.com> - 2017-01-06 14:20 +0100

#1552592 — [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

FromMike Galbraith <efault@gmx.de>
Date2017-01-06 09:20 +0100
Subject[rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Message-ID<sWxUJ-7lA-11@gated-at.bofh.it>
radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

Having no preload, which turns accounting off for non-rt kernels, trying to
allocate coming from shmem_fault() when memcg is full sends us scurrying off
to pagefault_out_of_memory(), with dramatic (usually terminal) consequences.
LTP's madvise06 testcase triggers this quite well, and per gitk, the below
was the beginning of RT memcg woes.

58e698af4c63 radix-tree: account radix_tree_node to memory cgroup

Turn memcg accounting off for RT in the problematic path.

Signed-off-by: Mike Galbraith <efault@gmx.de>
Cc: stable-rt@vger.kernel.org # +v4.6-rt
---
 lib/radix-tree.c |    7 +++++++
 1 file changed, 7 insertions(+)

--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
@@ -303,6 +303,13 @@ radix_tree_node_alloc(struct radix_tree_
 	if (!gfpflags_allow_blocking(gfp_mask) && !in_interrupt()) {
 		struct radix_tree_preload *rtp;
 
+#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_MEMCG)
+		/*
+		 * Arriving here from shmem_fault() and meeting a full memcg
+		 * will send us to pagefault_out_of_memory(), and a dead box.
+		 */
+		gfp_mask &= ~__GFP_ACCOUNT;
+#endif
 		/*
 		 * Even if the caller has preloaded, try to allocate from the
 		 * cache first for the new node to get accounted to the memory

[toc] | [next] | [standalone]


#1552614

FromMichal Hocko <mhocko@kernel.org>
Date2017-01-06 10:00 +0100
Message-ID<sWyxr-7IH-17@gated-at.bofh.it>
In reply to#1552592
On Fri 06-01-17 09:13:23, Mike Galbraith wrote:
> radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
> 
> Having no preload, which turns accounting off for non-rt kernels, trying to
> allocate coming from shmem_fault() when memcg is full sends us scurrying off
> to pagefault_out_of_memory(), with dramatic (usually terminal) consequences.
> LTP's madvise06 testcase triggers this quite well, and per gitk, the below
> was the beginning of RT memcg woes.
> 
> 58e698af4c63 radix-tree: account radix_tree_node to memory cgroup
> 
> Turn memcg accounting off for RT in the problematic path.

I am really wondering why this is RT specific and the non RT kernels
doesn't have any problem.
 
> Signed-off-by: Mike Galbraith <efault@gmx.de>
> Cc: stable-rt@vger.kernel.org # +v4.6-rt
> ---
>  lib/radix-tree.c |    7 +++++++
>  1 file changed, 7 insertions(+)
> 
> --- a/lib/radix-tree.c
> +++ b/lib/radix-tree.c
> @@ -303,6 +303,13 @@ radix_tree_node_alloc(struct radix_tree_
>  	if (!gfpflags_allow_blocking(gfp_mask) && !in_interrupt()) {
>  		struct radix_tree_preload *rtp;
>  
> +#if defined(CONFIG_PREEMPT_RT_FULL) && defined(CONFIG_MEMCG)
> +		/*
> +		 * Arriving here from shmem_fault() and meeting a full memcg
> +		 * will send us to pagefault_out_of_memory(), and a dead box.
> +		 */
> +		gfp_mask &= ~__GFP_ACCOUNT;
> +#endif
>  		/*
>  		 * Even if the caller has preloaded, try to allocate from the
>  		 * cache first for the new node to get accounted to the memory

-- 
Michal Hocko
SUSE Labs

[toc] | [prev] | [next] | [standalone]


#1552687 — Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

FromMike Galbraith <efault@gmx.de>
Date2017-01-06 12:00 +0100
SubjectRe: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Message-ID<sWApz-zS-3@gated-at.bofh.it>
In reply to#1552614
On Fri, 2017-01-06 at 09:55 +0100, Michal Hocko wrote:
> On Fri 06-01-17 09:13:23, Mike Galbraith wrote:
> > radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
> > 
> > Having no preload, which turns accounting off for non-rt kernels, trying to
> > allocate coming from shmem_fault() when memcg is full sends us scurrying off
> > to pagefault_out_of_memory(), with dramatic (usually terminal) consequences.
> > LTP's madvise06 testcase triggers this quite well, and per gitk, the below
> > was the beginning of RT memcg woes.
> > 
> > 58e698af4c63 radix-tree: account radix_tree_node to memory cgroup
> > 
> > Turn memcg accounting off for RT in the problematic path.
> 
> I am really wondering why this is RT specific and the non RT kernels
> doesn't have any problem.

For all I know, there may be a scenario for non-RT to explode, but the
madvise06 testcase that thoroughly nails RT ain't it.

	-Mike

[toc] | [prev] | [next] | [standalone]


#1552745 — Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

FromMike Galbraith <umgwanakikbuti@gmail.com>
Date2017-01-06 13:30 +0100
SubjectRe: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Message-ID<sWBOG-1Ry-7@gated-at.bofh.it>
In reply to#1552687
On Fri, 2017-01-06 at 11:52 +0100, Mike Galbraith wrote:
> On Fri, 2017-01-06 at 09:55 +0100, Michal Hocko wrote:
> > On Fri 06-01-17 09:13:23, Mike Galbraith wrote:
> > > radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
> > > 
> > > Having no preload, which turns accounting off for non-rt kernels, trying to
> > > allocate coming from shmem_fault() when memcg is full sends us scurrying off
> > > to pagefault_out_of_memory(), with dramatic (usually terminal) consequences.
> > > LTP's madvise06 testcase triggers this quite well, and per gitk, the below
> > > was the beginning of RT memcg woes.
> > > 
> > > 58e698af4c63 radix-tree: account radix_tree_node to memory cgroup
> > > 
> > > Turn memcg accounting off for RT in the problematic path.
> > 
> > I am really wondering why this is RT specific and the non RT kernels
> > doesn't have any problem.
> 
> For all I know, there may be a scenario for non-RT to explode, but the
> madvise06 testcase that thoroughly nails RT ain't it.

Unless you twiddle/apply the RT tree radix-tree patch.  So (as rashly
presumed), memcg woes are RT specific because RT disabled the preload
business.  madvise06 isn't as deadly to the twiddled PREEMPT kernel as
it is to PREEMPT_RT_FULL, but a very few runs attracted the oom beast.

('course there still may be a non-RT danger path lurking.. dunno)

[   81.376673] madvise06 invoked oom-killer: gfp_mask=0x0(), nodemask=0, order=0, oom_score_adj=-1000
[   81.376676] madvise06 cpuset=/ mems_allowed=0
[   81.376680] CPU: 5 PID: 4018 Comm: madvise06 Tainted: G            E   4.10.0-preempt #31
[   81.376681] Hardware name: MEDION MS-7848/MS-7848, BIOS M7848W08.20C 09/23/2013
[   81.376682] Call Trace:
[   81.376687]  ? dump_stack+0x5c/0x7e
[   81.376690]  ? dump_header+0x7f/0x241
[   81.376692]  ? __do_fault+0x1d/0x70
[   81.376693]  ? handle_mm_fault+0x3f5/0xfe0
[   81.376696]  ? oom_kill_process+0x225/0x3f0
[   81.376697]  ? oom_badness+0x70/0x180
[   81.376699]  ? out_of_memory+0x103/0x4a0
[   81.376700]  ? pagefault_out_of_memory+0x43/0x60
[   81.376703]  ? do_page_fault+0x2b/0x70
[   81.376705]  ? page_fault+0x28/0x30

From: Thomas Gleixner <tglx@linutronix.de>
Date: Sun, 17 Jul 2011 21:33:18 +0200
Subject: radix-tree: Make RT aware

Disable radix_tree_preload() on -RT. This functions returns with
preemption disabled which may cause high latencies and breaks if the
user tries to grab any locks after invoking it.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 include/linux/radix-tree.h |   18 +++++++++++++++++-
 lib/radix-tree.c           |    5 ++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

--- a/include/linux/radix-tree.h
+++ b/include/linux/radix-tree.h
@@ -318,9 +318,24 @@ unsigned int radix_tree_gang_lookup(stru
 unsigned int radix_tree_gang_lookup_slot(struct radix_tree_root *root,
 			void ***results, unsigned long *indices,
 			unsigned long first_index, unsigned int max_items);
+#ifdef CONFIG_PREEMPT
+static inline int radix_tree_preload(gfp_t gm) { return 0; }
+static inline int radix_tree_maybe_preload(gfp_t gfp_mask) { return 0; }
+static inline int radix_tree_maybe_preload_order(gfp_t gfp_mask, int order)
+{
+	return 0;
+}
+
+static inline int radix_tree_split_preload(unsigned old_order, unsigned new_order, gfp_t gfp_mask)
+{
+	return 0;
+}
+#else
 int radix_tree_preload(gfp_t gfp_mask);
 int radix_tree_maybe_preload(gfp_t gfp_mask);
 int radix_tree_maybe_preload_order(gfp_t gfp_mask, int order);
+int radix_tree_split_preload(unsigned old_order, unsigned new_order, gfp_t gfp_mask);
+#endif
 void radix_tree_init(void);
 void *radix_tree_tag_set(struct radix_tree_root *root,
 			unsigned long index, unsigned int tag);
@@ -342,10 +357,11 @@ int radix_tree_tagged(struct radix_tree_
 
 static inline void radix_tree_preload_end(void)
 {
+#ifndef CONFIG_PREEMPT
 	preempt_enable();
+#endif
 }
 
-int radix_tree_split_preload(unsigned old_order, unsigned new_order, gfp_t);
 int radix_tree_split(struct radix_tree_root *, unsigned long index,
 			unsigned new_order);
 int radix_tree_join(struct radix_tree_root *, unsigned long index,
--- a/lib/radix-tree.c
+++ b/lib/radix-tree.c
@@ -318,13 +318,14 @@ radix_tree_node_alloc(struct radix_tree_
 		 * succeed in getting a node here (and never reach
 		 * kmem_cache_alloc)
 		 */
-		rtp = this_cpu_ptr(&radix_tree_preloads);
+		rtp = &get_cpu_var(radix_tree_preloads);
 		if (rtp->nr) {
 			ret = rtp->nodes;
 			rtp->nodes = ret->private_data;
 			ret->private_data = NULL;
 			rtp->nr--;
 		}
+		put_cpu_var(radix_tree_preloads);
 		/*
 		 * Update the allocation stack trace as this is more useful
 		 * for debugging.
@@ -368,6 +369,7 @@ radix_tree_node_free(struct radix_tree_n
 	call_rcu(&node->rcu_head, radix_tree_node_rcu_free);
 }
 
+#ifndef CONFIG_PREEMPT
 /*
  * Load up this CPU's radix_tree_node buffer with sufficient objects to
  * ensure that the addition of a single element in the tree cannot fail.  On
@@ -509,6 +511,7 @@ int radix_tree_maybe_preload_order(gfp_t
 
 	return __radix_tree_preload(gfp_mask, nr_nodes);
 }
+#endif
 
 static unsigned radix_tree_load_root(struct radix_tree_root *root,
 		struct radix_tree_node **nodep, unsigned long *maxindex)

[toc] | [prev] | [next] | [standalone]


#1552761 — Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

FromMike Galbraith <umgwanakikbuti@gmail.com>
Date2017-01-06 14:00 +0100
SubjectRe: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Message-ID<sWChH-24g-21@gated-at.bofh.it>
In reply to#1552745
On Fri, 2017-01-06 at 13:20 +0100, Mike Galbraith wrote:

> > > madvise06 isn't as deadly to the twiddled PREEMPT kernel as
> it is to PREEMPT_RT_FULL, but a very few runs attracted the oom beast.

The very next run paniced the box... deadly enough for gvt. work :)

[toc] | [prev] | [next] | [standalone]


#1552774 — Re: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()

FromMike Galbraith <umgwanakikbuti@gmail.com>
Date2017-01-06 14:20 +0100
SubjectRe: [rfc patch-rt] radix-tree: Partially disable memcg accounting in radix_tree_node_alloc()
Message-ID<sWCB3-2sU-9@gated-at.bofh.it>
In reply to#1552592
Trace of the bad thing about to happen.

       madvise06-4719  [003] .......  1187.428766: handle_mm_fault <-__do_page_fault
       madvise06-4719  [003] .......  1187.428766: __rcu_read_lock <-handle_mm_fault
       madvise06-4719  [003] .......  1187.428766: mem_cgroup_from_task <-handle_mm_fault
       madvise06-4719  [003] .......  1187.428766: __rcu_read_unlock <-handle_mm_fault
       madvise06-4719  [003] .......  1187.428766: __do_fault <-handle_mm_fault
       madvise06-4719  [003] .......  1187.428766: shmem_fault <-__do_fault
       madvise06-4719  [003] .......  1187.428766: shmem_getpage_gfp <-shmem_fault
       madvise06-4719  [003] .......  1187.428766: find_lock_entry <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428766: find_get_entry <-find_lock_entry
       madvise06-4719  [003] .......  1187.428766: __rcu_read_lock <-find_get_entry
       madvise06-4719  [003] .......  1187.428766: __rcu_read_unlock <-find_get_entry
       madvise06-4719  [003] .......  1187.428766: shmem_alloc_page <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428766: mpol_shared_policy_lookup <-shmem_alloc_page
       madvise06-4719  [003] .......  1187.428766: alloc_pages_vma <-shmem_alloc_page
       madvise06-4719  [003] .......  1187.428766: get_vma_policy <-alloc_pages_vma
       madvise06-4719  [003] .......  1187.428766: __get_vma_policy <-get_vma_policy
       madvise06-4719  [003] .......  1187.428766: get_task_policy.part.40 <-alloc_pages_vma
       madvise06-4719  [003] .......  1187.428766: policy_nodemask <-alloc_pages_vma
       madvise06-4719  [003] .......  1187.428767: policy_zonelist <-alloc_pages_vma
       madvise06-4719  [003] .......  1187.428767: __alloc_pages_nodemask <-alloc_pages_vma
       madvise06-4719  [003] .......  1187.428767: get_page_from_freelist <-__alloc_pages_nodemask
       madvise06-4719  [003] .......  1187.428767: migrate_disable <-get_page_from_freelist
       madvise06-4719  [003] ....11.  1187.428767: pin_current_cpu <-migrate_disable
       madvise06-4719  [003] .....11  1187.428767: rt_spin_lock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428767: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428767: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428767: rt_spin_unlock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428767: migrate_enable <-get_page_from_freelist
       madvise06-4719  [003] ....11.  1187.428767: unpin_current_cpu <-migrate_enable
       madvise06-4719  [003] .......  1187.428767: mem_cgroup_try_charge <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428767: get_mem_cgroup_from_mm <-mem_cgroup_try_charge
       madvise06-4719  [003] .......  1187.428767: __rcu_read_lock <-get_mem_cgroup_from_mm
       madvise06-4719  [003] .......  1187.428767: __rcu_read_unlock <-get_mem_cgroup_from_mm
       madvise06-4719  [003] .......  1187.428767: try_charge <-mem_cgroup_try_charge
       madvise06-4719  [003] .......  1187.428767: migrate_disable <-try_charge
       madvise06-4719  [003] ....11.  1187.428768: pin_current_cpu <-migrate_disable
       madvise06-4719  [003] .....11  1187.428768: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....11  1187.428768: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....11  1187.428768: migrate_enable <-try_charge
       madvise06-4719  [003] ....11.  1187.428768: unpin_current_cpu <-migrate_enable
       madvise06-4719  [003] .......  1187.428768: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .......  1187.428768: migrate_disable <-try_charge
       madvise06-4719  [003] ....11.  1187.428768: pin_current_cpu <-migrate_disable
       madvise06-4719  [003] .....11  1187.428768: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....11  1187.428768: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....11  1187.428768: migrate_enable <-try_charge
       madvise06-4719  [003] ....11.  1187.428768: unpin_current_cpu <-migrate_enable
       madvise06-4719  [003] .......  1187.428768: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .......  1187.428768: shmem_add_to_page_cache <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428768: rt_spin_lock <-shmem_add_to_page_cache
       madvise06-4719  [003] .......  1187.428768: migrate_disable <-rt_spin_lock
       madvise06-4719  [003] ....11.  1187.428769: pin_current_cpu <-migrate_disable
       madvise06-4719  [003] .....11  1187.428769: kmem_cache_alloc <-radix_tree_node_alloc.constprop.25
       madvise06-4719  [003] .....11  1187.428769: memcg_kmem_get_cache <-kmem_cache_alloc
       madvise06-4719  [003] .....11  1187.428769: get_mem_cgroup_from_mm <-memcg_kmem_get_cache
       madvise06-4719  [003] .....11  1187.428769: __rcu_read_lock <-get_mem_cgroup_from_mm
       madvise06-4719  [003] .....11  1187.428769: __rcu_read_unlock <-get_mem_cgroup_from_mm
       madvise06-4719  [003] .....11  1187.428769: __rcu_read_lock <-memcg_kmem_get_cache
       madvise06-4719  [003] .....11  1187.428769: __rcu_read_unlock <-memcg_kmem_get_cache
       madvise06-4719  [003] .....11  1187.428769: __slab_alloc.isra.76 <-kmem_cache_alloc
       madvise06-4719  [003] d....11  1187.428769: ___slab_alloc <-__slab_alloc.isra.76
       madvise06-4719  [003] d....11  1187.428769: get_partial_node.isra.65 <-___slab_alloc
       madvise06-4719  [003] d....11  1187.428770: mempolicy_slab_node <-___slab_alloc
       madvise06-4719  [003] d....11  1187.428770: new_slab <-___slab_alloc
       madvise06-4719  [003] .....11  1187.428770: alloc_pages_current <-new_slab
       madvise06-4719  [003] .....11  1187.428770: get_task_policy.part.40 <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428770: policy_nodemask <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428770: policy_zonelist <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428770: __alloc_pages_nodemask <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428770: get_page_from_freelist <-__alloc_pages_nodemask
       madvise06-4719  [003] .....11  1187.428770: __zone_watermark_ok <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428770: migrate_disable <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428770: rt_spin_lock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428770: rt_spin_lock <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428770: migrate_disable <-rt_spin_lock
       madvise06-4719  [003] .....13  1187.428771: __rmqueue <-get_page_from_freelist
       madvise06-4719  [003] .....13  1187.428771: __mod_zone_page_state <-get_page_from_freelist
       madvise06-4719  [003] .....13  1187.428771: rt_spin_unlock <-get_page_from_freelist
       madvise06-4719  [003] .....13  1187.428771: migrate_enable <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428771: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428771: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428771: rt_spin_unlock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428771: migrate_enable <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428771: memcg_kmem_charge_memcg <-new_slab
       madvise06-4719  [003] .....11  1187.428771: try_charge <-memcg_kmem_charge_memcg
       madvise06-4719  [003] .....11  1187.428771: migrate_disable <-try_charge
       madvise06-4719  [003] .....12  1187.428771: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428771: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428772: migrate_enable <-try_charge
       madvise06-4719  [003] .....11  1187.428772: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .....11  1187.428772: migrate_disable <-try_charge
       madvise06-4719  [003] .....12  1187.428772: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428772: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428772: migrate_enable <-try_charge
       madvise06-4719  [003] .....11  1187.428772: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .....11  1187.428772: __free_pages <-new_slab
       madvise06-4719  [003] .....11  1187.428772: __free_pages_ok <-new_slab
       madvise06-4719  [003] .....11  1187.428772: migrate_disable <-__free_pages_ok
       madvise06-4719  [003] .....12  1187.428772: rt_spin_lock__no_mg <-__free_pages_ok
       madvise06-4719  [003] .....12  1187.428772: free_one_page <-__free_pages_ok
       madvise06-4719  [003] .....12  1187.428772: rt_spin_lock <-free_one_page
       madvise06-4719  [003] .....12  1187.428773: migrate_disable <-rt_spin_lock
       madvise06-4719  [003] .....13  1187.428773: node_page_state <-free_one_page
       madvise06-4719  [003] .....13  1187.428773: __mod_zone_page_state <-free_one_page
       madvise06-4719  [003] .....13  1187.428773: rt_spin_unlock <-__free_pages_ok
       madvise06-4719  [003] .....13  1187.428773: migrate_enable <-__free_pages_ok
       madvise06-4719  [003] .....12  1187.428773: rt_spin_unlock__no_mg <-__free_pages_ok
       madvise06-4719  [003] .....12  1187.428773: migrate_enable <-new_slab
       madvise06-4719  [003] .....11  1187.428773: alloc_pages_current <-new_slab
       madvise06-4719  [003] .....11  1187.428773: get_task_policy.part.40 <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428773: policy_nodemask <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428773: policy_zonelist <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428773: __alloc_pages_nodemask <-alloc_pages_current
       madvise06-4719  [003] .....11  1187.428773: get_page_from_freelist <-__alloc_pages_nodemask
       madvise06-4719  [003] .....11  1187.428773: migrate_disable <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428774: rt_spin_lock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428774: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428774: __inc_zone_state <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428774: rt_spin_unlock__no_mg <-get_page_from_freelist
       madvise06-4719  [003] .....12  1187.428774: migrate_enable <-get_page_from_freelist
       madvise06-4719  [003] .....11  1187.428774: memcg_kmem_charge_memcg <-new_slab
       madvise06-4719  [003] .....11  1187.428774: try_charge <-memcg_kmem_charge_memcg
       madvise06-4719  [003] .....11  1187.428774: migrate_disable <-try_charge
       madvise06-4719  [003] .....12  1187.428774: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428774: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428774: migrate_enable <-try_charge
       madvise06-4719  [003] .....11  1187.428774: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .....11  1187.428774: migrate_disable <-try_charge
       madvise06-4719  [003] .....12  1187.428774: rt_spin_lock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428774: rt_spin_unlock__no_mg <-try_charge
       madvise06-4719  [003] .....12  1187.428775: migrate_enable <-try_charge
       madvise06-4719  [003] .....11  1187.428775: page_counter_try_charge <-try_charge
       madvise06-4719  [003] .....11  1187.428775: __free_pages <-new_slab
       madvise06-4719  [003] .....11  1187.428775: free_hot_cold_page <-new_slab
       madvise06-4719  [003] .....11  1187.428775: migrate_disable <-free_hot_cold_page
       madvise06-4719  [003] .....12  1187.428775: rt_spin_lock__no_mg <-free_hot_cold_page
       madvise06-4719  [003] .....12  1187.428775: rt_spin_unlock__no_mg <-free_hot_cold_page
       madvise06-4719  [003] .....12  1187.428775: migrate_enable <-free_hot_cold_page
       madvise06-4719  [003] d....11  1187.428775: slab_out_of_memory <-___slab_alloc
       madvise06-4719  [003] .....11  1187.428775: free_delayed <-__slab_alloc.isra.76
       madvise06-4719  [003] .....11  1187.428775: memcg_kmem_put_cache <-kmem_cache_alloc
       madvise06-4719  [003] .....11  1187.428775: rt_spin_unlock <-shmem_add_to_page_cache
       madvise06-4719  [003] .....11  1187.428776: migrate_enable <-shmem_add_to_page_cache
       madvise06-4719  [003] ....11.  1187.428776: unpin_current_cpu <-migrate_enable
       madvise06-4719  [003] .......  1187.428776: mem_cgroup_cancel_charge <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428776: cancel_charge <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428776: page_counter_uncharge <-cancel_charge
       madvise06-4719  [003] .......  1187.428776: page_counter_cancel <-page_counter_uncharge
       madvise06-4719  [003] .......  1187.428776: page_counter_cancel <-page_counter_uncharge
       madvise06-4719  [003] .......  1187.428776: unlock_page <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428776: __put_page <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428776: __page_cache_release <-__put_page
       madvise06-4719  [003] .......  1187.428777: mem_cgroup_uncharge <-__put_page
       madvise06-4719  [003] .......  1187.428777: free_hot_cold_page <-shmem_getpage_gfp
       madvise06-4719  [003] .......  1187.428777: migrate_disable <-free_hot_cold_page
       madvise06-4719  [003] ....11.  1187.428777: pin_current_cpu <-migrate_disable
       madvise06-4719  [003] .....11  1187.428777: rt_spin_lock__no_mg <-free_hot_cold_page
       madvise06-4719  [003] .....11  1187.428777: rt_spin_unlock__no_mg <-free_hot_cold_page
       madvise06-4719  [003] .....11  1187.428777: migrate_enable <-free_hot_cold_page
       madvise06-4719  [003] ....11.  1187.428777: unpin_current_cpu <-migrate_enable
       madvise06-4719  [003] .......  1187.428777: rt_up_read <-__do_page_fault
       madvise06-4719  [003] .......  1187.428777: rt_mutex_unlock <-__do_page_fault
       madvise06-4719  [003] .......  1187.428778: mm_fault_error <-do_page_fault
       madvise06-4719  [003] .......  1187.428778: pagefault_out_of_memory <-do_page_fault

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web