From: Mel Gorman <mgorman@suse.de>
To: David Miller <davem@davemloft.net>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
neilb@suse.de, a.p.zijlstra@chello.nl, michaelc@cs.wisc.edu,
emunson@mgebm.net
Subject: Re: [PATCH 08/17] net: Introduce sk_allocation() to allow addition of GFP flags depending on the individual socket
Date: Fri, 11 May 2012 15:12:32 +0100 [thread overview]
Message-ID: <20120511141232.GR11435@suse.de> (raw)
In-Reply-To: <20120511.004949.655300373402132371.davem@davemloft.net>
On Fri, May 11, 2012 at 12:49:49AM -0400, David Miller wrote:
> From: Mel Gorman <mgorman@suse.de>
> Date: Thu, 10 May 2012 14:45:01 +0100
>
> > Introduce sk_allocation(), this function allows to inject sock specific
> > flags to each sock related allocation. It is only used on allocation
> > paths that may be required for writing pages back to network storage.
> >
> > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > Signed-off-by: Mel Gorman <mgorman@suse.de>
>
> This is still a little bit more than it needs to be.
>
> You are trying to propagate a single bit from sk->sk_allocation into
> all of the annotated socket memory allocation sites.
>
> But many of them use sk->sk_allocation already. In fact all of them
> that use a variable rather than a constant GFP_* satisfy this
> invariant.
>
> All of those annotations are therefore spurious, and probably end up
> generating unnecessary |'s in of that special bit in at least some
> cases.
>
Yes, you're completely correct here.
> What you really, therefore, care about are the GFP_FOO cases. And in
> fact those are all GFP_ATOMIC. So make something that says what it
> is that you want, a GFP_ATOMIC with some socket specified bits |'d
> in.
>
> Something like this:
>
> static inline gfp_t sk_gfp_atomic(struct sock *sk)
> {
> return GFP_ATOMIC | (sk->sk_allocation & __GFP_MEMALLOC);
> }
>
I went with this.
> You'll also have to make your networking patches conform to the
> networking subsystem coding style.
>
> For example:
>
> > - skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1, GFP_ATOMIC);
> > + skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1,
> > + sk_allocation(sk, GFP_ATOMIC));
>
> The sk_allocation() argument has to line up with the first column
> after the openning parenthesis of the function call. You can't just
> use all TAB characters. And this all TABs thing looks extremely ugly
> to boot.
>
I was not aware of the networking subsystem coding style. I'll fix it
up.
> > - newnp->pktoptions = skb_clone(treq->pktopts, GFP_ATOMIC);
> > + newnp->pktoptions = skb_clone(treq->pktopts,
> > + sk_allocation(sk, GFP_ATOMIC));
>
> Same here.
>
> What's really funny to me is that in several cases elsewhere in this
> pach you get it right.
Whether I got it right or not would be effectively random. I tried
myself to see what pattern I was using thinking it would be "always"
tab but nope, no pattern :)
--
Mel Gorman
SUSE Labs
--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
WARNING: multiple messages have this Message-ID (diff)
From: Mel Gorman <mgorman@suse.de>
To: David Miller <davem@davemloft.net>
Cc: akpm@linux-foundation.org, linux-mm@kvack.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
neilb@suse.de, a.p.zijlstra@chello.nl, michaelc@cs.wisc.edu,
emunson@mgebm.net
Subject: Re: [PATCH 08/17] net: Introduce sk_allocation() to allow addition of GFP flags depending on the individual socket
Date: Fri, 11 May 2012 15:12:32 +0100 [thread overview]
Message-ID: <20120511141232.GR11435@suse.de> (raw)
In-Reply-To: <20120511.004949.655300373402132371.davem@davemloft.net>
On Fri, May 11, 2012 at 12:49:49AM -0400, David Miller wrote:
> From: Mel Gorman <mgorman@suse.de>
> Date: Thu, 10 May 2012 14:45:01 +0100
>
> > Introduce sk_allocation(), this function allows to inject sock specific
> > flags to each sock related allocation. It is only used on allocation
> > paths that may be required for writing pages back to network storage.
> >
> > Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
> > Signed-off-by: Mel Gorman <mgorman@suse.de>
>
> This is still a little bit more than it needs to be.
>
> You are trying to propagate a single bit from sk->sk_allocation into
> all of the annotated socket memory allocation sites.
>
> But many of them use sk->sk_allocation already. In fact all of them
> that use a variable rather than a constant GFP_* satisfy this
> invariant.
>
> All of those annotations are therefore spurious, and probably end up
> generating unnecessary |'s in of that special bit in at least some
> cases.
>
Yes, you're completely correct here.
> What you really, therefore, care about are the GFP_FOO cases. And in
> fact those are all GFP_ATOMIC. So make something that says what it
> is that you want, a GFP_ATOMIC with some socket specified bits |'d
> in.
>
> Something like this:
>
> static inline gfp_t sk_gfp_atomic(struct sock *sk)
> {
> return GFP_ATOMIC | (sk->sk_allocation & __GFP_MEMALLOC);
> }
>
I went with this.
> You'll also have to make your networking patches conform to the
> networking subsystem coding style.
>
> For example:
>
> > - skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1, GFP_ATOMIC);
> > + skb = sock_wmalloc(sk, MAX_TCP_HEADER + 15 + s_data_desired, 1,
> > + sk_allocation(sk, GFP_ATOMIC));
>
> The sk_allocation() argument has to line up with the first column
> after the openning parenthesis of the function call. You can't just
> use all TAB characters. And this all TABs thing looks extremely ugly
> to boot.
>
I was not aware of the networking subsystem coding style. I'll fix it
up.
> > - newnp->pktoptions = skb_clone(treq->pktopts, GFP_ATOMIC);
> > + newnp->pktoptions = skb_clone(treq->pktopts,
> > + sk_allocation(sk, GFP_ATOMIC));
>
> Same here.
>
> What's really funny to me is that in several cases elsewhere in this
> pach you get it right.
Whether I got it right or not would be effectively random. I tried
myself to see what pattern I was using thinking it would be "always"
tab but nope, no pattern :)
--
Mel Gorman
SUSE Labs
next prev parent reply other threads:[~2012-05-11 14:12 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-10 13:44 [PATCH 00/17] Swap-over-NBD without deadlocking V10 Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 01/17] mm: Serialize access to min_free_kbytes Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 02/17] mm: sl[au]b: Add knowledge of PFMEMALLOC reserve pages Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 03/17] mm: slub: Optimise the SLUB fast path to avoid pfmemalloc checks Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 04/17] mm: Introduce __GFP_MEMALLOC to allow access to emergency reserves Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 05/17] mm: allow PF_MEMALLOC from softirq context Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-11 4:39 ` David Miller
2012-05-11 4:39 ` David Miller
2012-05-14 10:02 ` Mel Gorman
2012-05-14 10:02 ` Mel Gorman
2012-05-15 13:07 ` Mel Gorman
2012-05-15 13:07 ` Mel Gorman
2012-05-10 13:44 ` [PATCH 06/17] mm: Only set page->pfmemalloc when ALLOC_NO_WATERMARKS was used Mel Gorman
2012-05-10 13:44 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 07/17] mm: Ignore mempolicies when using ALLOC_NO_WATERMARK Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 08/17] net: Introduce sk_allocation() to allow addition of GFP flags depending on the individual socket Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-11 4:49 ` David Miller
2012-05-11 4:49 ` David Miller
2012-05-11 14:12 ` Mel Gorman [this message]
2012-05-11 14:12 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 09/17] netvm: Allow the use of __GFP_MEMALLOC by specific sockets Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-11 4:50 ` David Miller
2012-05-11 4:50 ` David Miller
2012-05-10 13:45 ` [PATCH 10/17] netvm: Allow skb allocation to use PFMEMALLOC reserves Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-11 4:57 ` David Miller
2012-05-11 4:57 ` David Miller
2012-05-11 14:32 ` Mel Gorman
2012-05-11 14:32 ` Mel Gorman
2012-05-11 14:42 ` Peter Zijlstra
2012-05-11 14:42 ` Peter Zijlstra
2012-05-11 15:07 ` Mel Gorman
2012-05-11 15:07 ` Mel Gorman
2012-05-11 21:17 ` David Miller
2012-05-11 21:17 ` David Miller
2012-05-10 13:45 ` [PATCH 11/17] netvm: Propagate page->pfmemalloc to skb Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 12/17] netvm: Propagate page->pfmemalloc from netdev_alloc_page " Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-11 5:01 ` David Miller
2012-05-11 5:01 ` David Miller
2012-05-11 14:46 ` Mel Gorman
2012-05-11 14:46 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 13/17] netvm: Set PF_MEMALLOC as appropriate during SKB processing Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-11 5:03 ` David Miller
2012-05-11 5:03 ` David Miller
2012-05-10 13:45 ` [PATCH 14/17] mm: Micro-optimise slab to avoid a function call Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 15/17] nbd: Set SOCK_MEMALLOC for access to PFMEMALLOC reserves Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 16/17] mm: Throttle direct reclaimers if PF_MEMALLOC reserves are low and swap is backed by network storage Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 13:45 ` [PATCH 17/17] mm: Account for the number of times direct reclaimers get throttled Mel Gorman
2012-05-10 13:45 ` Mel Gorman
2012-05-10 17:17 ` [PATCH 00/17] Swap-over-NBD without deadlocking V10 Mike Christie
2012-05-10 17:17 ` Mike Christie
2012-05-11 5:04 ` David Miller
2012-05-11 5:04 ` David Miller
2012-05-11 15:45 ` Mel Gorman
2012-05-11 15:45 ` Mel Gorman
2012-05-11 21:23 ` David Miller
2012-05-11 21:23 ` David Miller
2012-05-11 21:29 ` Andrew Morton
2012-05-11 21:29 ` Andrew Morton
2012-05-14 11:10 ` Mel Gorman
2012-05-14 11:10 ` 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=20120511141232.GR11435@suse.de \
--to=mgorman@suse.de \
--cc=a.p.zijlstra@chello.nl \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=emunson@mgebm.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=michaelc@cs.wisc.edu \
--cc=neilb@suse.de \
--cc=netdev@vger.kernel.org \
/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.