From: "Wodkowski, PawelX" <pawelx.wodkowski@intel.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 0/2] new headroom stats library and example application
Date: Fri, 30 Jan 2015 10:47:21 +0000 [thread overview]
Message-ID: <F6F2A6264E145F47A18AB6DF8E87425D12B8FD9E@IRSMSX102.ger.corp.intel.com> (raw)
In-Reply-To: <20150129191326.GF1999@hmsreliant.think-freely.org>
> -----Original Message-----
> From: Neil Horman [mailto:nhorman@tuxdriver.com]
> Sent: Thursday, January 29, 2015 8:13 PM
> To: Wodkowski, PawelX
> Cc: dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH 0/2] new headroom stats library and example
> application
>
> On Thu, Jan 29, 2015 at 05:10:36PM +0000, Wodkowski, PawelX wrote:
> > > -----Original Message-----
> > > From: Neil Horman [mailto:nhorman@tuxdriver.com]
> > > Sent: Thursday, January 29, 2015 2:25 PM
> > > To: Wodkowski, PawelX
> > > Cc: dev@dpdk.org
> > > Subject: Re: [dpdk-dev] [PATCH 0/2] new headroom stats library and
> example
> > > application
> > >
> > > On Thu, Jan 29, 2015 at 12:50:04PM +0100, Pawel Wodkowski wrote:
> > > > Hi community,
> > > > I would like to introduce library for measuring load of some arbitrary jobs.
> It
> > > > can be used to profile every kind of job sets on any arbitrary execution unit.
> > > > In provided l2fwd-headroom example I demonstrate how to use this library
> to
> > > > profile packet forwarding (job set is froward, flush and stats) on LCores
> > > > (execution unit). This example does no limit possible schemes on which this
> > > > library can be used.
> > > >
> > > > Pawel Wodkowski (2):
> > > > librte_headroom: New library for checking core/system/app load
> > > > examples: introduce new l2fwd-headroom example
> > > >
> > > > config/common_bsdapp | 6 +
> > > > config/common_linuxapp | 6 +
> > > > examples/Makefile | 1 +
> > > > examples/l2fwd-headroom/Makefile | 51 +++
> > > > examples/l2fwd-headroom/main.c | 875
> > > ++++++++++++++++++++++++++++++++++++
> > > > lib/Makefile | 1 +
> > > > lib/librte_headroom/Makefile | 50 +++
> > > > lib/librte_headroom/rte_headroom.c | 368 +++++++++++++++
> > > > lib/librte_headroom/rte_headroom.h | 481 ++++++++++++++++++++
> > > > mk/rte.app.mk | 4 +
> > > > 10 files changed, 1843 insertions(+)
> > > > create mode 100644 examples/l2fwd-headroom/Makefile
> > > > create mode 100644 examples/l2fwd-headroom/main.c
> > > > create mode 100644 lib/librte_headroom/Makefile
> > > > create mode 100644 lib/librte_headroom/rte_headroom.c
> > > > create mode 100644 lib/librte_headroom/rte_headroom.h
> > > >
> > > > --
> > > > 1.7.9.5
> > > >
> > > >
> > >
> > > Whats the advantage of this library over the other tools to preform the same
> > > function.
> >
> > Hi Neil,
> >
> > Good point, what is advantage over perf. Answer is: this library does not
> > supposed to be a perf competition and is not for profiling app in the way perf
> does.
> > It is an small and fast extension. It's main task is to manage job list to invoke
> > them exactly when needed and provide some basic stats about application idle
> > time (whatever programmer will consider the idle) and busy time.
> >
> > For example:
> > application might decide to add remove some jobs to/from LCore(s)
> dynamically
> > basing on current idle time (ex: move job from one core to another).
> >
> > Also application might have some information's about traffic type it handles
> > and provide own algorithm to calculate invocation time (it can also
> dynamically
> > switch between those algorithms only replacing handlers).
> >
> > > Perf can provide all the information in this library, and do so
> > > without having to directly modify the source for the execution unit under
> test
> >
> > Yes, perf can provide those information's but it can't handle the case when
> > you are poling for packets too fast or too slow and waist time getting only
> couple
> > of them. Library will adjust time when it execute job basing on value this job
> > returned previously. Code modifications are not so deep, as you can see
> comparing
> > l2wf vs l2fwd-headroom app.
> >
> > For example in application I introduced, when forward job return less than
> > MAX_PKT_BURST execution period will be increased. If it return more it will
> decrease
> > execution period. Stats provided for that can be used to determine if
> application is
> > behaving correctly and if there is a time for handling another port (what did for
> tests).
> >
> You're still re-inventing the wheel here, and I don't see any advantage to doing
> so. If the goal of the library is to profile the run time of a task, then you
> have perf and systemtap for such purposes. If the goal is to create a job
> scheduler that allows you to track multiple parallel tasks, and adjust their
> execution, there are several pre-existing libraries that any application
> programmer can already leverage to do just that (Berkely UPC or libtask to name
> just two examples). Truthfully, on a dedicated cpu, you could just as easily
> create multiple child processes runnnig at SCHED_RR and set their priorities
> accordingly.
>
> I don't see why we need another library to do what several other tools/libraries
> can do quite well.
>
I am under impression that I am unable to express myself clearly enough.
I did not meant to make competition to perf nor reinvent the tasking library.
1. Idle and runtime statistics are provided "by the way" and you can use them
or use perf on linux or libpmc on freebsd or whatever tool you like to get more
sophisticated ones.
2. You can also use tasking library what you like with a headroom object on top
of every task you created with any scheduling you want. This way you can assign
priorities to job sets and adjust sleep time as you like. You can also decide what
is your idle/load time by placing task-dependet-yeld/sleep in idle callback or separate
job callback or loop end callback.
Both of those two points above are no covering one gap - we are running in poll
mode and here is a lack of mutex, semaphores or other synchronization mechanisms
provided by OS/tasking layer. This library try to provide facility for estimating optimal
job execution time because every mis-poll is a waste of time and can lead to
impression that core/task is fully loaded but what it does is only polling and getting 1
or 2 packets instead of 32 (it degrades total NIC throughput).
You can use perf (or whatever tool you like) to profile your code for performance. If
the code good enough, you use headroom library that will estimate how often or
when your perfect-profiled-and-optimized code need to be executed. When execution
period estimation settles you have your headroom for other jobs on this core/task.
You can also provide your own algorithm for estimating execution period. You are also
able to drop using this headroom library at runtime and switch to tasking one when
you decide that you have enough data make decision how many jobs you can execute
on lcore/task basing on current throughput.
I deliberately did not used 'task' but 'job' to not make an impression that I am
reinventing another task library. This code is to be simple and fast. Of course you can
do all those things in every application you make but this library is provided to not
reinvent this logic all the time.
Pawel
next prev parent reply other threads:[~2015-01-30 10:47 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-01-29 11:50 Pawel Wodkowski
2015-01-29 11:50 ` [dpdk-dev] [PATCH 1/2] librte_headroom: New library for checking core/system/app load Pawel Wodkowski
2015-01-29 11:50 ` [dpdk-dev] [PATCH 2/2] examples: introduce new l2fwd-headroom example Pawel Wodkowski
2015-01-29 13:25 ` [dpdk-dev] [PATCH 0/2] new headroom stats library and example application Neil Horman
2015-01-29 17:10 ` Wodkowski, PawelX
2015-01-29 19:13 ` Neil Horman
2015-01-30 10:47 ` Wodkowski, PawelX [this message]
2015-01-30 18:02 ` Neil Horman
2015-02-17 15:37 ` [dpdk-dev] [PATCH v2 " Pawel Wodkowski
2015-02-17 15:37 ` [dpdk-dev] [PATCH v2 1/2] librte_headroom: New library for checking core/system/app load Pawel Wodkowski
2015-02-17 15:37 ` [dpdk-dev] [PATCH v2 2/2] examples: introduce new l2fwd-headroom example Pawel Wodkowski
2015-02-17 16:19 ` [dpdk-dev] [PATCH v3 0/2] new headroom stats library and example application Pawel Wodkowski
2015-02-17 16:19 ` [dpdk-dev] [PATCH v3 1/2] pmd: enable DCB in SRIOV Pawel Wodkowski
2015-02-17 16:19 ` [dpdk-dev] [PATCH v3 2/2] tespmd: fix DCB in SRIOV mode support Pawel Wodkowski
2015-02-17 16:33 ` [dpdk-dev] [PATCH v3 0/2] new headroom stats library and example application Wodkowski, PawelX
2015-02-17 16:42 ` [dpdk-dev] [PATCH v4 " Pawel Wodkowski
2015-02-17 16:42 ` [dpdk-dev] [PATCH v4 1/2] librte_headroom: New library for checking core/system/app load Pawel Wodkowski
2015-02-18 13:36 ` De Lara Guarch, Pablo
2015-02-17 16:42 ` [dpdk-dev] [PATCH v4 2/2] examples: introduce new l2fwd-headroom example Pawel Wodkowski
2015-02-18 13:41 ` De Lara Guarch, Pablo
2015-02-19 12:18 ` [dpdk-dev] [PATCH v5 0/3] new headroom stats library and example application Pawel Wodkowski
2015-02-19 12:18 ` [dpdk-dev] [PATCH v5 1/3] librte_headroom: New library for checking core/system/app load Pawel Wodkowski
2015-02-24 1:55 ` Thomas Monjalon
2015-02-19 12:18 ` [dpdk-dev] [PATCH v5 2/3] examples: introduce new l2fwd-headroom example Pawel Wodkowski
2015-02-19 12:18 ` [dpdk-dev] [PATCH v5 3/3] MAINTAINERS: claim responsibility for headroom library and example app Pawel Wodkowski
2015-02-19 14:33 ` [dpdk-dev] [PATCH v5 0/3] new headroom stats library and example application Neil Horman
2015-02-20 15:46 ` Jastrzebski, MichalX K
2015-02-23 11:45 ` Thomas Monjalon
2015-02-23 14:36 ` Jastrzebski, MichalX K
2015-02-23 14:46 ` Thomas Monjalon
2015-02-23 15:55 ` Jastrzebski, MichalX K
2015-02-23 16:04 ` Thomas Monjalon
2015-02-24 8:44 ` Pawel Wodkowski
2015-02-24 9:49 ` Jastrzebski, MichalX K
2015-02-24 10:00 ` Thomas Monjalon
2015-02-24 10:05 ` Wodkowski, PawelX
2015-02-24 10:53 ` Wodkowski, PawelX
2015-02-24 16:33 ` [dpdk-dev] [PATCH v6 0/3] new rte_jobstats " Pawel Wodkowski
2015-02-24 16:33 ` [dpdk-dev] [PATCH v6 1/3] librte_jobstats: New library for checking core/system/app load Pawel Wodkowski
2015-02-24 21:18 ` Thomas Monjalon
2015-02-24 16:33 ` [dpdk-dev] [PATCH v6 2/3] examples: introduce new l2fwd-jobstats example Pawel Wodkowski
2015-02-24 19:10 ` De Lara Guarch, Pablo
2015-02-24 19:16 ` De Lara Guarch, Pablo
2015-02-24 20:08 ` Thomas Monjalon
2015-02-24 21:19 ` Thomas Monjalon
2015-02-24 16:33 ` [dpdk-dev] [PATCH v6 3/3] MAINTAINERS: claim responsibility for rte_jobstats library and example app Pawel Wodkowski
2015-02-24 20:34 ` [dpdk-dev] [PATCH v6 0/3] new rte_jobstats library and example application De Lara Guarch, Pablo
2015-02-24 21:25 ` Thomas Monjalon
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=F6F2A6264E145F47A18AB6DF8E87425D12B8FD9E@IRSMSX102.ger.corp.intel.com \
--to=pawelx.wodkowski@intel.com \
--cc=dev@dpdk.org \
--cc=nhorman@tuxdriver.com \
/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).