1*1eaf0ac3Slogwang /*- 2*1eaf0ac3Slogwang * Copyright (c) 1982, 1986, 1993 3*1eaf0ac3Slogwang * The Regents of the University of California. All rights reserved. 4*1eaf0ac3Slogwang * 5*1eaf0ac3Slogwang * Redistribution and use in source and binary forms, with or without 6*1eaf0ac3Slogwang * modification, are permitted provided that the following conditions 7*1eaf0ac3Slogwang * are met: 8*1eaf0ac3Slogwang * 1. Redistributions of source code must retain the above copyright 9*1eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer. 10*1eaf0ac3Slogwang * 2. Redistributions in binary form must reproduce the above copyright 11*1eaf0ac3Slogwang * notice, this list of conditions and the following disclaimer in the 12*1eaf0ac3Slogwang * documentation and/or other materials provided with the distribution. 13*1eaf0ac3Slogwang * 4. Neither the name of the University nor the names of its contributors 14*1eaf0ac3Slogwang * may be used to endorse or promote products derived from this software 15*1eaf0ac3Slogwang * without specific prior written permission. 16*1eaf0ac3Slogwang * 17*1eaf0ac3Slogwang * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 18*1eaf0ac3Slogwang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*1eaf0ac3Slogwang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*1eaf0ac3Slogwang * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 21*1eaf0ac3Slogwang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*1eaf0ac3Slogwang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23*1eaf0ac3Slogwang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*1eaf0ac3Slogwang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25*1eaf0ac3Slogwang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26*1eaf0ac3Slogwang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27*1eaf0ac3Slogwang * SUCH DAMAGE. 28*1eaf0ac3Slogwang * 29*1eaf0ac3Slogwang * @(#)resource.h 8.4 (Berkeley) 1/9/95 30*1eaf0ac3Slogwang * $FreeBSD$ 31*1eaf0ac3Slogwang */ 32*1eaf0ac3Slogwang 33*1eaf0ac3Slogwang #ifndef _SYS_RESOURCE_H_ 34*1eaf0ac3Slogwang #define _SYS_RESOURCE_H_ 35*1eaf0ac3Slogwang 36*1eaf0ac3Slogwang #include <sys/cdefs.h> 37*1eaf0ac3Slogwang #include <sys/_types.h> 38*1eaf0ac3Slogwang 39*1eaf0ac3Slogwang #ifndef _ID_T_DECLARED 40*1eaf0ac3Slogwang typedef __id_t id_t; 41*1eaf0ac3Slogwang #define _ID_T_DECLARED 42*1eaf0ac3Slogwang #endif 43*1eaf0ac3Slogwang 44*1eaf0ac3Slogwang #ifndef _RLIM_T_DECLARED 45*1eaf0ac3Slogwang typedef __rlim_t rlim_t; 46*1eaf0ac3Slogwang #define _RLIM_T_DECLARED 47*1eaf0ac3Slogwang #endif 48*1eaf0ac3Slogwang 49*1eaf0ac3Slogwang /* 50*1eaf0ac3Slogwang * Process priority specifications to get/setpriority. 51*1eaf0ac3Slogwang */ 52*1eaf0ac3Slogwang #define PRIO_MIN -20 53*1eaf0ac3Slogwang #define PRIO_MAX 20 54*1eaf0ac3Slogwang 55*1eaf0ac3Slogwang #define PRIO_PROCESS 0 56*1eaf0ac3Slogwang #define PRIO_PGRP 1 57*1eaf0ac3Slogwang #define PRIO_USER 2 58*1eaf0ac3Slogwang 59*1eaf0ac3Slogwang /* 60*1eaf0ac3Slogwang * Resource utilization information. 61*1eaf0ac3Slogwang * 62*1eaf0ac3Slogwang * All fields are only modified by curthread and 63*1eaf0ac3Slogwang * no locks are required to read. 64*1eaf0ac3Slogwang */ 65*1eaf0ac3Slogwang 66*1eaf0ac3Slogwang #define RUSAGE_SELF 0 67*1eaf0ac3Slogwang #define RUSAGE_CHILDREN -1 68*1eaf0ac3Slogwang #define RUSAGE_THREAD 1 69*1eaf0ac3Slogwang 70*1eaf0ac3Slogwang struct rusage { 71*1eaf0ac3Slogwang struct timeval ru_utime; /* user time used */ 72*1eaf0ac3Slogwang struct timeval ru_stime; /* system time used */ 73*1eaf0ac3Slogwang long ru_maxrss; /* max resident set size */ 74*1eaf0ac3Slogwang #define ru_first ru_ixrss 75*1eaf0ac3Slogwang long ru_ixrss; /* integral shared memory size */ 76*1eaf0ac3Slogwang long ru_idrss; /* integral unshared data " */ 77*1eaf0ac3Slogwang long ru_isrss; /* integral unshared stack " */ 78*1eaf0ac3Slogwang long ru_minflt; /* page reclaims */ 79*1eaf0ac3Slogwang long ru_majflt; /* page faults */ 80*1eaf0ac3Slogwang long ru_nswap; /* swaps */ 81*1eaf0ac3Slogwang long ru_inblock; /* block input operations */ 82*1eaf0ac3Slogwang long ru_oublock; /* block output operations */ 83*1eaf0ac3Slogwang long ru_msgsnd; /* messages sent */ 84*1eaf0ac3Slogwang long ru_msgrcv; /* messages received */ 85*1eaf0ac3Slogwang long ru_nsignals; /* signals received */ 86*1eaf0ac3Slogwang long ru_nvcsw; /* voluntary context switches */ 87*1eaf0ac3Slogwang long ru_nivcsw; /* involuntary " */ 88*1eaf0ac3Slogwang #define ru_last ru_nivcsw 89*1eaf0ac3Slogwang }; 90*1eaf0ac3Slogwang 91*1eaf0ac3Slogwang #if __BSD_VISIBLE 92*1eaf0ac3Slogwang struct __wrusage { 93*1eaf0ac3Slogwang struct rusage wru_self; 94*1eaf0ac3Slogwang struct rusage wru_children; 95*1eaf0ac3Slogwang }; 96*1eaf0ac3Slogwang #endif 97*1eaf0ac3Slogwang 98*1eaf0ac3Slogwang /* 99*1eaf0ac3Slogwang * Resource limits 100*1eaf0ac3Slogwang */ 101*1eaf0ac3Slogwang #define RLIMIT_CPU 0 /* maximum cpu time in seconds */ 102*1eaf0ac3Slogwang #define RLIMIT_FSIZE 1 /* maximum file size */ 103*1eaf0ac3Slogwang #define RLIMIT_DATA 2 /* data size */ 104*1eaf0ac3Slogwang #define RLIMIT_STACK 3 /* stack size */ 105*1eaf0ac3Slogwang #define RLIMIT_CORE 4 /* core file size */ 106*1eaf0ac3Slogwang #define RLIMIT_RSS 5 /* resident set size */ 107*1eaf0ac3Slogwang #define RLIMIT_MEMLOCK 6 /* locked-in-memory address space */ 108*1eaf0ac3Slogwang #define RLIMIT_NPROC 7 /* number of processes */ 109*1eaf0ac3Slogwang #define RLIMIT_NOFILE 8 /* number of open files */ 110*1eaf0ac3Slogwang #define RLIMIT_SBSIZE 9 /* maximum size of all socket buffers */ 111*1eaf0ac3Slogwang #define RLIMIT_VMEM 10 /* virtual process size (incl. mmap) */ 112*1eaf0ac3Slogwang #define RLIMIT_AS RLIMIT_VMEM /* standard name for RLIMIT_VMEM */ 113*1eaf0ac3Slogwang #define RLIMIT_NPTS 11 /* pseudo-terminals */ 114*1eaf0ac3Slogwang #define RLIMIT_SWAP 12 /* swap used */ 115*1eaf0ac3Slogwang #define RLIMIT_KQUEUES 13 /* kqueues allocated */ 116*1eaf0ac3Slogwang #define RLIMIT_UMTXP 14 /* process-shared umtx */ 117*1eaf0ac3Slogwang 118*1eaf0ac3Slogwang #define RLIM_NLIMITS 15 /* number of resource limits */ 119*1eaf0ac3Slogwang 120*1eaf0ac3Slogwang #define RLIM_INFINITY ((rlim_t)(((__uint64_t)1 << 63) - 1)) 121*1eaf0ac3Slogwang /* XXX Missing: RLIM_SAVED_MAX, RLIM_SAVED_CUR */ 122*1eaf0ac3Slogwang 123*1eaf0ac3Slogwang 124*1eaf0ac3Slogwang /* 125*1eaf0ac3Slogwang * Resource limit string identifiers 126*1eaf0ac3Slogwang */ 127*1eaf0ac3Slogwang 128*1eaf0ac3Slogwang #ifdef _RLIMIT_IDENT 129*1eaf0ac3Slogwang static const char *rlimit_ident[RLIM_NLIMITS] = { 130*1eaf0ac3Slogwang "cpu", 131*1eaf0ac3Slogwang "fsize", 132*1eaf0ac3Slogwang "data", 133*1eaf0ac3Slogwang "stack", 134*1eaf0ac3Slogwang "core", 135*1eaf0ac3Slogwang "rss", 136*1eaf0ac3Slogwang "memlock", 137*1eaf0ac3Slogwang "nproc", 138*1eaf0ac3Slogwang "nofile", 139*1eaf0ac3Slogwang "sbsize", 140*1eaf0ac3Slogwang "vmem", 141*1eaf0ac3Slogwang "npts", 142*1eaf0ac3Slogwang "swap", 143*1eaf0ac3Slogwang "kqueues", 144*1eaf0ac3Slogwang "umtx", 145*1eaf0ac3Slogwang }; 146*1eaf0ac3Slogwang #endif 147*1eaf0ac3Slogwang 148*1eaf0ac3Slogwang struct rlimit { 149*1eaf0ac3Slogwang rlim_t rlim_cur; /* current (soft) limit */ 150*1eaf0ac3Slogwang rlim_t rlim_max; /* maximum value for rlim_cur */ 151*1eaf0ac3Slogwang }; 152*1eaf0ac3Slogwang 153*1eaf0ac3Slogwang #if __BSD_VISIBLE 154*1eaf0ac3Slogwang 155*1eaf0ac3Slogwang struct orlimit { 156*1eaf0ac3Slogwang __int32_t rlim_cur; /* current (soft) limit */ 157*1eaf0ac3Slogwang __int32_t rlim_max; /* maximum value for rlim_cur */ 158*1eaf0ac3Slogwang }; 159*1eaf0ac3Slogwang 160*1eaf0ac3Slogwang struct loadavg { 161*1eaf0ac3Slogwang __fixpt_t ldavg[3]; 162*1eaf0ac3Slogwang long fscale; 163*1eaf0ac3Slogwang }; 164*1eaf0ac3Slogwang 165*1eaf0ac3Slogwang #define CP_USER 0 166*1eaf0ac3Slogwang #define CP_NICE 1 167*1eaf0ac3Slogwang #define CP_SYS 2 168*1eaf0ac3Slogwang #define CP_INTR 3 169*1eaf0ac3Slogwang #define CP_IDLE 4 170*1eaf0ac3Slogwang #define CPUSTATES 5 171*1eaf0ac3Slogwang 172*1eaf0ac3Slogwang #endif /* __BSD_VISIBLE */ 173*1eaf0ac3Slogwang 174*1eaf0ac3Slogwang #ifdef _KERNEL 175*1eaf0ac3Slogwang 176*1eaf0ac3Slogwang extern struct loadavg averunnable; 177*1eaf0ac3Slogwang void read_cpu_time(long *cp_time); /* Writes array of CPUSTATES */ 178*1eaf0ac3Slogwang 179*1eaf0ac3Slogwang #else 180*1eaf0ac3Slogwang 181*1eaf0ac3Slogwang __BEGIN_DECLS 182*1eaf0ac3Slogwang /* XXX 2nd arg to [gs]etpriority() should be an id_t */ 183*1eaf0ac3Slogwang int getpriority(int, int); 184*1eaf0ac3Slogwang int getrlimit(int, struct rlimit *); 185*1eaf0ac3Slogwang int getrusage(int, struct rusage *); 186*1eaf0ac3Slogwang int setpriority(int, int, int); 187*1eaf0ac3Slogwang int setrlimit(int, const struct rlimit *); 188*1eaf0ac3Slogwang __END_DECLS 189*1eaf0ac3Slogwang 190*1eaf0ac3Slogwang #endif /* _KERNEL */ 191*1eaf0ac3Slogwang #endif /* !_SYS_RESOURCE_H_ */ 192