All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Mel Gorman <mel@csn.ul.ie>
Cc: riel@redhat.com, penberg@cs.helsinki.fi,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] Add a gfp-translate script to help understand page allocation failure reports
Date: Mon, 8 Jun 2009 16:38:27 -0700	[thread overview]
Message-ID: <20090608163827.47b4738b.akpm@linux-foundation.org> (raw)
In-Reply-To: <20090608132950.GB15070@csn.ul.ie>

On Mon, 8 Jun 2009 14:29:50 +0100
Mel Gorman <mel@csn.ul.ie> wrote:

> The page allocation failure messages include a line that looks like
> 
> page allocation failure. order:1, mode:0x4020
> 
> The mode is easy to translate but irritating for the lazy and a bit error
> prone. This patch adds a very simple helper script gfp-translate for the mode:
> portion of the page allocation failure messages. An example usage looks like
> 
>   mel@machina:~/linux-2.6 $ scripts/gfp-translate 0x4020
>   Source: /home/mel/linux-2.6
>   Parsing: 0x4020
>   #define __GFP_HIGH	(0x20)	/* Should access emergency pools? */
>   #define __GFP_COMP	(0x4000) /* Add compound page metadata */
> 
> The script is not a work of art but it has come in handy for me a few times
> so I thought I would share.
> 

hm, OK.  Most of the gfp masks I have to decode are in emails and
bugzilla reports.  I guess I'm different.  Plus I wouldn't trust a tool
run on my machine's kernel tree to correctly interpret a gfp mask from
someone else's kernel of different vintage.

But I can see that it would be useful for someone who's debugging a
locally built kernel.

> diff --git a/scripts/gfp-translate b/scripts/gfp-translate
> new file mode 100755

I don't know how to get patches into Linus's tree with the X bit still
set :(  To avoid solving that problem, maybe Pekka can merge this?

> +# Guess the kernel source directory if it's not set. Preference is in order of
> +# o current directory
> +# o /usr/src/linux
> +if [ "$SOURCE" = "" ]; then
> +	if [ -r "/usr/src/linux/Makefile" ]; then
> +		SOURCE=/usr/src/linux
> +	fi
> +	if [ -r "`pwd`/Makefile" ]; then
> +		SOURCE=`pwd`
> +	fi
> +fi

OK.

> +# Confirm that a source directory exists
> +if [ ! -r "$SOURCE/Makefile" ]; then
> +	die "Could not locate source directory or it is invalid"
> +fi

"kernel source directory".

> +# Confirm that a GFP mask has been specified
> +if [ "$GFPMASK" = "none" ]; then
> +	usage
> +fi
> +
> +# Extract GFP flags from the kernel source
> +TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1
> +grep "^#define __GFP" $SOURCE/include/linux/gfp.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE
> +
> +# Parse the flags
> +IFS="
> +"
> +echo Source: $SOURCE
> +echo Parsing: $GFPMASK
> +for LINE in `cat $TMPFILE`; do
> +	MASK=`echo $LINE | awk '{print $3}'`
> +	if [ $(($GFPMASK&$MASK)) -ne 0 ]; then
> +		echo $LINE
> +	fi
> +done
> +
> +rm -f $TMPFILE
> +exit 0

WARNING: multiple messages have this Message-ID (diff)
From: Andrew Morton <akpm@linux-foundation.org>
To: Mel Gorman <mel@csn.ul.ie>
Cc: riel@redhat.com, penberg@cs.helsinki.fi,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] Add a gfp-translate script to help understand page allocation failure reports
Date: Mon, 8 Jun 2009 16:38:27 -0700	[thread overview]
Message-ID: <20090608163827.47b4738b.akpm@linux-foundation.org> (raw)
In-Reply-To: <20090608132950.GB15070@csn.ul.ie>

On Mon, 8 Jun 2009 14:29:50 +0100
Mel Gorman <mel@csn.ul.ie> wrote:

