| 
									
										
										
										
											1998-08-10 19:42:37 +00:00
										 |  |  | \section{\module{resource} --- | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  |          Resource usage information} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  | \declaremodule{builtin}{resource} | 
					
						
							| 
									
										
										
										
											1999-03-02 17:03:42 +00:00
										 |  |  |   \platform{Unix} | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  | \modulesynopsis{An interface to provide resource usage information on | 
					
						
							|  |  |  |   the current process.} | 
					
						
							| 
									
										
										
										
											2001-10-04 20:40:07 +00:00
										 |  |  | \moduleauthor{Jeremy Hylton}{jeremy@alum.mit.edu} | 
					
						
							|  |  |  | \sectionauthor{Jeremy Hylton}{jeremy@alum.mit.edu} | 
					
						
							| 
									
										
										
										
											1998-07-23 17:59:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | children. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | A single exception is defined for errors: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{error} | 
					
						
							|  |  |  |   The functions described below may raise this error if the underlying | 
					
						
							|  |  |  |   system call failures unexpectedly. | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{Resource Limits} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  | Resources usage can be limited using the \function{setrlimit()} function | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | value greater than the soft limit, but not raised. (Only processes with | 
					
						
							|  |  |  | the effective UID of the super-user can raise a hard limit.) | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | The specific resources that can be limited are system dependent. They | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  | are described in the \manpage{getrlimit}{2} man page.  The resources | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | listed below are supported when the underlying operating system | 
					
						
							|  |  |  | supports them; resources which cannot be checked or controlled by the | 
					
						
							|  |  |  | operating system are not defined in this module for those platforms. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{funcdesc}{getrlimit}{resource} | 
					
						
							|  |  |  |   Returns a tuple \code{(\var{soft}, \var{hard})} with the current | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   soft and hard limits of \var{resource}. Raises \exception{ValueError} if | 
					
						
							|  |  |  |   an invalid resource is specified, or \exception{error} if the | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   underyling system call fails unexpectedly. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \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 \code{-1} can be used to | 
					
						
							|  |  |  |   specify the maximum possible upper limit. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   Raises \exception{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 \exception{error} if the underyling | 
					
						
							|  |  |  |   system call fails. | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | These symbols define resources whose consumption can be controlled | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  | using the \function{setrlimit()} and \function{getrlimit()} functions | 
					
						
							|  |  |  | described below. The values of these symbols are exactly the constants | 
					
						
							|  |  |  | used by \C{} programs. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  | The \UNIX{} man page for \manpage{getrlimit}{2} lists the available | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | resources.  Note that not all systems use the same symbol or same | 
					
						
							| 
									
										
										
										
											2001-10-22 14:18:23 +00:00
										 |  |  | value to denote the same resource.  This module does not attempt to | 
					
						
							|  |  |  | mask platform differences --- symbols not defined for a platform will | 
					
						
							|  |  |  | not be available from this module on that platform. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RLIMIT_CORE} | 
					
						
							|  |  |  |   The maximum size (in bytes) of a core file that the current process | 
					
						
							|  |  |  |   can create.  This may result in the creation of a partial core file | 
					
						
							|  |  |  |   if a larger core would be required to contain the entire process | 
					
						
							|  |  |  |   image. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RLIMIT_CPU} | 
					
						
							| 
									
										
										
										
											2001-07-14 02:50:55 +00:00
										 |  |  |   The maximum amount of processor time (in seconds) that a process can | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   use. If this limit is exceeded, a \constant{SIGXCPU} signal is sent to | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  |   the process. (See the \refmodule{signal} module documentation for | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   information about how to catch this signal and do something useful, | 
					
						
							|  |  |  |   e.g. flush open files to disk.) | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RLIMIT_FSIZE} | 
					
						
							|  |  |  |   The maximum size of a file which the process may create.  This only | 
					
						
							|  |  |  |   affects the stack of the main thread in a multi-threaded process. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_DATA} | 
					
						
							|  |  |  |   The maximum size (in bytes) of the process's heap. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_STACK} | 
					
						
							|  |  |  |   The maximum size (in bytes) of the call stack for the current | 
					
						
							|  |  |  |   process. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_RSS} | 
					
						
							|  |  |  |   The maximum resident set size that should be made available to the | 
					
						
							|  |  |  |   process. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_NPROC} | 
					
						
							|  |  |  |   The maximum number of processes the current process may create. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RLIMIT_NOFILE} | 
					
						
							|  |  |  |   The maximum number of open file descriptors for the current | 
					
						
							|  |  |  |   process. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_OFILE} | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   The BSD name for \constant{RLIMIT_NOFILE}. | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_MEMLOC} | 
					
						
							|  |  |  |   The maximm address space which may be locked in memory. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_VMEM} | 
					
						
							|  |  |  |   The largest area of mapped memory which the process may occupy. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RLIMIT_AS} | 
					
						
							|  |  |  |   The maximum area (in bytes) of address space which may be taken by | 
					
						
							|  |  |  |   the process. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \subsection{Resource Usage} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-08 21:28:20 +00:00
										 |  |  | These functions are used to retrieve resource usage information: | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{getrusage}{who} | 
					
						
							| 
									
										
										
										
											2002-04-08 21:28:20 +00:00
										 |  |  |   This function returns an object that describes the resources | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  |   consumed by either the current process or its children, as specified | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   by the \var{who} parameter.  The \var{who} parameter should be | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  |   specified using one of the \constant{RUSAGE_*} constants described | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   below. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-08 21:28:20 +00:00
										 |  |  |   The fields 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. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   For backward compatibility, the return value is also accessible as | 
					
						
							|  |  |  |   a tuple of 16 elements. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   The fields \member{ru_utime} and \member{ru_stime} 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 | 
					
						
							|  |  |  |   \manpage{getrusage}{2} man page for detailed information about these | 
					
						
							|  |  |  |   values. A brief summary is presented here: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{tableiii}{r|l|l}{code}{Index}{Field}{Resource} | 
					
						
							|  |  |  |   \lineiii{0}{\member{ru_utime}}{time in user mode (float)} | 
					
						
							|  |  |  |   \lineiii{1}{\member{ru_stime}}{time in system mode (float)} | 
					
						
							|  |  |  |   \lineiii{2}{\member{ru_maxrss}}{maximum resident set size} | 
					
						
							|  |  |  |   \lineiii{3}{\member{ru_ixrss}}{shared memory size} | 
					
						
							|  |  |  |   \lineiii{4}{\member{ru_idrss}}{unshared memory size} | 
					
						
							|  |  |  |   \lineiii{5}{\member{ru_isrss}}{unshared stack size} | 
					
						
							|  |  |  |   \lineiii{6}{\member{ru_minflt}}{page faults not requiring I/O} | 
					
						
							|  |  |  |   \lineiii{7}{\member{ru_majflt}}{page faults requiring I/O} | 
					
						
							|  |  |  |   \lineiii{8}{\member{ru_nswap}}{number of swap outs} | 
					
						
							|  |  |  |   \lineiii{9}{\member{ru_inblock}}{block input operations} | 
					
						
							|  |  |  |   \lineiii{10}{\member{ru_oublock}}{block output operations} | 
					
						
							|  |  |  |   \lineiii{11}{\member{ru_msgsnd}}{messages sent} | 
					
						
							|  |  |  |   \lineiii{12}{\member{ru_msgrcv}}{messages received} | 
					
						
							|  |  |  |   \lineiii{13}{\member{ru_nsignals}}{signals received} | 
					
						
							|  |  |  |   \lineiii{14}{\member{ru_nvcsw}}{voluntary context switches} | 
					
						
							|  |  |  |   \lineiii{15}{\member{ru_nivcsw}}{involuntary context switches} | 
					
						
							|  |  |  | \end{tableiii} | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   This function will raise a \exception{ValueError} if an invalid | 
					
						
							|  |  |  |   \var{who} parameter is specified. It may also raise | 
					
						
							|  |  |  |   \exception{error} exception in unusual circumstances. | 
					
						
							| 
									
										
										
										
											2002-04-08 21:28:20 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   \versionchanged[Added access to values as attributes of the | 
					
						
							|  |  |  |   returned object]{2.3} | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | \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 | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   third element of the tuple returned by \function{getrusage()} describes | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  |   memory usage in pages; multiplying by page size produces number of | 
					
						
							|  |  |  |   bytes.  | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1999-03-02 16:37:17 +00:00
										 |  |  | The following \constant{RUSAGE_*} symbols are passed to the | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  | \function{getrusage()} function to specify which processes information | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | should be provided for. | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RUSAGE_SELF} | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   \constant{RUSAGE_SELF} should be used to | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   request information pertaining only to the process itself. | 
					
						
							|  |  |  | \end{datadesc} | 
					
						
							| 
									
										
										
										
											1996-12-18 18:37:05 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \begin{datadesc}{RUSAGE_CHILDREN} | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   Pass to \function{getrusage()} to request resource information for | 
					
						
							|  |  |  |   child processes of the calling process. | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  | \end{datadesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{datadesc}{RUSAGE_BOTH} | 
					
						
							| 
									
										
										
										
											1998-03-11 06:18:15 +00:00
										 |  |  |   Pass to \function{getrusage()} to request resources consumed by both | 
					
						
							|  |  |  |   the current process and child processes.  May not be available on all | 
					
						
							| 
									
										
										
										
											1997-12-06 07:25:41 +00:00
										 |  |  |   systems. | 
					
						
							|  |  |  | \end{datadesc} |