IPB
>  Man Pages > Linux > Suse Linux 10.1 > Section 2 > sched_setscheduler man page

sched_setscheduler man page

Section 2 - Suse Linux 10.1 Man Pages

Other operating system man pages available here


Advanced Search

Hopefully, this page is exactly what you are looking for, but if not, you can always find further assistance on Unix/Linux Forum!


SETSCHEDULER(2)            Linux Programmer's Manual           SETSCHEDULER(2)




NAME

       sched_setscheduler,  sched_getscheduler  - set and get scheduling algo-
       rithm/parameters


SYNOPSIS

       #include <sched.h>

       int sched_setscheduler(pid_t pid, int policy,
                              const struct sched_param *param);

       int sched_getscheduler(pid_t pid);

       struct sched_param {
           ...
           int sched_priority;
           ...
       };


DESCRIPTION

       sched_setscheduler() sets both the scheduling policy and the associated
       parameters  for  the process identified by pid. If pid equals zero, the
       scheduler of the calling process will be set. The interpretation of the
       parameter  param depends on the selected policy. Currently, the follow-
       ing three scheduling policies are supported  under  Linux:  SCHED_FIFO,
       SCHED_RR,  SCHED_OTHER, and SCHED_BATCH; their respective semantics are
       described below.

       sched_getscheduler() queries the scheduling policy currently applied to
       the  process  identified  by pid. If pid equals zero, the policy of the
       calling process will be retrieved.

   Scheduling Policies
       The scheduler is the kernel part that decides  which  runnable  process
       will be executed by the CPU next. The Linux scheduler offers three dif-
       ferent scheduling policies, one for normal processes and two for  real-
       time  applications.  A static priority value sched_priority is assigned
       to each process and this value can be changed only  via  system  calls.
       Conceptually,  the scheduler maintains a list of runnable processes for
       each possible sched_priority value, and sched_priority can have a value
       in the range 0 to 99. In order to determine the process that runs next,
       the Linux scheduler looks for  the  non-empty  list  with  the  highest
       static  priority  and  takes  the process at the head of this list. The
       scheduling policy  determines  for  each  process,  where  it  will  be
       inserted  into the list of processes with equal static priority and how
       it will move inside this list.

       SCHED_OTHER is the default universal time-sharing scheduler policy used
       by most processes.  SCHED_BATCH is intended for "batch" style execution
       of processes.  SCHED_FIFO and SCHED_RR are intended for  special  time-
       critical  applications  that need precise control over the way in which
       runnable processes are selected for execution.

       Processes scheduled with SCHED_OTHER or SCHED_BATCH  must  be  assigned
       the  static  priority  0.   Processes  scheduled  under  SCHED_FIFO  or
       SCHED_RR can have a static priority in the range 1 to 99.   The  system
       calls sched_get_priority_min() and sched_get_priority_max() can be used
       to find out the valid priority range  for  a  scheduling  policy  in  a
       portable way on all POSIX.1b conforming systems.

       All  scheduling is preemptive: If a process with a higher static prior-
       ity gets ready to run,  the  current  process  will  be  preempted  and
       returned  into its wait list. The scheduling policy only determines the
       ordering within the list of runnable processes with equal static prior-
       ity.

   SCHED_FIFO: First In-First Out scheduling
       SCHED_FIFO can only be used with static priorities higher than 0, which
       means that when a SCHED_FIFO processes becomes runnable, it will always
       immediately  preempt  any  currently running SCHED_OTHER or SCHED_BATCH
       process.  SCHED_FIFO is a  simple  scheduling  algorithm  without  time
       slicing.  For processes scheduled under the SCHED_FIFO policy, the fol-
       lowing rules are applied: A SCHED_FIFO process that has been  preempted
       by another process of higher priority will stay at the head of the list
       for its priority and will resume execution as soon as all processes  of
       higher  priority  are  blocked again. When a SCHED_FIFO process becomes
       runnable, it will be inserted at the end of the list for its  priority.
       A  call  to  sched_setscheduler()  or  sched_setparam()  will  put  the
       SCHED_FIFO (or SCHED_RR) process identified by pid at the start of  the
       list  if  it  was  runnable.  As a consequence, it may preempt the cur-
       rently running process if it has  the  same  priority.   (POSIX  1003.1
       specifies  that  the process should go to the end of the list.)  A pro-
       cess calling sched_yield() will be put at the end of the list. No other
       events will move a process scheduled under the SCHED_FIFO policy in the
       wait  list  of  runnable  processes  with  equal  static  priority.   A
       SCHED_FIFO  process  runs until either it is blocked by an I/O request,
       it  is  preempted  by  a  higher  priority   process,   or   it   calls
       sched_yield().

   SCHED_RR: Round Robin scheduling
       SCHED_RR  is  a  simple enhancement of SCHED_FIFO. Everything described
       above for SCHED_FIFO also applies to SCHED_RR, except that each process
       is  only  allowed to run for a maximum time quantum. If a SCHED_RR pro-
       cess has been running for a time period equal to  or  longer  than  the
       time quantum, it will be put at the end of the list for its priority. A
       SCHED_RR process that has been preempted by a higher  priority  process
       and  subsequently  resumes execution as a running process will complete
       the unexpired portion of its round robin time quantum.  The  length  of
       the time quantum can be retrieved using sched_rr_get_interval(2).

   SCHED_OTHER: Default Linux time-sharing scheduling
       SCHED_OTHER  can only be used at static priority 0.  SCHED_OTHER is the
       standard Linux time-sharing scheduler that is  intended  for  all  pro-
       cesses  that  do  not  require special static priority real-time mecha-
       nisms. The process to run is chosen from the  static  priority  0  list
       based  on  a dynamic priority that is determined only inside this list.
       The dynamic priority is based on the nice level (set by nice(2) or set
       priority(2))  and  increased for each time quantum the process is ready
       to run, but denied to run by the scheduler. This ensures fair  progress
       among all SCHED_OTHER processes.

   SCHED_BATCH: Scheduling batch processes
       (Since  Linux 2.6.16.)  SCHED_BATCH can only be used at static priority
       0.  This policy is similar to SCHED_OTHER, except that this policy will
       cause the scheduler to always assume that the process is CPU-intensive.
       Consequently, the scheduler will apply a small  scheduling  penalty  so
       that  this  process is mildy disfavoured in scheduling decisions.  This
       policy is useful for workloads that are  non-interactive,  but  do  not
       want to lower their nice value, and for workloads that want a determin-
       istic scheduling policy without interactivity causing extra preemptions
       (between the workload's tasks).

   Privileges and resource limits
       In  Linux  kernels  before  2.6.12, only privileged (CAP_SYS_NICE) pro-
       cesses can set a non-zero static priority.  The  only  change  that  an
       unprivileged  process  can  make  is to set the SCHED_OTHER policy, and
       this can only be done if  the  effective  user  ID  of  the  caller  of
       sched_setscheduler()  matches the real or effective user ID of the tar-
       get process (i.e., the process specified by pid) whose policy is  being
       changed.

       Since  Linux 2.6.12, the RLIMIT_RTPRIO resource limit defines a ceiling
       on an unprivileged process's priority for the SCHED_RR  and  SCHED_FIFO
       policies.  If an unprivileged process has a non-zero RLIMIT_RTPRIO soft
       limit, then it can change its scheduling policy and  priority,  subject
       to  the  restriction  that the priority cannot be set to a value higher
       than the RLIMIT_RTPRIO soft limit.  If the RLIMIT_RTPRIO soft limit  is
       0, then the only permitted change is to lower the priority.  Subject to
       the same rules,  another  unprivileged  process  can  also  make  these
       changes,  as  long  as  the effective user ID of the process making the
       change matches the real or effective user ID  of  the  target  process.
       See  getrlimit(2) for further information on RLIMIT_RTPRIO.  Privileged
       (CAP_SYS_NICE) processes ignore this limit; as with  older  older  ker-
       nels,  they  can make arbitrary changes to scheduling policy and prior-
       ity.

   Response time
       A blocked high priority process waiting  for  the  I/O  has  a  certain
       response  time  before  it is scheduled again. The device driver writer
       can greatly reduce this response  time  by  using  a  "slow  interrupt"
       interrupt handler.

   Miscellaneous
       Child  processes inherit the scheduling algorithm and parameters across
       a fork().

       Memory locking is usually needed for real-time processes to avoid  pag-
       ing delays, this can be done with mlock() or mlockall().

       As a non-blocking end-less loop in a process scheduled under SCHED_FIFO
       or SCHED_RR will block all processes with  lower  priority  forever,  a
       software  developer should always keep available on the console a shell
       scheduled under a higher static priority than the  tested  application.
       This will allow an emergency kill of tested real-time applications that
       do not block or terminate as expected.

       POSIX systems on which  sched_setscheduler()  and  sched_getscheduler()
       are available define _POSIX_PRIORITY_SCHEDULING in <unistd.h>.


RETURN VALUE

       On   success,   sched_setscheduler()   returns   zero.    On   success,
       sched_getscheduler() returns the policy for the process (a non-negative
       integer).  On error, -1 is returned, and errno is set appropriately.


ERRORS

       EINVAL The  scheduling policy is not one of the recognized policies, or
              the parameter param does not make sense for the policy.

       EPERM  The calling process does not have appropriate privileges.

       ESRCH  The process whose ID is pid could not be found.


CONFORMING TO

       POSIX.1b (formerly POSIX.4).  The SCHED_BATCH policy is Linux specific.


NOTES

       Standard  Linux  is  a  general-purpose operating system and can handle
       background processes,  interactive  applications,  and  soft  real-time
       applications (applications that need to usually meet timing deadlines).
       This man page is directed at these kinds of applications.

       Standard Linux is not designed to support hard real-time  applications,
       that  is,  applications  in  which deadlines (often much shorter than a
       second) must be guaranteed or the system  will  fail  catastrophically.
       Like  all  general-purpose  operating  systems,  Linux  is  designed to
       maximize average case performance instead of  worst  case  performance.
       Linux's  worst  case  performance for interrupt handling is much poorer
       than its average case, its various kernel locks (such as for SMP)  pro-
       duce  long  maximum wait times, and many of its performance improvement
       techniques decrease average time by increasing  worst-case  time.   For
       most  situations, that's what you want, but if you truly are developing
       a hard real-time application, consider using hard real-time  extensions
       to   Linux   such   as   RTLinux   (http://www.rtlinux.org)   or   RTAI
       (http://www.rtai.org) or use  a  different  operating  system  designed
       specifically for hard real-time applications.


SEE ALSO

       getpriority(2),   mlock(2),   mlockall(2),  munlock(2),  munlockall(2),
       nice(2),     sched_get_priority_max(2),      sched_get_priority_min(2),
       sched_getaffinity(2),    sched_getparam(2),   sched_rr_get_interval(2),
       sched_setaffinity(2),  sched_setparam(2),   sched_yield(2),   setprior
       ity(2), capabilities(7)

       Programming  for  the  real  world  -  POSIX.4  by Bill O. Gallmeister,
       O'Reilly & Associates, Inc., ISBN 1-56592-074-0
       IEEE Std 1003.1b-1993 (POSIX.1b standard)
       ISO/IEC 9945-1:1996 - This is the new 1996 revision  of  POSIX.1  which
       contains   in   one   single  standard  POSIX.1(1990),  POSIX.1b(1993),
       POSIX.1c(1995), and POSIX.1i(1995).



Linux 2.6.16                      2006-03-23                   SETSCHEDULER(2)


Man(1) output converted with man2html and wrapped by fishsponge

This page was generated on Tue Feb 13 02:17:35 GMT 2007

Your favourite pages:

No pages logged yet.
Trying to save cookie...

Top 10 most popular pages:

sqlite3 man page (5323 hits)
(openSUSE 10.2)

svn man page (5162 hits)
(FreeBSD 6.2)

adv_cap_autoneg man page (4865 hits)
(Solaris 10 11_06)

CPAN man page (4602 hits)
(Suse Linux 10.1)

ssh man page (4337 hits)
(Suse Linux 10.1)

ssh-socks5-proxy-connect man page (2839 hits)
(Solaris 10 11_06)

netcat man page (2687 hits)
(Suse Linux 10.1)

pprosetup man page (2472 hits)
(Solaris 10 11_06)

startproc man page (2450 hits)
(Suse Linux 10.1)

signal man page (2393 hits)
(Suse Linux 10.1)

Useful Links

Go Back

Visitor Statistics


Valid XHTML 1.0 Transitional     Valid CSS!

Partners: Cambridge Plus :: Pyrenees Food :: Prototype PCB Etching :: <Link Available>
Unix Man Pages / Linux Man Pages :: HiFi Forum :: SIP VoIP Phone & Provider Reviews :: UNIX/Linux Forum Archives

More info on advertising on Unix/Linux Forum