Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 30 May 2014 20:49:51 -0600
From:      Ian Lepore <ian@FreeBSD.org>
To:        Fred Pedrisa <fredhps10@hotmail.com>
Cc:        'freebsd-current' <freebsd-current@FreeBSD.org>
Subject:   Re: Thread Scheduler Priority
Message-ID:  <1401504591.20883.28.camel@revolution.hippie.lan>
In-Reply-To: <COL131-DS40CDAE671F4A6060C9A85B0240@phx.gbl>
References:  <COL131-DS40CDAE671F4A6060C9A85B0240@phx.gbl>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2014-05-29 at 02:12 -0300, Fred Pedrisa wrote:
> Hi, Guys.
> 
>  
> 
> How can I adjust a certain thread to have the maximum system priority in the
> scheduler ?
> 
>  
> 
> I've tried doing it this way :
> 
>  
> 
>                                                /* Set thread priority. */
> 
>                                                if
> (pthread_getschedparam(ts[gnThreadID], &police, &param[gnThreadID]) != 0)
> 
>                                                {
> 
>                                                                error
> ("Unable to get priority");
> 
>                                                                return 1;
> 
>                                                }
> 
>  
> param[gnThreadID].sched_priority = 99;
> 
>                                                if
> (pthread_setschedparam(ts[gnThreadID], police, &param[gnThreadID]) != 0)
> 
>                                                {
> 
>                 error("Unable to set priority");
> 
>                 return 1;
> 
>                                                }
> 
>  
> 
> However, in 'top', I don't see the process threads switching to -92
> priority, like other threads in the system, is something I did wrong or
> maybe I might be missing something ?

You can't just set the priority to any number you want... per the man
page for pthread_setschedparam() the value has to fall within the ranges
returned by sched_get_priority_min() and sched_get_priority_max() for
the given scheduling class.  On freebsd those ranges are 0-31.

I suspect from your statement of wanting "maximum system priority" maybe
what you need to do is change the scheduling class from SCHED_OTHER to
SCHED_RR, that should give you realtime priority.  Be aware that a
realtime thread that is compute-bound will take over the system (or one
core on an SMP system); it will get all cycles if it is always runnable.

If what you're looking for is the thread equivelent of using the nice
command, so that you give a boost to a thread over other threads in the
timeshare (SCHED_OTHER) scheduling class, there is currently no way to
do that in freebsd.

Last year for $work I about went crazy trying to figure out the mapping
between pthread scheduling classes and priorities and freebsd's idea of
thread prorities.  I eventually gave up on the pthread API and used the
freebsd native function rtprio_thread() instead.

-- Ian





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1401504591.20883.28.camel>