linux-rt-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Priyanka Jain <Priyanka.Jain@freescale.com>
To: <linux-rt-users@vger.kernel.org>, <williams@redhat.com>,
	<dvhart@linux.intel.com>
Cc: <rostedt@goodmis.org>, <tglx@linutronix.de>,
	<Rajan.Srivastava@freescale.com>, <Poonam.Aggrwal@freescale.com>,
	Priyanka Jain <Priyanka.Jain@freescale.com>
Subject: [PATCH 1/2][RFC] Add README_cyclicload
Date: Wed, 1 Aug 2012 10:37:23 +0530	[thread overview]
Message-ID: <1343797643-10208-1-git-send-email-Priyanka.Jain@freescale.com> (raw)

Cyclicload program is designed to simulate load
at regular intervals in form of one or two threads.

Signed-off-by: Priyanka Jain <Priyanka.Jain@freescale.com>
---
 src/cyclictest/README_cyclicload |  147 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 147 insertions(+), 0 deletions(-)
 create mode 100644 src/cyclictest/README_cyclicload

diff --git a/src/cyclictest/README_cyclicload b/src/cyclictest/README_cyclicload
new file mode 100644
index 0000000..f1e99bf
--- /dev/null
+++ b/src/cyclictest/README_cyclicload
@@ -0,0 +1,147 @@
+DESCRIPTION
+-------------
+
+The cyclicload program is developed above existing cyclictest application.
+It is basically designed to simulate specified load at regular intervals
+in addition to cyclictest functionality.
+It can simulate one or two load threads.
+
+
+Why it is required?
+---------------------
+It is required to test system performance under a specified load
+along with tracking latency of simulated load thread.
+
+
+Example use case
+--------------------
+For products like LTE, L2 layer runs in form of two threads.
+-MAC layer thread runs at highest RT priority producing a
+fixed load at regular intervals and
+-second thread run at lower RT priority or in non-rt priority
+ producing some load in each interval depending upon availability of CPU.
+Requirement is to test system under this load as well as to
+track latency of highest priority RT thread which is MAC thread
+in example usecase.
+
+
+What does it do?
+------------------
+It creates one or two load generating thread/s.
+1)load1 thread (timer thread)
+2)load2 thread
+priority, nice value, load % as input via command line
+
+-cyclictest funcationality like latency measurement
+
+
+How does it work
+-----------------
+It uses generate_load loop function to simualte load.
+First it caliberate required loop_count per unit time per CPU.
+It stores this data in some file.
+For subsequent runs, it uses this caliberated data to generate load
+if form of one or two threads .
+It keeps on tracking the latency of RT thread.
+More in Design Overview section.
+
+
+Recommended Settings
+----------------------
+-First run is recommended to be run with no or least load for accuracy.
+-should be run with sudo or root permission.
+-caliberation routine produces calinerate_ount file in runnign directory.
+	If one don't have permission in that dir, path should be changed in
+	FILENAME or one can exploit shared memory method.
+-Atleast one thread should be of RT priority. This thread takes priority of
+	cyclictest as its priority.
+-cyclictest applcication should be run with SCHED_OTHER policy.
+-recommended to run in quiet mode (-q) in background.
+TODO: add option to take filepath from cmd line
+
+
+Cmd line usage/examples
+------------------------
+New command line arguments:
+ "-x       --load_t1         load in percentage for t1 thread\n"
+ "-X       --load_t2         load in percentage for t2 thread\n"
+ "-z       --priority_t2     priority of t2 thread\n"
+ "-Z       --nice_t2         nice value of t2 thread\n"
+
+If both load_t1 and load_t2 are zero, it behaves as default cyclictest application
+
+For uniprocessor:
+	#sudo ./cyclictest -p 99 -c 1 -d 0 -x 40 -X 30 -q -D 600&
+
+For multiprocessor:
+	#sudo ./cyclcitest -p 99 -c 1 -d 0 -x 40 -X 30 -q -D 600 -S&
+
+
+
+Future Enhancements
+-------------------
+Maintain statistics of average load produces.
+invalidate cache in each interval to make it close to actual scenario.
+can be scalable to produce n number of load threads.
+
+
+Design Overview
+--------------
+---------------
+
+The logic to simulate load has been added above existing cyclictest application.
+
+Threads
+--------
+cyclicload : main process
+--------------------------
+-parse input arguments.
+
+-for first run : create caliberate thread.
+	store caliberated count in caliberate_count file
+-for subsequent runs:
+	read caliberated count from file and use that count to simulate defined load.
+
+-create t load1threads (t depending on cmdlime args, for smp system = num of cores, one thread per core)
+
+-update stats periodically while !shutdown
+-print stats periodically depending on cmdline args while !shutdown
+
+
+caliberate thread
+------------------
+-is created only once for the first run of cyclicload
+-run at highest RT priority.
+-affine itself turn by turn to each cpu. (for all cpus for multicore system)
+-caliberate count per unit (ms by default) per cpu
+-store per cpu data in caliberate_count_array
+-recommended to be run with no or least load.
+
+
+load1 thread(timer thread)
+---------------------------
+-run at priority parsed in main routine
+-recommended to run at highest RT priority
+-creates load2_thread (optional only if on load2 is nonzero)
+-calculate number of loops to execute to generate defined load by
+	using caliberate_count_array and load percentage parsed in main routine
+-reduced interval = interval(window) - duration for load_t1
+-while loop until !shutdown
+	-generate load_t1 load
+	-sleep for reduced interval
+	-calculate latency (cosumes around 1%-2% cpu)
+	-discard off remaining load if window expires
+	-set next_window_started flag to 1
+	-signal load2_thread about next window
+-overhead: consumes 1-2% cpu for latency maintainenance, etc
+-variation in produced load : 0%-2% of full cpu utilization
+
+
+load2_thread
+------------
+generate load_t2 load
+wait for next window to start
+if window expires before generate load_t2 finishes,
+	discard off remaining load
+	restart generate load_t2 load
+variation in produced load : 0%-1% of full cpu utilization
-- 
1.7.4.1




             reply	other threads:[~2012-08-01  5:07 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-01  5:07 Priyanka Jain [this message]
2012-08-06  4:00 ` [PATCH 1/2][RFC] Add README_cyclicload Jain Priyanka-B32167
2012-08-06 13:59   ` Clark Williams
2012-08-07  4:02     ` Jain Priyanka-B32167
2012-08-13  8:52       ` Jain Priyanka-B32167
2012-08-13 15:49         ` John Kacur
2012-08-14  8:36           ` Jain Priyanka-B32167
2012-08-14 10:15             ` Jain Priyanka-B32167
2012-08-14 15:30               ` Clark Williams
2012-08-14 18:10                 ` Frank Rowand
2012-08-14 20:34                 ` John Kacur
2012-08-17 11:04                   ` Jain Priyanka-B32167
2012-08-17 11:19                     ` John Kacur
2012-08-13 19:41   ` Frank Rowand

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=1343797643-10208-1-git-send-email-Priyanka.Jain@freescale.com \
    --to=priyanka.jain@freescale.com \
    --cc=Poonam.Aggrwal@freescale.com \
    --cc=Rajan.Srivastava@freescale.com \
    --cc=dvhart@linux.intel.com \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=williams@redhat.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).