Message ID | 20160202211314.16315.70164.stgit@firesoul |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Hi Jesper,
[auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/Jesper-Dangaard-Brouer/net-mitigating-kmem_cache-slowpath-and-BoF-discussion-patches/20160203-051706
reproduce: make htmldocs
All warnings (new ones prefixed by >>):
include/linux/skbuff.h:922: warning: No description found for parameter 'sk'
>> net/core/skbuff.c:482: warning: No description found for parameter 'bulk_hint'
net/core/gen_stats.c:155: warning: No description found for parameter 'cpu'
net/core/gen_estimator.c:212: warning: No description found for parameter 'cpu_bstats'
net/core/gen_estimator.c:303: warning: No description found for parameter 'cpu_bstats'
net/core/dev.c:6450: warning: No description found for parameter 'len'
include/linux/netdevice.h:1321: warning: Enum value 'IFF_XMIT_DST_RELEASE_PERM' not described in enum 'netdev_priv_flags'
include/linux/netdevice.h:1321: warning: Enum value 'IFF_IPVLAN_MASTER' not described in enum 'netdev_priv_flags'
include/linux/netdevice.h:1321: warning: Enum value 'IFF_IPVLAN_SLAVE' not described in enum 'netdev_priv_flags'
include/linux/netdevice.h:1826: warning: No description found for parameter 'ptype_all'
include/linux/netdevice.h:1826: warning: No description found for parameter 'ptype_specific'
vim +/bulk_hint +482 net/core/skbuff.c
^1da177e Linus Torvalds 2005-04-16 466
fd11a83d Alexander Duyck 2014-12-09 467 /**
fd11a83d Alexander Duyck 2014-12-09 468 * __napi_alloc_skb - allocate skbuff for rx in a specific NAPI instance
fd11a83d Alexander Duyck 2014-12-09 469 * @napi: napi instance this buffer was allocated for
d7499160 Masanari Iida 2015-08-24 470 * @len: length to allocate
fd11a83d Alexander Duyck 2014-12-09 471 * @gfp_mask: get_free_pages mask, passed to alloc_skb and alloc_pages
fd11a83d Alexander Duyck 2014-12-09 472 *
fd11a83d Alexander Duyck 2014-12-09 473 * Allocate a new sk_buff for use in NAPI receive. This buffer will
fd11a83d Alexander Duyck 2014-12-09 474 * attempt to allocate the head from a special reserved region used
fd11a83d Alexander Duyck 2014-12-09 475 * only for NAPI Rx allocation. By doing this we can save several
fd11a83d Alexander Duyck 2014-12-09 476 * CPU cycles by avoiding having to disable and re-enable IRQs.
fd11a83d Alexander Duyck 2014-12-09 477 *
fd11a83d Alexander Duyck 2014-12-09 478 * %NULL is returned if there is no free memory.
fd11a83d Alexander Duyck 2014-12-09 479 */
9451980a Alexander Duyck 2015-05-06 480 struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len,
c24f01ac Jesper Dangaard Brouer 2016-02-02 481 unsigned int bulk_hint, gfp_t gfp_mask)
fd11a83d Alexander Duyck 2014-12-09 @482 {
1ec46e92 Jesper Dangaard Brouer 2016-02-02 483 struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache);
c24f01ac Jesper Dangaard Brouer 2016-02-02 484 unsigned int bulk_sz = min(bulk_hint, NAPI_SKB_CACHE_SIZE);
fc755a89 Jesper Dangaard Brouer 2016-02-02 485 struct skb_shared_info *shinfo;
fd11a83d Alexander Duyck 2014-12-09 486 struct sk_buff *skb;
9451980a Alexander Duyck 2015-05-06 487 void *data;
fd11a83d Alexander Duyck 2014-12-09 488
9451980a Alexander Duyck 2015-05-06 489 len += NET_SKB_PAD + NET_IP_ALIGN;
9451980a Alexander Duyck 2015-05-06 490
:::::: The code at line 482 was first introduced by commit
:::::: fd11a83dd3630ec6a60f8a702446532c5c7e1991 net: Pull out core bits of __netdev_alloc_skb and add __napi_alloc_skb
:::::: TO: Alexander Duyck <alexander.h.duyck@redhat.com>
:::::: CC: David S. Miller <davem@davemloft.net>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index b06ba2e07c89..4d0c0eacbc34 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -2391,14 +2391,25 @@ static inline void skb_free_frag(void *addr) __free_page_frag(addr); } +#define NAPI_SKB_CACHE_SIZE 64U /* Used in struct napi_alloc_cache */ +#define NAPI_SKB_BULK_ALLOC 8U /* Default slab bulk alloc in NAPI */ + void *napi_alloc_frag(unsigned int fragsz); -struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, - unsigned int length, gfp_t gfp_mask); +struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len, + unsigned int bulk_hint, gfp_t gfp_mask); static inline struct sk_buff *napi_alloc_skb(struct napi_struct *napi, - unsigned int length) + unsigned int len) +{ + return __napi_alloc_skb(napi, len, NAPI_SKB_BULK_ALLOC, GFP_ATOMIC); +} +static inline struct sk_buff *napi_alloc_skb_hint(struct napi_struct *napi, + unsigned int len, + unsigned int bulk_hint) { - return __napi_alloc_skb(napi, length, GFP_ATOMIC); + bulk_hint = bulk_hint ? : 1; + return __napi_alloc_skb(napi, len, bulk_hint, GFP_ATOMIC); } + void napi_consume_skb(struct sk_buff *skb, int budget); void __kfree_skb_flush(void); diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ae8cdbec90ee..f77209fb5361 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -347,8 +347,6 @@ struct sk_buff *build_skb(void *data, unsigned int frag_size) } EXPORT_SYMBOL(build_skb); -#define NAPI_SKB_CACHE_SIZE 64 - struct napi_alloc_cache { struct page_frag_cache page; size_t skb_count; @@ -480,9 +478,10 @@ EXPORT_SYMBOL(__netdev_alloc_skb); * %NULL is returned if there is no free memory. */ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len, - gfp_t gfp_mask) + unsigned int bulk_hint, gfp_t gfp_mask) { struct napi_alloc_cache *nc = this_cpu_ptr(&napi_alloc_cache); + unsigned int bulk_sz = min(bulk_hint, NAPI_SKB_CACHE_SIZE); struct skb_shared_info *shinfo; struct sk_buff *skb; void *data; @@ -507,10 +506,9 @@ struct sk_buff *__napi_alloc_skb(struct napi_struct *napi, unsigned int len, if (unlikely(!data)) return NULL; -#define BULK_ALLOC_SIZE 8 if (!nc->skb_count) { nc->skb_count = kmem_cache_alloc_bulk(skbuff_head_cache, - gfp_mask, BULK_ALLOC_SIZE, + gfp_mask, bulk_sz, nc->skb_cache); } if (likely(nc->skb_count)) {
The default bulk alloc size arbitrarily choosen (to be 8) might not suit all use-cases, this introduce a function napi_alloc_skb_hint() that allow the caller to specify a bulk size hint they are expecting. It is a hint because __napi_alloc_skb() limits the bulk size to the array size. One user is the mlx5 driver, which bulk re-populate it's RX ring with both SKBs and pages. Thus, it would like to work with bigger bulk alloc chunks. Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com> --- include/linux/skbuff.h | 19 +++++++++++++++---- net/core/skbuff.c | 8 +++----- 2 files changed, 18 insertions(+), 9 deletions(-)