From: Raghavendra K T <raghavendra.kt@linux.vnet.ibm.com>
To: <davem@davemloft.net>, <kuznet@ms2.inr.ac.ru>,
<jmorris@namei.org>, <yoshfuji@linux-ipv6.org>, <kaber@trash.net>
Cc: <jiri@resnulli.us>, <edumazet@google.com>,
<hannes@stressinduktion.org>, <tom@herbertland.com>,
<azhou@nicira.com>, <ebiederm@xmission.com>,
<ipm@chirality.org.uk>, <nicolas.dichtel@6wind.com>,
<serge.hallyn@canonical.com>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<raghavendra.kt@linux.vnet.ibm.com>, <anton@au1.ibm.com>,
<nacc@linux.vnet.ibm.com>, <srikar@linux.vnet.ibm.com>
Subject: [PATCH RFC V2 0/2] Optimize the snmp stat aggregation for large cpus
Date: Wed, 26 Aug 2015 23:07:31 +0530 [thread overview]
Message-ID: <1440610653-14210-1-git-send-email-raghavendra.kt@linux.vnet.ibm.com> (raw)
In-Reply-To: <y>
While creating 1000 containers, perf is showing lot of time spent in
snmp_fold_field on a large cpu system.
The current patch tries to improve by reordering the statistics gathering.
Please note that similar overhead was also reported while creating
veth pairs https://lkml.org/lkml/2013/3/19/556
Changes in V2:
- Allocate the stat calculation buffer in stack. (Eric)
Setup:
160 cpu (20 core) baremetal powerpc system with 1TB memory
1000 docker containers was created with command
docker run -itd ubuntu:15.04 /bin/bash in loop
observation:
Docker container creation linearly increased from around 1.6 sec to 7.5 sec
(at 1000 containers) perf data showed, creating veth interfaces resulting in
the below code path was taking more time.
rtnl_fill_ifinfo
-> inet6_fill_link_af
-> inet6_fill_ifla6_attrs
-> snmp_fold_field
proposed idea:
currently __snmp6_fill_stats64 calls snmp_fold_field that walks
through per cpu data to of an item (iteratively for around 90 items).
The patch tries to aggregate the statistics by going through
all the items of each cpu sequentially which is reducing cache
misses.
Performance of docker creation improved by around more than 2x
after the patch.
before the patch:
================
time docker run -itd ubuntu:15.04 /bin/bash
3f45ba571a42e925c4ec4aaee0e48d7610a9ed82a4c931f83324d41822cf6617
real 0m6.836s
user 0m0.095s
sys 0m0.011s
perf record -a docker run -itd ubuntu:15.04 /bin/bash
=======================================================
# Samples: 32K of event 'cycles'
# Event count (approx.): 24688700190
# Overhead Command Shared Object Symbol
# ........ ............... ...................... ........................
50.73% docker [kernel.kallsyms] [k] snmp_fold_field
9.07% swapper [kernel.kallsyms] [k] snooze_loop
3.49% docker [kernel.kallsyms] [k] veth_stats_one
2.85% swapper [kernel.kallsyms] [k] _raw_spin_lock
1.37% docker docker [.] backtrace_qsort
1.31% docker docker [.] strings.FieldsFunc
cache-misses: 2.7%
after the patch:
=============
time docker run -itd ubuntu:15.04 /bin/bash
4e0619421332990bdea413fe455ab187607ed63d33d5c37aa5291bc2f5b35857
real 0m3.357s
user 0m0.092s
sys 0m0.010s
perf record -a docker run -itd ubuntu:15.04 /bin/bash
=======================================================
# Samples: 15K of event 'cycles'
# Event count (approx.): 11471830714
# Overhead Command Shared Object Symbol
# ........ ............... .................... .........................
10.56% swapper [kernel.kallsyms] [k] snooze_loop
8.72% docker [kernel.kallsyms] [k] snmp_get_cpu_field
7.59% docker [kernel.kallsyms] [k] veth_stats_one
3.65% swapper [kernel.kallsyms] [k] _raw_spin_lock
3.06% docker docker [.] strings.FieldsFunc
2.96% docker docker [.] backtrace_qsort
cache-misses: 1.38 %
Please let me know if you have suggestions/comments.
Thanks Eric and David for comments on V1.
Raghavendra K T (2):
net: Introduce helper functions to get the per cpu data
net: Optimize snmp stat aggregation by walking all the percpu data at
once
include/net/ip.h | 10 ++++++++++
net/ipv4/af_inet.c | 41 +++++++++++++++++++++++++++--------------
net/ipv6/addrconf.c | 18 +++++++++++++-----
3 files changed, 50 insertions(+), 19 deletions(-)
--
1.7.11.7
next reply other threads:[~2015-08-26 17:40 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-26 17:37 Raghavendra K T [this message]
2015-08-26 17:37 ` [PATCH RFC V2 1/2] net: Introduce helper functions to get the per cpu data Raghavendra K T
2015-08-26 17:37 ` [PATCH RFC V2 2/2] net: Optimize snmp stat aggregation by walking all the percpu data at once Raghavendra K T
2015-08-27 18:38 ` David Miller
2015-08-28 6:39 ` Raghavendra K T
2015-08-28 18:24 ` David Miller
2015-08-28 19:20 ` Joe Perches
2015-08-28 20:33 ` Eric Dumazet
2015-08-28 20:53 ` Joe Perches
2015-08-28 20:55 ` Eric Dumazet
2015-08-28 21:09 ` Joe Perches
2015-08-28 21:14 ` Eric Dumazet
2015-08-28 21:26 ` Joe Perches
2015-08-28 22:29 ` Eric Dumazet
2015-08-28 23:12 ` Joe Perches
2015-08-29 0:06 ` Eric Dumazet
2015-08-29 0:35 ` Joe Perches
2015-08-29 0:59 ` Eric Dumazet
2015-08-29 2:57 ` Raghavendra K T
2015-08-29 3:26 ` Eric Dumazet
2015-08-29 7:52 ` Raghavendra K T
2015-08-29 5:11 ` David Miller
2015-08-29 7:53 ` Raghavendra K T
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=1440610653-14210-1-git-send-email-raghavendra.kt@linux.vnet.ibm.com \
--to=raghavendra.kt@linux.vnet.ibm.com \
--cc=anton@au1.ibm.com \
--cc=azhou@nicira.com \
--cc=davem@davemloft.net \
--cc=ebiederm@xmission.com \
--cc=edumazet@google.com \
--cc=hannes@stressinduktion.org \
--cc=ipm@chirality.org.uk \
--cc=jiri@resnulli.us \
--cc=jmorris@namei.org \
--cc=kaber@trash.net \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=nacc@linux.vnet.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=nicolas.dichtel@6wind.com \
--cc=serge.hallyn@canonical.com \
--cc=srikar@linux.vnet.ibm.com \
--cc=tom@herbertland.com \
--cc=yoshfuji@linux-ipv6.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).