diff --git a/Doc/Makefile b/Doc/Makefile index 12851f077a0..4881c3f1675 100644 --- a/Doc/Makefile +++ b/Doc/Makefile @@ -112,7 +112,7 @@ LIBFILES = lib.tex \ libcd.tex libfl.tex libfm.tex libgl.tex libimgfile.tex libsun.tex \ libxdrlib.tex libimghdr.tex \ librestricted.tex librexec.tex libbastion.tex \ - libformatter.tex liboperator.tex libsoundex.tex + libformatter.tex liboperator.tex libsoundex.tex libresource.tex # Library document lib.dvi: $(LIBFILES) diff --git a/Doc/lib.tex b/Doc/lib.tex index c6d203d5998..db027a9bae0 100644 --- a/Doc/lib.tex +++ b/Doc/lib.tex @@ -125,6 +125,7 @@ to Python and how to embed it in other applications. \input{libtermios} \input{libfcntl} \input{libposixfile} +\input{libresource} \input{libsyslog} \input{libpdb} % The Python Debugger diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex index c6d203d5998..db027a9bae0 100644 --- a/Doc/lib/lib.tex +++ b/Doc/lib/lib.tex @@ -125,6 +125,7 @@ to Python and how to embed it in other applications. \input{libtermios} \input{libfcntl} \input{libposixfile} +\input{libresource} \input{libsyslog} \input{libpdb} % The Python Debugger diff --git a/Doc/lib/libresource.tex b/Doc/lib/libresource.tex new file mode 100644 index 00000000000..ff78025ca38 --- /dev/null +++ b/Doc/lib/libresource.tex @@ -0,0 +1,131 @@ +\section{Built-in Module \sectcode{resource}} + +\bimodindex{resource} +This module provides basic mechanisms for measuring and controlling +system resources utilized by a program. + +Symbolic constants are used to specify particular system resources and +to request usage information about either the current process or its +children. + +Resources usage can be limited using the \code{setrlimit} function +described below. Each resource is controlled by a pair of limits: a +soft limit and a hard limit. The soft limit is the current limit, and +may be lowered or raised by a process over time. The soft limit can +never exceed the hard limit. The hard limit can be lowered to any +value greater than the soft limit, but not raised. (Only process with +the effective UID of the super-user can raise a hard limit). + +The specific resources that can be limited are system dependent. They +are described in the \code{getrlimit} man page. Typical resources +include: + +\begin{description} + +\item[RLIMIT_CORE] +The maximum size (in bytes) of a core file that the current process +can create. + +\item[RLIMIT_CPU] +The maximum amount of CPU time (in seconds) that a process can use. If +this limit is exceeded, a \code{SIGXCPU} signal is sent to the +process. (See the \code{signal} module documentation for information +about how to catch this signal and do something useful, e.g. flush +open files to disk.) + +\end{description} + +\begin{datadesc}{RLIMIT_*} + These symbols define resources whose consumption can be controlled + using the \code{setrlimit} and \code{getrlimit} functions defined + below. The values of these symbols are exactly the constants used + by C programs. + + The \UNIX{} man page for \file{getrlimit} lists the available + resources. Note that not all systems use the same symbol or same + value to denote the same resource. +\end{datadesc} + +\begin{datadesc}{RUSAGE_*} + These symbols are passed to the \code{getrusage} function to specify + whether usage information is being request for the current process, + \code{RUSAGE_SELF} or its child processes \code{RUSAGE_CHILDREN}. On + some system, \code{RUSAGE_BOTH} requests information for both. +\end{datadesc} + +\begin{datadesc}{error} + The functions described below may raise this error if the underlying + system call failures unexpectedly. +\end{datadesc} + +The resource module defines the following functions: + +\begin{funcdesc}{getrusage}{who} + This function returns a large tuple that describes the resources + consumed by either the current process or its children, as specified + by the \var{who} parameter. The elements of the return value each + describe how a particular system resource has been used, e.g. amount + of time spent running is user mode or number of times the process was + swapped out of main memory. Some values are dependent on the clock + tick internal, e.g. the amount of memory the process is using. + + The first two elements of the return value are floating point values + representing the amount of time spent executing in user mode and the + amount of time spent executing in system mode, respectively. The + remaining values are integers. Consult the \code{getrusage} man page + for detailed information about these values. A brief summary is + presented here: + +\begin{tabular}{rl} + \emph{offset} & \emph{resource} \\ + 0 & time in user mode (float) \\ + 1 & time in system mode (float) \\ + 2 & maximum resident set size \\ + 3 & shared memory size \\ + 4 & unshared memory size \\ + 5 & unshared stack size \\ + 6 & page faults not requiring I/O \\ + 7 & page faults requiring I/O \\ + 8 & number of swap outs \\ + 9 & block input operations \\ + 10 & block output operations \\ + 11 & messages sent \\ + 12 & messages received \\ + 13 & signals received \\ + 14 & voluntary context switches \\ + 15 & involuntary context switches \\ +\end{tabular} + + This function will raise a ValueError if an invalid \var{who} + parameter is specified. It may also raise a \code{resource.error} + exception in unusual circumstances. +\end{funcdesc} + +\begin{funcdesc}{getpagesize}{} + Returns the number of bytes in a system page. (This need not be the + same as the hardware page size.) This function is useful for + determining the number of bytes of memory a process is using. The + third element of the tuple returned by \code{getrusage} describes + memory usage in pages; multiplying by page size produces number of + bytes. +\end{funcdesc} + +\begin{funcdesc}{getrlimit}{resource} + Returns a tuple \code{(\var{soft}, \var{hard})} with the current + soft and hard limits of \var{resource}. Raises ValueError if + an invalid resource is specified, or \code{resource.error} if the + underyling system call fails unexpectedly. +\end{funcdesc} + +\begin{funcdesc}{setrlimit}{resource\, limits} + Sets new limits of consumption of \var{resource}. The \var{limits} + argument must be a tuple \code{(\var{soft}, \var{hard})} of two + integers describing the new limits. A value of -1 can be used to + specify the maximum possible upper limit. + + Raises ValueError if an invalid resource is specified, if the new + soft limit exceeds the hard limit, or if a process tries to raise its + hard limit (unless the process has an effective UID of + super-user). Can also raise a \code{resource.error} if the + underyling system call fails. +\end{funcdesc} diff --git a/Doc/libresource.tex b/Doc/libresource.tex new file mode 100644 index 00000000000..ff78025ca38 --- /dev/null +++ b/Doc/libresource.tex @@ -0,0 +1,131 @@ +\section{Built-in Module \sectcode{resource}} + +\bimodindex{resource} +This module provides basic mechanisms for measuring and controlling +system resources utilized by a program. + +Symbolic constants are used to specify particular system resources and +to request usage information about either the current process or its +children. + +Resources usage can be limited using the \code{setrlimit} function +described below. Each resource is controlled by a pair of limits: a +soft limit and a hard limit. The soft limit is the current limit, and +may be lowered or raised by a process over time. The soft limit can +never exceed the hard limit. The hard limit can be lowered to any +value greater than the soft limit, but not raised. (Only process with +the effective UID of the super-user can raise a hard limit). + +The specific resources that can be limited are system dependent. They +are described in the \code{getrlimit} man page. Typical resources +include: + +\begin{description} + +\item[RLIMIT_CORE] +The maximum size (in bytes) of a core file that the current process +can create. + +\item[RLIMIT_CPU] +The maximum amount of CPU time (in seconds) that a process can use. If +this limit is exceeded, a \code{SIGXCPU} signal is sent to the +process. (See the \code{signal} module documentation for information +about how to catch this signal and do something useful, e.g. flush +open files to disk.) + +\end{description} + +\begin{datadesc}{RLIMIT_*} + These symbols define resources whose consumption can be controlled + using the \code{setrlimit} and \code{getrlimit} functions defined + below. The values of these symbols are exactly the constants used + by C programs. + + The \UNIX{} man page for \file{getrlimit} lists the available + resources. Note that not all systems use the same symbol or same + value to denote the same resource. +\end{datadesc} + +\begin{datadesc}{RUSAGE_*} + These symbols are passed to the \code{getrusage} function to specify + whether usage information is being request for the current process, + \code{RUSAGE_SELF} or its child processes \code{RUSAGE_CHILDREN}. On + some system, \code{RUSAGE_BOTH} requests information for both. +\end{datadesc} + +\begin{datadesc}{error} + The functions described below may raise this error if the underlying + system call failures unexpectedly. +\end{datadesc} + +The resource module defines the following functions: + +\begin{funcdesc}{getrusage}{who} + This function returns a large tuple that describes the resources + consumed by either the current process or its children, as specified + by the \var{who} parameter. The elements of the return value each + describe how a particular system resource has been used, e.g. amount + of time spent running is user mode or number of times the process was + swapped out of main memory. Some values are dependent on the clock + tick internal, e.g. the amount of memory the process is using. + + The first two elements of the return value are floating point values + representing the amount of time spent executing in user mode and the + amount of time spent executing in system mode, respectively. The + remaining values are integers. Consult the \code{getrusage} man page + for detailed information about these values. A brief summary is + presented here: + +\begin{tabular}{rl} + \emph{offset} & \emph{resource} \\ + 0 & time in user mode (float) \\ + 1 & time in system mode (float) \\ + 2 & maximum resident set size \\ + 3 & shared memory size \\ + 4 & unshared memory size \\ + 5 & unshared stack size \\ + 6 & page faults not requiring I/O \\ + 7 & page faults requiring I/O \\ + 8 & number of swap outs \\ + 9 & block input operations \\ + 10 & block output operations \\ + 11 & messages sent \\ + 12 & messages received \\ + 13 & signals received \\ + 14 & voluntary context switches \\ + 15 & involuntary context switches \\ +\end{tabular} + + This function will raise a ValueError if an invalid \var{who} + parameter is specified. It may also raise a \code{resource.error} + exception in unusual circumstances. +\end{funcdesc} + +\begin{funcdesc}{getpagesize}{} + Returns the number of bytes in a system page. (This need not be the + same as the hardware page size.) This function is useful for + determining the number of bytes of memory a process is using. The + third element of the tuple returned by \code{getrusage} describes + memory usage in pages; multiplying by page size produces number of + bytes. +\end{funcdesc} + +\begin{funcdesc}{getrlimit}{resource} + Returns a tuple \code{(\var{soft}, \var{hard})} with the current + soft and hard limits of \var{resource}. Raises ValueError if + an invalid resource is specified, or \code{resource.error} if the + underyling system call fails unexpectedly. +\end{funcdesc} + +\begin{funcdesc}{setrlimit}{resource\, limits} + Sets new limits of consumption of \var{resource}. The \var{limits} + argument must be a tuple \code{(\var{soft}, \var{hard})} of two + integers describing the new limits. A value of -1 can be used to + specify the maximum possible upper limit. + + Raises ValueError if an invalid resource is specified, if the new + soft limit exceeds the hard limit, or if a process tries to raise its + hard limit (unless the process has an effective UID of + super-user). Can also raise a \code{resource.error} if the + underyling system call fails. +\end{funcdesc}