Thread priority scheduling across linux kernels.

From: Jyoti Wagholikar (jyoti.wagholikar_at_gmail.com)
Date: 08/29/04


Date: 29 Aug 2004 05:55:10 -0700

Hi,

    I have come across some strange behaviour of
priority base scheduling of threads across linux
kernels.

   The program below shows that main priority is
raised to max = 99. Another thread with priority =30
is created.

void main()
{
struct sched_param schedparam, getparam,
taskschedparam;
int policy, status;
pthread_attr_t attribs;
                                                      
pthread_t id =pthread_self();

/* Raising main priority to max =99 */
schedparam.__sched_priority
=sched_get_priority_max( SCHED_FIFO );
pthread_setschedparam(id, SCHED_FIFO, &schedparam);
pthread_getschedparam(id,&policy , &getparam);
printf("\n main : priority = %d, policy = %d",
getparam.__sched_priority, policy);

/* First Assign default attributes for the thread */
pthread_attr_init(&attribs);
                                                      
/*Set stack size as specified by user*/
attribs.__stacksize = 10000;
                                                      
/*set scheduling policy*/
pthread_attr_setschedpolicy(&attribs, SCHED_FIFO);
                                                      
                        
/*Set task priority*/
taskschedparam.__sched_priority = 30;
pthread_attr_setschedparam(&attribs, &taskschedparam);
                                                     
status = pthread_create(&firstTask, &attribs,
task_fun1, (void*)1 );
printf("\n main :first task = %d,firstTask);
fflush(stdout);
                                                      
sleep(10000);
}
void *task_fun1 ( void *param)
{
struct sched_param schedparam, getparam ;
int policy;
                                                     
pthread_getschedparam(pthread_self(),&policy ,
&getparam);
printf("\n task_fun1: priority = %d, policy = %d",
getparam.__sched_priority, policy);fflush(stdout);
printf("\n FIRST TASK = %x", firstTask);
fflush(stdout);
}

Ouputs:
Redhat: 7.2 :[CORRECT OUTPUT]
main : priority = 99, policy = 1
pthread_create status = 0
main :first task = 1026
Sleeping for 1000 sec
task_fun1: priority = 30, policy = 1
FIRST TASK = 402

Redhat: 9.0
main : priority = 99, policy = 1
task_fun1: priority = 0, policy = 0
FIRST TASK = 40838cc0
pthread_create status = 0
main :first task = 1082363072
Sleeping for 1000 sec

Just wondering if there is any inconsistency in the
priority scheduling across linux version: linux
2.4.20-8(Redhat 9.0) linux 2.4.7(Redhat 7.2).

Has anyone come across this problem earlier? Any
solution to overcome it?

Your input will be helpful.

thanks and regards,
-Jyoti



Relevant Pages

  • Thread priority scheduling across linux kernels.
    ... priority base scheduling of threads across linux ... The program below shows that main priority is ... printf("\n main:first task = %d,firstTask); ...
    (comp.os.linux.embedded)
  • Linux scheduler (scheduling) questions
    ... I have "general" Linux OS scheduling questions, ... I was told that the Linux kernel could be configured with one of the 3 ... Under what priority the OS system calls are executed? ...
    (Linux-Kernel)
  • Thread priority scheduling across linux kernels RH9.0 and RH 7.2.
    ... priority base scheduling of threads across linux ... The program below shows that main priority is ... pthread_getschedparam(id,&policy, &getparam); ... printf("\n main:first task = %d,firstTask); ...
    (Linux-Kernel)
  • Linux scheduler (scheduling) questions vs threads
    ... library for porting PSOS to Linux). ... Or is it user's responsibility to arrange threads scheduling via some means ... SCHED_NORMAL has a soft priority mechanism ... SCHED_RR is a fixed real time policy over the static range of 0-99 where a ...
    (Linux-Kernel)
  • Re: Leveling does not honor task links
    ... are you scheduling your projects from a start or ... > completion) the first task is always delayed until some unusual date far ... > beyond the other tasks for which it is a predecessor. ... > individually have default priority of 500. ...
    (microsoft.public.project)