public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Nathan Zimmer <nzimmer@sgi.com>
Cc: mingo@redhat.com, peterz@infradead.org, tglx@linutronix.de,
	johnstul@us.ibm.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH RESEND 1/4] sched: /proc/sched_stat fails on very very large machines.
Date: Wed, 16 Jan 2013 13:53:52 -0800	[thread overview]
Message-ID: <20130116135352.890bd6bd.akpm@linux-foundation.org> (raw)
In-Reply-To: <1358286372-13777-2-git-send-email-nzimmer@sgi.com>

On Tue, 15 Jan 2013 15:46:09 -0600
Nathan Zimmer <nzimmer@sgi.com> wrote:

> On systems with 4096 cores doing a cat /proc/sched_stat fails.
> We are trying to push all the data into a single kmalloc buffer.
> The issue is on these very large machines all the data will not fit in 4mb.
> 
> A better solution is to not us the single_open mechanism but to provide
> our own seq_operations.
> 
> The output should be identical to previous version and thus not need the
> version number.
> 
> ...
>
> index 903ffa9..33a85c9 100644
> --- a/kernel/sched/stats.c
> +++ b/kernel/sched/stats.c
> @@ -21,9 +21,13 @@ static int show_schedstat(struct seq_file *seq, void *v)
>  	if (mask_str == NULL)
>  		return -ENOMEM;
>  
> -	seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION);
> -	seq_printf(seq, "timestamp %lu\n", jiffies);
> -	for_each_online_cpu(cpu) {
> +	if (v == (void *)1) {

The magic-numbers-in-pointers at least need comments, please.  Or nice
and meaningful #defines.

> +		seq_printf(seq, "version %d\n", SCHEDSTAT_VERSION);
> +		seq_printf(seq, "timestamp %lu\n", jiffies);

The code leaks the memory at mask_str here.

> +	} else {
> +
> +		cpu = (unsigned long)(v - 2);
> +
>  		struct rq *rq = cpu_rq(cpu);
>  #ifdef CONFIG_SMP
>  		struct sched_domain *sd;
> @@ -72,35 +76,64 @@ static int show_schedstat(struct seq_file *seq, void *v)
>  		}
>  		rcu_read_unlock();
>  #endif
> +		kfree(mask_str);
>  	}
> -	kfree(mask_str);
>  	return 0;
>  }

Undoing this change will fix the leak.

The schedstats code (both the original and after the patch) appears to
be racy against cpu hotplug?  What prevents the rq from vanishing while
we're playing with it?



  reply	other threads:[~2013-01-16 21:53 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-15 21:46 [PATCH RESEND 0/4] /proc/schedstat and /proc/sched_debug fail at 4096 Nathan Zimmer
2013-01-15 21:46 ` [PATCH RESEND 1/4] sched: /proc/sched_stat fails on very very large machines Nathan Zimmer
2013-01-16 21:53   ` Andrew Morton [this message]
2013-01-17 22:36     ` Nathan Zimmer
2013-01-15 21:46 ` [PATCH RESEND 2/4] sched: /proc/sched_debug " Nathan Zimmer
2013-01-16 21:56   ` Andrew Morton
2013-01-15 21:46 ` [PATCH RESEND 3/4] timer_list: split timer_list_show_tickdevices Nathan Zimmer
2013-01-16 22:09   ` Andrew Morton
2013-01-15 21:46 ` [PATCH RESEND 4/4] timer_list: Convert timer list to be a proper seq_file Nathan Zimmer

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=20130116135352.890bd6bd.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=johnstul@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=nzimmer@sgi.com \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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