Re: sched_ule, runqueues, priority, and O(1) sheduling question

2005-03-05 Thread Andrey Simonenko
On Fri, Mar 04, 2005 at 09:45:56PM +0530, Andriy Tkachuk wrote:
 Hi folks.
 
 I wander how O(1) sheduling works in ULE.
 In ule.pdf Jeff wrote:
 
 Threads are picked from the current queue in 
 priority order until the current queue is empty.
 
 As far as I understand the algorithm is O(n)
 where n - number of READY TO RUN processes,
 not all processes isn't it?

As I understood, algorithm is O(1).  Everything said below is only
my point of view, please correct me if I'm wrong.

All threads which are kept in the current queue, are really not kept
in one physical queue.  They are kept in several queues, number of
this queues is less than number of priorities, so several priorities
are indistinguishable in the queue.

To find a thread with higher priority first non-empty queue should
be find.  There is a bitmap for all queues and each bit in this
bitmap says if queue is empty or not.  To find first nonzero bit
special machine-dependent instruction is used (for x86 this is bsf),
if a machine word is not enough to keep all bits, then several words
are used.

When first non-empty queue (that is queue with maximum priority)
was found, everything what is needed, is removing first (last)
thread from this queue.  If the queue became empty its bit in
the bitmap of all queue is cleared and it is set again if the
queue becomes non-empty.

Details:
kern/sched_ule.c
struct kseq{}, check what is ksq_next and
what is ksq_curr

sys/runq.h
check comments in this file

kern/kern_switch.c
check runq_*() functions and runq_findbit().

Follow this path:
mi_switch() - sched_ule.c:sched_switch() - choosethread() -
shced_ule.c:shced_choose() -
kseq_choose() - runq_choose()
kseq_runq_rem() - runq_remove()
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: sched_ule, runqueues, priority, and O(1) sheduling question

2005-03-04 Thread Lucas Holt
I haven't looked at it, but could it just be referring to retrieving a 
thread from the queue.  Just pulling something off a queue is a O(1) 
operation.  The order it places things in the queue probably is not. :)

On Mar 4, 2005, at 11:15 AM, Andriy Tkachuk wrote:
Hi folks.
I wander how O(1) sheduling works in ULE.
In ule.pdf Jeff wrote:
Threads are picked from the current queue in priority order until the 
current queue is empty.

As far as I understand the algorithm is O(n)
where n - number of READY TO RUN processes,
not all processes isn't it?
thanks,
 Andriy.
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to 
[EMAIL PROTECTED]


Lucas Holt
[EMAIL PROTECTED]

FoolishGames.com  (Jewel Fan Site)
JustJournal.com (Free blogging)
FoolishGames.net (Enemy Territory IoM site)
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]


Re: sched_ule, runqueues, priority, and O(1) sheduling question

2005-03-04 Thread Andriy Tkachuk
I haven't looked at it, but could it just be referring to retrieving a 
thread from the queue.  Just pulling something off a queue is a O(1) 
operation.  The order it places things in the queue probably is not. :)
You rihgt - just pulling something off a queue is a O(1) operation,
but before pulling algorithm is finding the thread with highest
priority, with it have to pull  - this is not the O(1) operation.
___
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to [EMAIL PROTECTED]