> The page allocation failure messages include a line that looks like
> 
> page allocation failure. order:1, mode:0x4020
> 
> The mode is easy to translate but irritating for the lazy and a bit error
> prone. This patch adds a very simple helper script gfp-translate for the mode:
> portion of the page allocation failure messages. An example usage looks like
> 
>   mel@machina:~/linux-2.6 $ scripts/gfp-translate 0x4020
>   Source: /home/mel/linux-2.6
>   Parsing: 0x4020
>   #define __GFP_HIGH	(0x20)	/* Should access emergency pools? */
>   #define __GFP_COMP	(0x4000) /* Add compound page metadata */
> 
> The script is not a work of art but it has come in handy for me a few times
> so I thought I would share.
> 

hm, OK.  Most of the gfp masks I have to decode are in emails and
bugzilla reports.  I guess I'm different.  Plus I wouldn't trust a tool
run on my machine's kernel tree to correctly interpret a gfp mask from
someone else's kernel of different vintage.

But I can see that it would be useful for someone who's debugging a
locally built kernel.

> diff --git a/scripts/gfp-translate b/scripts/gfp-translate
> new file mode 100755

I don't know how to get patches into Linus's tree with the X bit still
set :(  To avoid solving that problem, maybe Pekka can merge this?

> +# Guess the kernel source directory if it's not set. Preference is in order of
> +# o current directory
> +# o /usr/src/linux
> +if [ "$SOURCE" = "" ]; then
> +	if [ -r "/usr/src/linux/Makefile" ]; then
> +		SOURCE=/usr/src/linux
> +	fi
> +	if [ -r "`pwd`/Makefile" ]; then
> +		SOURCE=`pwd`
> +	fi
> +fi

OK.

> +# Confirm that a source directory exists
> +if [ ! -r "$SOURCE/Makefile" ]; then
> +	die "Could not locate source directory or it is invalid"
> +fi

"kernel source directory".

> +# Confirm that a GFP mask has been specified
> +if [ "$GFPMASK" = "none" ]; then
> +	usage
> +fi
> +
> +# Extract GFP flags from the kernel source
> +TMPFILE=`mktemp -t gfptranslate-XXXXXX` || exit 1
> +grep "^#define __GFP" $SOURCE/include/linux/gfp.h | sed -e 's/(__force gfp_t)//' | sed -e 's/u)/)/' | grep -v GFP_BITS | sed -e 's/)\//) \//' > $TMPFILE
> +
> +# Parse the flags
> +IFS="
> +"
> +echo Source: $SOURCE
> +echo Parsing: $GFPMASK
> +for LINE in `cat $TMPFILE`; do
> +	MASK=`echo $LINE | awk '{print $3}'`
> +	if [ $(($GFPMASK&$MASK)) -ne 0 ]; then
> +		echo $LINE
> +	fi
> +done
> +
> +rm -f $TMPFILE
> +exit 0

--
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/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2009-06-08 23:39 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-08 13:29 [PATCH] Add a gfp-translate script to help understand page allocation failure reports Mel Gorman
2009-06-08 13:29 ` Mel Gorman
2009-06-08 13:45 ` Rik van Riel
2009-06-08 13:45   ` Rik van Riel
2009-06-08 13:53   ` Pekka Enberg
2009-06-08 13:53     ` Pekka Enberg
2009-06-08 13:59 ` Christoph Hellwig
2009-06-08 13:59   ` Christoph Hellwig
2009-06-08 22:29   ` Mel Gorman
2009-06-08 22:29     ` Mel Gorman
2009-06-08 23:57     ` Minchan Kim
2009-06-08 23:57       ` Minchan Kim
2009-06-08 14:25 ` Minchan Kim
2009-06-08 14:25   ` Minchan Kim
2009-06-08 22:31   ` Mel Gorman
2009-06-08 22:31     ` Mel Gorman
2009-06-08 23:38 ` Andrew Morton [this message]
2009-06-08 23:38   ` Andrew Morton
2009-06-09  8:05   ` Mel Gorman
2009-06-09  8:05     ` Mel Gorman

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=20090608163827.47b4738b.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=penberg@cs.helsinki.fi \
    --cc=riel@redhat.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 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.