Re: [linux-audio-dev] new realtime scheduling policy

New Message Reply About this list Date view Thread view Subject view Author view Other groups

Subject: Re: [linux-audio-dev] new realtime scheduling policy
From: rm (async_AT_cc.gatech.edu)
Date: Tue Mar 18 2003 - 23:52:36 EET


ok,
         new patch. with sysctl for
/proc/sys/kernel/rtsched_{period,reserved}. a single limit for all rt
fifo processes. same caveats as last time.

                rob

--- pristine/linux-2.4.20/kernel/sched.c 2003-03-17 23:24:02.000000000 -0500
+++ linux/kernel/sched.c 2003-03-18 13:22:38.000000000 -0500
@@ -43,6 +43,12 @@ extern void immediate_bh(void);
 
 unsigned securebits = SECUREBITS_DEFAULT; /* systemwide security settings */
 
+unsigned long rt_period_start = 0;
+unsigned long rt_period_end = 0;
+unsigned long rt_period_remain = 0;
+unsigned long rt_period_length = 50;
+unsigned long rt_period_reserved = 45;
+
 extern void mem_use(void);
 
 /*
@@ -188,7 +194,35 @@ static inline int goodness(struct task_s
          * runqueue (taking priorities within processes
          * into account).
          */
+
+
+
+ /*
+ * check if we are in the right time period
+ *
+ * XXX if it burns though it's entire quantum and
+ * into the next ?
+ *
+ */
+ if (jiffies >= rt_period_end) {
+ /* no, start over from now */
+ rt_period_start = jiffies;
+ rt_period_end = rt_period_length + rt_period_start;
+ rt_period_remain = rt_period_reserved;
+ }
+
+ /*
+ * is there any remaining time ?
+ *
+ */
+
+ if (rt_period_remain > 0) {
         weight = 1000 + p->rt_priority;
+ } else {
+ /* redundent, for clarity */
+ weight = -1;
+ }
+
 out:
         return weight;
 }
--- pristine/linux-2.4.20/kernel/sysctl.c 2003-03-17 23:24:02.000000000 -0500
+++ linux/kernel/sysctl.c 2003-03-18 13:05:22.000000000 -0500
@@ -51,6 +51,11 @@ extern int sysrq_enabled;
 extern int core_uses_pid;
 extern int cad_pid;
 
+
+extern unsigned long rt_period_length;
+extern unsigned long rt_period_reserved;
+
+
 /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */
 static int maxolduid = 65535;
 static int minolduid;
@@ -260,6 +265,12 @@ static ctl_table kern_table[] = {
         {KERN_LOWLATENCY, "lowlatency", &enable_lowlatency, sizeof (int),
          0644, NULL, &proc_dointvec},
 #endif
+
+ {KERN_FIFOSCHED_PERIOD, "rtsched-period", &rt_period_length,
+ sizeof (int), 0644, NULL, &proc_dointvec},
+ {KERN_FIFOSCHED_RESERV, "rtsched-reserve",
+ &rt_period_reserved, sizeof (int), 0644, NULL, &proc_dointvec},
+
         {0}
 };
 
--- pristine/linux-2.4.20/include/linux/sysctl.h 2003-03-17 23:24:02.000000000 -0500
+++ linux/include/linux/sysctl.h 2003-03-18 13:03:37.000000000 -0500
@@ -125,6 +125,8 @@ enum
         KERN_TAINTED=53, /* int: various kernel tainted flags */
         KERN_CADPID=54, /* int: PID of the process to notify on CAD */
         KERN_LOWLATENCY=55, /* int: enable low latency scheduling */
+ KERN_FIFOSCHED_PERIOD=56, /* max time rt processes can take up */
+ KERN_FIFOSCHED_RESERV=57, /* "" */
 };
 
 
--- pristine/linux-2.4.20/kernel/timer.c 2002-11-28 18:53:15.000000000 -0500
+++ linux/kernel/timer.c 2003-03-18 12:41:05.000000000 -0500
@@ -105,6 +105,16 @@ static struct list_head * run_timer_list
 
 #define NOOF_TVECS (sizeof(tvecs) / sizeof(tvecs[0]))
 
+extern unsigned long rt_period_start;
+extern unsigned long rt_period_end;
+extern unsigned long rt_period_remain;
+extern unsigned long rt_period_length;
+extern unsigned long rt_period_reserved;
+
+
+
+
+
 void init_timervecs (void)
 {
         int i;
@@ -610,6 +620,15 @@ void update_process_times(int user_tick)
                                 p->need_resched = 1;
                         }
                 }
+
+ if (p->policy == SCHED_FIFO) {
+ if (rt_period_remain == 0) {
+ p->need_resched = 1;
+ } else {
+ rt_period_remain--;
+ }
+ }
+
                 if (p->nice > 0)
                         kstat.per_cpu_nice[cpu] += user_tick;
                 else

----
Robert Melby
Georgia Institute of Technology, Atlanta Georgia, 30332
uucp:     ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!gt4255a
Internet: async_AT_cc.gatech.edu


New Message Reply About this list Date view Thread view Subject view Author view Other groups

This archive was generated by hypermail 2b28 : Tue Mar 18 2003 - 23:55:42 EET