4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
32 #include <sys/types.h>
34 #include <sys/param.h>
42 #define ZS_IPTYPE_SHARED 1
43 #define ZS_IPTYPE_EXCLUSIVE 2
45 #define ZS_CPUTYPE_DEFAULT_PSET 1
46 #define ZS_CPUTYPE_POOL_PSET 2
47 #define ZS_CPUTYPE_PSRSET_PSET 3
48 #define ZS_CPUTYPE_DEDICATED 4
51 #define ZS_LIMIT_NONE (UINT64_MAX)
52 #define ZS_PCT_NONE (UINT_MAX)
53 #define ZS_SHARES_UNLIMITED (UINT16_MAX)
55 #define ZS_ZONENAME_MAX ZONENAME_MAX
56 #define ZS_PSETNAME_MAX (1024 + 1)
57 #define ZS_POOLNAME_MAX (1024 + 1)
59 #define ZS_RESOURCE_TYPE_TIME 1
60 #define ZS_RESOURCE_TYPE_COUNT 2
61 #define ZS_RESOURCE_TYPE_BYTES 3
63 #define ZS_LIMIT_TYPE_TIME 1
64 #define ZS_LIMIT_TYPE_COUNT 2
65 #define ZS_LIMIT_TYPE_BYTES 3
67 #define ZS_PROP_TYPE_STRING 1
68 #define ZS_PROP_TYPE_TIME 2
69 #define ZS_PROP_TYPE_UINT64 3
70 #define ZS_PROP_TYPE_INT64 4
71 #define ZS_PROP_TYPE_UINT 5
72 #define ZS_PROP_TYPE_INT 6
73 #define ZS_PROP_TYPE_DOUBLE 7
75 #define ZS_SCHED_TS 0x1
76 #define ZS_SCHED_IA 0x2
77 #define ZS_SCHED_RT 0x4
78 #define ZS_SCHED_FX 0x8
79 #define ZS_SCHED_FX_60 0x10
80 #define ZS_SCHED_FSS 0x20
81 #define ZS_SCHED_CONFLICT 0x40
83 #define ZS_RESOURCE_PROP_CPU_TOTAL 1
84 #define ZS_RESOURCE_PROP_CPU_ONLINE 2
85 #define ZS_RESOURCE_PROP_CPU_LOAD_1MIN 3
86 #define ZS_RESOURCE_PROP_CPU_LOAD_5MIN 4
87 #define ZS_RESOURCE_PROP_CPU_LOAD_15MIN 5
89 #define ZS_RESOURCE_CPU 1
90 #define ZS_RESOURCE_RAM_RSS 2
91 #define ZS_RESOURCE_RAM_LOCKED 3
92 #define ZS_RESOURCE_VM 4
93 #define ZS_RESOURCE_DISK_SWAP 5
94 #define ZS_RESOURCE_LWPS 6
95 #define ZS_RESOURCE_PROCESSES 7
96 #define ZS_RESOURCE_SHM_MEMORY 8
97 #define ZS_RESOURCE_SHM_IDS 9
98 #define ZS_RESOURCE_SEM_IDS 10
99 #define ZS_RESOURCE_MSG_IDS 11
100 #define ZS_RESOURCE_LOFI 12
102 #define ZS_USER_ALL 1
103 #define ZS_USER_KERNEL 2
104 #define ZS_USER_ZONES 3
105 #define ZS_USER_FREE 4
107 #define ZS_LIMIT_CPU 1
108 #define ZS_LIMIT_CPU_SHARES 2
109 #define ZS_LIMIT_RAM_RSS 3
110 #define ZS_LIMIT_RAM_LOCKED 4
111 #define ZS_LIMIT_VM 5
112 #define ZS_LIMIT_LWPS 6
113 #define ZS_LIMIT_PROCESSES 7
114 #define ZS_LIMIT_SHM_MEMORY 8
115 #define ZS_LIMIT_SHM_IDS 9
116 #define ZS_LIMIT_MSG_IDS 10
117 #define ZS_LIMIT_SEM_IDS 11
118 #define ZS_LIMIT_LOFI 12
120 #define ZS_ZONE_PROP_NAME 1
121 #define ZS_ZONE_PROP_ID 2
122 #define ZS_ZONE_PROP_IPTYPE 3
123 #define ZS_ZONE_PROP_CPUTYPE 4
124 #define ZS_ZONE_PROP_DEFAULT_SCHED 5
125 #define ZS_ZONE_PROP_SCHEDULERS 6
126 #define ZS_ZONE_PROP_CPU_SHARES 7
127 #define ZS_ZONE_PROP_POOLNAME 8
128 #define ZS_ZONE_PROP_PSETNAME 9
129 #define ZS_ZONE_PROP_UPTIME 10
130 #define ZS_ZONE_PROP_BOOTTIME 11
132 #define ZS_PSET_PROP_NAME 1
133 #define ZS_PSET_PROP_ID 2
134 #define ZS_PSET_PROP_CPUTYPE 3
135 #define ZS_PSET_PROP_SIZE 4
136 #define ZS_PSET_PROP_ONLINE 5
137 #define ZS_PSET_PROP_MIN 6
138 #define ZS_PSET_PROP_MAX 7
139 #define ZS_PSET_PROP_CPU_SHARES 8
140 #define ZS_PSET_PROP_SCHEDULERS 9
141 #define ZS_PSET_PROP_CREATETIME 10
142 #define ZS_PSET_PROP_LOAD_1MIN 11
143 #define ZS_PSET_PROP_LOAD_5MIN 12
144 #define ZS_PSET_PROP_LOAD_15MIN 13
146 #define ZS_PZ_PROP_SCHEDULERS 1
147 #define ZS_PZ_PROP_CPU_SHARES 2
148 #define ZS_PZ_PROP_CPU_CAP 4
150 #define ZS_COMPUTE_USAGE_INTERVAL 1
151 #define ZS_COMPUTE_USAGE_TOTAL 2
152 #define ZS_COMPUTE_USAGE_AVERAGE 3
153 #define ZS_COMPUTE_USAGE_HIGH 4
155 #define ZS_COMPUTE_SET_TOTAL 1
156 #define ZS_COMPUTE_SET_AVERAGE 2
157 #define ZS_COMPUTE_SET_HIGH 3
159 #define ZS_PZ_PCT_PSET 1
160 #define ZS_PZ_PCT_CPU_CAP 2
161 #define ZS_PZ_PCT_PSET_SHARES 3
162 #define ZS_PZ_PCT_CPU_SHARES 4
165 /* Per-client handle to libzonestat */
166 typedef struct zs_ctl zs_ctl_t
;
169 * These usage structure contains the system's utilization (overall, zones,
170 * psets, memory) at a given point in time.
172 typedef struct zs_usage zs_usage_t
;
175 * The usage set is for computations on multiple usage structures to describe
178 typedef struct zs_usage_set zs_usage_set_t
;
181 * The following structures desribe each zone, pset, and each zone's usage
182 * of each pset. Each usage structure (above) contains lists of these that
185 typedef struct zs_zone zs_zone_t
;
186 typedef struct zs_pset zs_pset_t
;
187 typedef struct zs_pset_zone zs_pset_zone_t
;
190 * Opaque structure for properties.
192 typedef struct zs_property zs_property_t
;
195 /* functions for opening/closing a handle for reading current usage */
197 void zs_close(zs_ctl_t
*);
199 /* function for reading current resource usage */
200 zs_usage_t
*zs_usage_read(zs_ctl_t
*);
202 /* functions for manimulating usage data: zs_usage */
203 zs_usage_t
*zs_usage_compute(zs_usage_t
*, zs_usage_t
*, zs_usage_t
*, int);
204 void zs_usage_free(zs_usage_t
*);
206 /* functions for manipulating sets of usage data: zs_usage_set */
207 zs_usage_set_t
*zs_usage_set_alloc();
208 void zs_usage_set_free(zs_usage_set_t
*);
209 int zs_usage_set_add(zs_usage_set_t
*, zs_usage_t
*);
210 int zs_usage_set_count(zs_usage_set_t
*);
211 zs_usage_t
*zs_usage_set_compute(zs_usage_set_t
*, int);
213 /* functions for overall system resources: zs_resource */
214 void zs_resource_property(zs_usage_t
*, int, int, zs_property_t
*);
215 int zs_resource_type(int);
216 uint64_t zs_resource_total_uint64(zs_usage_t
*, int);
217 uint64_t zs_resource_used_uint64(zs_usage_t
*, int, int);
218 uint64_t zs_resource_used_zone_uint64(zs_zone_t
*, int);
219 void zs_resource_total_time(zs_usage_t
*, int, timestruc_t
*);
220 void zs_resource_used_time(zs_usage_t
*, int, int, timestruc_t
*);
221 void zs_resource_used_zone_time(zs_zone_t
*, int, timestruc_t
*);
222 uint_t
zs_resource_used_pct(zs_usage_t
*, int, int);
223 uint_t
zs_resource_used_zone_pct(zs_zone_t
*, int);
225 /* functions for individual zone usage: zs_zone */
226 int zs_zone_list(zs_usage_t
*, zs_zone_t
**, int);
227 zs_zone_t
*zs_zone_first(zs_usage_t
*);
228 zs_zone_t
*zs_zone_next(zs_usage_t
*, zs_zone_t
*);
229 void zs_zone_property(zs_zone_t
*, int, zs_property_t
*);
230 int zs_zone_limit_type(int);
231 uint64_t zs_zone_limit_uint64(zs_zone_t
*, int);
232 uint64_t zs_zone_limit_used_uint64(zs_zone_t
*, int);
233 void zs_zone_limit_time(zs_zone_t
*, int, timestruc_t
*);
234 void zs_zone_limit_used_time(zs_zone_t
*, int, timestruc_t
*);
235 uint_t
zs_zone_limit_used_pct(zs_zone_t
*, int);
237 /* functions for individual psets: zs_pset_list */
238 int zs_pset_list(zs_usage_t
*, zs_pset_t
**, int);
239 zs_pset_t
*zs_pset_first(zs_usage_t
*);
240 zs_pset_t
*zs_pset_next(zs_usage_t
*, zs_pset_t
*);
241 void zs_pset_property(zs_pset_t
*, int, zs_property_t
*);
242 void zs_pset_total_time(zs_pset_t
*, timestruc_t
*);
243 uint64_t zs_pset_total_cpus(zs_pset_t
*);
244 void zs_pset_used_time(zs_pset_t
*, int, timestruc_t
*);
245 uint64_t zs_pset_used_cpus(zs_pset_t
*, int);
246 uint_t
zs_pset_used_pct(zs_pset_t
*, int);
248 /* functions for a pset's per-zone usage: zs_pset_zone */
249 int zs_pset_zone_list(zs_pset_t
*, zs_pset_zone_t
**, int);
250 zs_pset_zone_t
*zs_pset_zone_first(zs_pset_t
*);
251 zs_pset_zone_t
*zs_pset_zone_next(zs_pset_t
*, zs_pset_zone_t
*);
252 zs_zone_t
*zs_pset_zone_get_zone(zs_pset_zone_t
*);
253 zs_pset_t
*zs_pset_zone_get_pset(zs_pset_zone_t
*);
254 void zs_pset_zone_property(zs_pset_zone_t
*, int, zs_property_t
*);
255 void zs_pset_zone_used_time(zs_pset_zone_t
*, timestruc_t
*);
256 uint64_t zs_pset_zone_used_cpus(zs_pset_zone_t
*);
257 uint_t
zs_pset_zone_used_pct(zs_pset_zone_t
*, int);
259 /* functions for accessing properties */
260 zs_property_t
*zs_property_alloc();
261 size_t zs_property_size();
262 void zs_property_free(zs_property_t
*);
263 int zs_property_type(zs_property_t
*);
264 int zs_property_id(zs_property_t
*);
265 char *zs_property_string(zs_property_t
*);
266 double zs_property_double(zs_property_t
*);
267 void zs_property_time(zs_property_t
*, timestruc_t
*);
268 uint64_t zs_property_uint64(zs_property_t
*);
269 int64_t zs_property_int64(zs_property_t
*);
270 uint_t
zs_property_uint(zs_property_t
*);
271 int zs_property_int(zs_property_t
*);
277 #endif /* _ZONESTAT_H */