All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefani Seibold <stefani@seibold.net>
To: "Eric W. Biederman" <ebiederm@xmission.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Alexey Dobriyan <adobriyan@gmail.com>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Peter Zijlstra <a.p.zijlstra@chello.nl>,
	Ingo Molnar <mingo@elte.hu>
Subject: Re: [merged] proctxt-update-kernel-filesystem-proctxt-documentation.patch removed from -mm tree
Date: Wed, 24 Jun 2009 11:33:25 +0200	[thread overview]
Message-ID: <1245836005.32678.36.camel@wall-e> (raw)
In-Reply-To: <m1my7ykrs7.fsf@fess.ebiederm.org>

Am Mittwoch, den 24.06.2009, 00:35 -0700 schrieb Eric W. Biederman:
> Andrew Morton <akpm@linux-foundation.org> writes:
> 
> > On Wed, 24 Jun 2009 08:45:03 +0200 Stefani Seibold <stefani@seibold.net> wrote:
> >
> >> Am Dienstag, den 23.06.2009, 23:32 -0700 schrieb Andrew Morton:
> >> > On Wed, 24 Jun 2009 08:20:44 +0200 Stefani Seibold <stefani@seibold.net> wrote:
> >> > 
> >> > > what is with the associated
> >> > > procfs-provide-stack-information-for-threads-v08.patch
> >> > > patch?
> >> > > 
> >> > > There was no real objections against this patch, so why not merge it for
> >> > > 2.6.31?
> >> > 
> >> > Alexey pointed out that it doesn't actually work.
> >> 
> >> That is not true... it works. With my patch the kernel does exactly know
> >> where the thread stack is and therefor it is easy to determinate the
> >> associated map.
> 
> Usually yes, but not in all cases.

Which cases? The only way i know is to set the stack pointer to an
arbitrary place in user space.... And this is not a common use case.  

> 
> 
> > On Tue, 16 Jun 2009 02:33:33 +0400 Alexey Dobriyan <adobriyan@gmail.com> wrote:
> >
> >> On Mon, Jun 15, 2009 at 03:02:05PM -0700, akpm@linux-foundation.org wrote:
> >> >      procfs-provide-stack-information-for-threads-v08.patch
> >> > --- a/fs/proc/array.c~procfs-provide-stack-information-for-threads-v08
> >> 
> >> > +++ a/fs/proc/array.c
> >> > @@ -321,6 +321,54 @@ static inline void task_context_switch_c
> >> >  			p->nivcsw);
> >> >  }
> >> >  
> >> > +static inline unsigned long get_stack_usage_in_bytes(struct vm_area_struct *vma,
> >> > +					struct task_struct *p)
> >> > +{
> >> > +	unsigned long	i;
> >> > +	struct page	*page;
> >> > +	unsigned long	stkpage;
> >> > +
> >> > +	stkpage = KSTK_ESP(p) & PAGE_MASK;
> >> > +
> >> > +#ifdef CONFIG_STACK_GROWSUP
> >> > +	for (i = vma->vm_end; i-PAGE_SIZE > stkpage; i -= PAGE_SIZE) {
> >> > +
> >> > +		page = follow_page(vma, i-PAGE_SIZE, 0);
> >> 
> >> How can this work?
> >>

I replied a message for a solution to this problem but i get no answer.

>  
> >> If stack page got swapped out, you'll get smaller than actual result.
> >
> > Alexey's point is that follow_page() will return NULL if it hits a
> > swapped-out stack page and the loop will exit, leading to an incorrect
> > (ie: short) return value from get_stack_usage_in_bytes().
> >
> > Is this claim wrong?
> 

No.

I digged in the kernel source and the only solution i found is to use
the walk_page_range() like show_smap() in proc/fs/task_mmu.c.

Maybe there is an easier way, but i dont know.

So i would implement a similar function like smaps_pte_range() in
proc/fs/task_mmu.c to detected the high water usage.

> 
> Add to that the code is unnecessarily complicated.
> 

I don't like statements like that, without a explaination.

> The patch mixes several different changes together.  It deserves being
> broken up into at least two patches.
> 

Everybody tells me a different way to do a patch. Which one is the right
way. Ingo's, Andrew's or your way?  

And it is a question of time if you a hacker girl which is not a full
time linux kernel developer.

> I am concerned about the performance.  Glibc opens /proc/self/maps in
> practically every application so doing something like following page
> tables requires testing and verifying the performance.
> 

I understand your concern, that is the reason why i display the stack
high water usage mark only in /proc/<pid>/status. This is normally a
human interface.

/proc/<pid>/maps or smaps will only show where the thread stack is
resided and the max. of the stack size, which is only a simple
subtraction.

The reason to display the max. size is, because the stack start isn't
equal to the map start address. 

> Eric

Stefani

Write a patch: 16 hours
To get a patch into the kernel: 16 days
Overhead: 800 percent



  reply	other threads:[~2009-06-24  9:33 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-18 22:43 [merged] proctxt-update-kernel-filesystem-proctxt-documentation.patch removed from -mm tree akpm
     [not found] ` <1245824444.22613.3.camel@wall-e>
     [not found]   ` <20090623233247.7ed661b7.akpm@linux-foundation.org>
2009-06-24  6:45     ` Stefani Seibold
2009-06-24  7:13       ` Andrew Morton
2009-06-24  7:35         ` Eric W. Biederman
2009-06-24  9:33           ` Stefani Seibold [this message]
2009-06-24 15:30             ` Andrew Morton
2009-06-24 15:57               ` Stefani Seibold
2009-06-24 12:03           ` [patch 2/2] procfs: provide stack information for threads V0.9 Stefani Seibold
2009-06-24 14:33           ` [patch 2/2] procfs: provide stack information for threads V0.10 Stefani Seibold
2009-06-24 15:20             ` Ingo Molnar
2009-06-24 15:49               ` Stefani Seibold
2009-06-24 17:40                 ` Johannes Weiner
2009-06-24 17:46                   ` Ingo Molnar
2009-06-24 19:08                     ` Johannes Weiner
2009-06-25  9:36                       ` Ingo Molnar
2009-06-25 10:09                       ` [tip:perfcounters/urgent] perf record: Fix filemap pathname parsing in /proc/pid/maps tip-bot for Johannes Weiner
2009-06-24 16:28           ` [patch 2/2] procfs: provide stack information for threads V0.11 Stefani Seibold

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=1245836005.32678.36.camel@wall-e \
    --to=stefani@seibold.net \
    --cc=a.p.zijlstra@chello.nl \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=ebiederm@xmission.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    /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.