SMP scheduling

Jonathan Case Nicklin (frizzle@engin.umich.edu)
Sat, 21 Aug 1999 17:52:41 -0400 (EDT)


Andr`ea,
In the second patch you wrote i think it might be better not to
perform the goodness evaluation series multiple times (runtime
optimization). Heres a possible solution... Heres normal diff to sched.c
for 2.3.14.

285c285
< int cpu, best_cpu, weight, best_weight, i,sched_rt;

---
> 	int cpu, best_cpu, weight, best_weight, i;
289,295d288
< 	sched_rt = 0;	   /*default to non-real-time */
< 	
< 	/*
< 	*Take as much out of the lock as possible
< 	*/
< 	best_cpu = p->processor;
< 	target_tsk = idle_task(best_cpu);
302a296,297
> 	best_cpu = p->processor;
> 	target_tsk = idle_task(best_cpu);
305,318d299
< 	/*
< 	 *Is this a real time Process? 
< 	 */
< 	if ((p->policy & ~SCHED_YIELD) != SCHED_OTHER)
< 		sched_rt=1;
< 
< 	target_tsk=NULL;
< 	/*
< 	* If the process is real-time, then find the CPU with
< 	* the best preemption goodness, ingore relation in the
< 	* case of real-time. If the process is OTHER, check
< 	* relation for possible contention prevention while
< 	* evaluating best preemptive goodness.
< 	*/
319a301
> 	target_tsk = NULL;
323c305
< 		if (!sched_rt && related(tsk, p))
---
> 		if (related(tsk, p))

All this does is check at the start to see if the process could be real-time. Only perform the relation check if the process is not real-time. Also, it takes an assignment and an evalutaion out of the lock section to reduce time in lock. please let me know if this is there is a problem with this approach.

Sincerely, JCN

ps. what happened to evaluating the avg slice vs cache_flush time? pps. Ill benchmark this stuff on monday. .`'. .`'. .`'. `.,' `.,' `.,' frizzle@engin.umich.edu "The facts, no matter how interesting they may .`'. .`'. .`'. be, are irrelevant!" `.,' `.,' `.,' (A thought to get you through any crisis)

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