sched_setscheduler - phpMan

Command: man perldoc info search(apropos)  


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



NAME
       sched_setscheduler,  sched_getscheduler  - set and get scheduling algorithm/parame-
       ters

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 following 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 exe-
       cuted by the CPU next. The Linux scheduler offers three different scheduling  poli-
       cies,  one for normal processes and two for real-time applications. A static prior-
       ity 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 exe-
       cution.

       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.1-2001 conforming systems.

       All scheduling is preemptive: If a process with a higher static priority 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 pro-
       cesses with equal static priority.

   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 following 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
       currently  running  process  if  it has the same priority.  (POSIX.1-2001 specifies
       that  the  process  should  go  to  the  end  of  the  list.)   A  process  calling
       sched_yield()  will be put at the end of the list. No other events will move a pro-
       cess 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 process 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 pri-
       ority 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 quan-
       tum 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 processes that do not require
       special static priority real-time mechanisms. 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 mildly disfavoured in
       scheduling  decisions.   This  policy is useful for workloads that are non-interac-
       tive, but do not want to lower their nice value, and  for  workloads  that  want  a
       deterministic  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) processes 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
       target 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  pri-
       ority.  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 kernels, they can make arbitrary changes to scheduling
       policy and priority.

   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().
       The scheduling algorithm and parameters are preserved across execve(2).

       Memory  locking  is  usually needed for real-time processes to avoid paging 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 prior-
       ity  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 parame-
              ter 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.1-2001.  The SCHED_BATCH policy is Linux specific.

NOTES
       Standard Linux is a general-purpose operating system and can handle background pro-
       cesses,  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  guaran-
       teed  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)  produce
       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, con-
       sider   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_set-
       param(2), sched_yield(2), setpriority(2), capabilities(7)

       Programming  for  the real world - POSIX.4 by Bill O. Gallmeister, O'Reilly & Asso-
       ciates, Inc., ISBN 1-56592-074-0



Linux 2.6.16                      2006-03-23                   SETSCHEDULER(2)

Generated by $Id: phpMan.php,v 4.49 2006/02/26 13:18:18 chedong Exp $ Author: Che Dong
On Apache/1.3.37 (Unix) mod_throttle/3.1.2 FrontPage/5.0.2.2635 mod_psoft_traffic/0.2 mod_ssl/2.8.28 OpenSSL/0.9.8b
Under GNU General Public License
2009-01-07 20:27 @38.103.63.55 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html)
Valid XHTML 1.0!Valid CSS!