[PATCH 1/3] cyclictest: Added policy option to support FIFO or RR.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




>From 51fa8db58c227ba151eb245a9894cd2ed239d8ce Mon Sep 17 00:00:00 2001
From: GeunSik,Lim <leemgs1@xxxxxxxxx>
Date: Fri, 26 Jun 2009 23:17:09 +0900
Subject: [PATCH 1/3] cyclictest: Added policy option to support FIFO or RR.

Current cyclictest support FIFO policy for static priority only.
We need policy option to support FIFO or RR by user.

	Signed-off-by: GeunSik Lim <geunsik.lim@xxxxxxxxxxx>
---
 src/cyclictest/cyclictest.c |   29 +++++++++++++++++++++--------
 1 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/cyclictest/cyclictest.c b/src/cyclictest/cyclictest.c
index 3e2d500..ad4c421 100644
--- a/src/cyclictest/cyclictest.c
+++ b/src/cyclictest/cyclictest.c
@@ -103,6 +103,7 @@ enum {
 /* Struct to transfer parameters to the thread */
 struct thread_param {
 	int prio;
+	int policy;
 	int mode;
 	int timermode;
 	int signal;
@@ -563,7 +564,6 @@ void *timerthread(void *param)
 	struct itimerval itimer;
 	struct itimerspec tspec;
 	struct thread_stat *stat = par->stats;
-	int policy = par->prio ? SCHED_FIFO : SCHED_OTHER;
 	int stopped = 0;
 	cpu_set_t mask;
 
@@ -594,7 +594,7 @@ void *timerthread(void *param)
 
 	memset(&schedp, 0, sizeof(schedp));
 	schedp.sched_priority = par->prio;
-	sched_setscheduler(0, policy, &schedp);
+	sched_setscheduler(0, par->policy, &schedp);
 
 	/* Get current time */
 	clock_gettime(par->clock, &now);
@@ -775,9 +775,12 @@ static void display_help(void)
 	       "-h       --histogram=US    dump a latency histogram to stdout after the run\n"
 	       "                           US is the max time to be be tracked in microseconds\n"
                "-w       --wakeup          task wakeup tracing (used with -b)\n"
-               "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n",
+               "-W       --wakeuprt        rt task wakeup tracing (used with -b)\n"
+	       "-y POLI  --policy=POLI     policy of realtime thread (0:OTHER, 1:FIFO, 2:RR)\n"
+	       "                           format: --policy=0(default) --policy=1 or --policy=2\n",
 	       tracers
 		);
+
 	exit(0);
 }
 
@@ -785,6 +788,7 @@ static int use_nanosleep;
 static int timermode = TIMER_ABSTIME;
 static int use_system;
 static int priority;
+static int policy = 0;
 static int num_threads = 1;
 static int max_cycles;
 static int clocksel = 0;
@@ -832,6 +836,7 @@ static void process_options (int argc, char *argv[])
 			{"nsecs", no_argument, NULL, 'N'},
 			{"oscope", required_argument, NULL, 'o'},
 			{"priority", required_argument, NULL, 'p'},
+			{"policy", required_argument, NULL, 'y'},
 			{"preemptoff", no_argument, NULL, 'P'},
 			{"quiet", no_argument, NULL, 'q'},
 			{"relative", no_argument, NULL, 'r'},
@@ -846,7 +851,7 @@ static void process_options (int argc, char *argv[])
 			{"traceopt", required_argument, NULL, 'O'},
 			{NULL, 0, NULL, 0}
 		};
-		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:O:p:Pmqrst::vD:wWT:",
+		int c = getopt_long (argc, argv, "a::b:Bc:Cd:Efh:i:Il:nNo:O:p:Pmqrst::vD:wWTy:",
 			long_options, &option_index);
 		if (c == -1)
 			break;
@@ -897,6 +902,7 @@ static void process_options (int argc, char *argv[])
 			break;
                 case 'w': tracetype = WAKEUP; break;
                 case 'W': tracetype = WAKEUPRT; break;
+                case 'y': policy = atoi(optarg); break;
 		case '?': error = 1; break;
 		}
 	}
@@ -929,6 +935,9 @@ static void process_options (int argc, char *argv[])
 	if (priority < 0 || priority > 99)
 		error = 1;
 
+	if  (policy < 0 || policy > 2) 
+                error = 1;
+
 	if (num_threads < 1)
 		error = 1;
 
@@ -1022,13 +1031,13 @@ static void print_stat(struct thread_param *par, int index, int verbose)
 		if (quiet != 1) {
 			char *fmt;
 			if (use_nsecs)
-				fmt = "T:%2d (%5d) P:%2d I:%ld C:%7lu "
+				fmt = "T:%2d (%5d) P:%2d Y:%1d I:%ld C:%7lu "
 					"Min:%7ld Act:%8ld Avg:%8ld Max:%8ld\n";
 			else
-				fmt = "T:%2d (%5d) P:%2d I:%ld C:%7lu "
+				fmt = "T:%2d (%5d) P:%2d Y:%1d I:%ld C:%7lu "
 					"Min:%7ld Act:%5ld Avg:%5ld Max:%8ld\n";
-			printf(fmt, index, stat->tid, par->prio, par->interval,
-			       stat->cycles, stat->min, stat->act,
+			printf(fmt, index, stat->tid, par->prio, par->policy, 
+                               par->interval, stat->cycles, stat->min, stat->act,
 			       stat->cycles ?
 			       (long)(stat->avg/stat->cycles) : 0, stat->max);
 		}
@@ -1143,6 +1152,10 @@ int main(int argc, char **argv)
 		par[i].prio = priority;
 		if (priority && !histogram)
 			priority--;
+                if      ( policy == 0) par[i].policy = SCHED_OTHER;
+                else if ( policy == 1) par[i].policy = SCHED_FIFO;
+                else if ( policy == 2) par[i].policy = SCHED_RR;
+                else                   par[i].policy = SCHED_OTHER;
 		par[i].clock = clocksources[clocksel];
 		par[i].mode = mode;
 		par[i].timermode = timermode;
-- 
1.6.3.1


-----------------------------------------------
To unsubscribe from this list: send the line "unsubscribe linux-***" 
in the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

GeunSik Lim ( Samsung Electronics )
e-Mail  :1) geunsik.lim@xxxxxxxxxxx
         2) leemgs@xxxxxxxxx , leemgs1@xxxxxxxxx
HomePage: http://blog.naver.com/invain/
-----------------------------------------------

--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [RT Stable]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]

  Powered by Linux