public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@google.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Toshiyuki Okajima <toshi.okajima@jp.fujitsu.com>,
	Dave Chinner <david@fromorbit.com>,
	Hugh Dickins <hughd@google.com>
Subject: Re: [BUG] infinite loop in find_get_pages()
Date: Tue, 13 Sep 2011 16:53:44 -0700	[thread overview]
Message-ID: <20110913165344.1d800582.akpm@google.com> (raw)
In-Reply-To: <1315941801.2565.19.camel@edumazet-laptop>

On Tue, 13 Sep 2011 21:23:21 +0200
Eric Dumazet <eric.dumazet@gmail.com> wrote:

> Linus,
> 
> It seems current kernels (3.1.0-rc6) are really unreliable, or maybe I
> expect too much from them.
> 
> On my 4GB x86_64 machine (2 quad-core cpus, 2 threads per core), I can
> have a cpu locked in
> 
>  find_get_pages -> radix_tree_gang_lookup_slot -> __lookup 
> 
> 
> Problem is : A bisection will be very hard, since a lot of kernels
> simply destroy my disk (the PCI MRRS horror stuff).

Yes, that's hard.  Quite often my bisection efforts involve moving to a
new bisection point then hand-applying a few patches to make the the
thing compile and/or work.

There have only been three commits to radix-tree.c this year, so a bit
of manual searching through those would be practical?

> Messages at console :
>  
> INFO: rcu_preempt_state detected stalls on CPUs/tasks: {} (detected by
> 11 t=60002 jiffies)
> 
> perf top -C 1
> 
> Events: 3K cycles                                                                                                                                             
> +     43,08%  bash  [kernel.kallsyms]  [k] __lookup
> +     41,51%  bash  [kernel.kallsyms]  [k] find_get_pages
> +     15,31%  bash  [kernel.kallsyms]  [k] radix_tree_gang_lookup_slot
> 
>     43.08%     bash  [kernel.kallsyms]  [k] __lookup
>                |
>                --- __lookup
>                   |          
>                   |--97.09%-- radix_tree_gang_lookup_slot
>                   |          find_get_pages
>                   |          pagevec_lookup
>                   |          invalidate_mapping_pages
>                   |          drop_pagecache_sb
>                   |          iterate_supers
>                   |          drop_caches_sysctl_handler
>                   |          proc_sys_call_handler.isra.3
>                   |          proc_sys_write
>                   |          vfs_write
>                   |          sys_write
>                   |          system_call_fastpath
>                   |          __write
>                   |          
> 
> 
> Steps to reproduce :
> 
> In one terminal, kernel builds in a loop (defconfig + hpsa driver)
> 
> cd /usr/src/linux
> while :
> do
>  make clean
>  make -j128
> done
> 
> 
> In another term :
> 
> while :
> do
>  echo 3 >/proc/sys/vm/drop_caches
>  sleep 20
> done
> 

This is a regression?  3.0 is OK?

Also, do you know that the hang is happening at the radix-tree level? 
It might be at the filemap.c level or at the superblock level and we
just end up spending most cycles at the lower levels because they're
called so often?  The iterate_supers/drop_pagecache_sb code is fairly
recent.



  reply	other threads:[~2011-09-13 23:54 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-13 19:23 [BUG] infinite loop in find_get_pages() Eric Dumazet
2011-09-13 23:53 ` Andrew Morton [this message]
2011-09-14  0:21   ` Eric Dumazet
2011-09-14  0:34   ` Lin Ming
2011-09-15 10:47     ` Pawel Sikora
2011-09-15 11:11       ` Justin Piszcz
2011-09-15 12:04         ` Eric Dumazet
2011-09-15 15:00           ` Paweł Sikora
2011-09-15 15:15             ` Eric Dumazet
     [not found] ` <CA+55aFyG3-3_gqGjqUmsTAHWfmNLMdQVf4XqUZrDAGMBxgur=Q@mail.gmail.com>
2011-09-14  6:48   ` Linus Torvalds
2011-09-14  6:53     ` Eric Dumazet
2011-09-14  7:32       ` Shaohua Li
2011-09-14  8:20         ` Shaohua Li
2011-09-14  8:43           ` Eric Dumazet
2011-09-14  8:55             ` Shaohua Li
2011-09-14 20:38               ` Hugh Dickins
2011-09-14 20:55                 ` Eric Dumazet
2011-09-14 21:53                   ` Hugh Dickins
2011-09-14 22:08                     ` Eric Dumazet
2011-09-14 22:37                     ` Linus Torvalds
2011-09-15  0:45                       ` Shaohua Li
2011-09-15  2:00                         ` Hugh Dickins
2011-09-15  4:02                         ` Eric Dumazet
     [not found] ` <CA+55aFx41_Z4TjjJwPuE21Q8oD3aGWtQwh45DUiCjPVD-wCJXw@mail.gmail.com>
2011-09-14  6:48   ` Linus Torvalds

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=20110913165344.1d800582.akpm@google.com \
    --to=akpm@google.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@fromorbit.com \
    --cc=eric.dumazet@gmail.com \
    --cc=hughd@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=toshi.okajima@jp.fujitsu.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox