1/*
2 * CDDL HEADER START
3 *
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.
7 *
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.
12 *
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]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
24 */
25
26#ifndef _ZONESTAT_H
27#define	_ZONESTAT_H
28
29
30
31#include <limits.h>
32#include <sys/types.h>
33#include <sys/time.h>
34#include <sys/param.h>
35#include <sys/pset.h>
36#include <sys/zone.h>
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#define	ZS_IPTYPE_SHARED	1
43#define	ZS_IPTYPE_EXCLUSIVE	2
44
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
49
50
51#define	ZS_LIMIT_NONE			(UINT64_MAX)
52#define	ZS_PCT_NONE			(UINT_MAX)
53#define	ZS_SHARES_UNLIMITED		(UINT16_MAX)
54
55#define	ZS_ZONENAME_MAX			ZONENAME_MAX
56#define	ZS_PSETNAME_MAX			(1024 + 1)
57#define	ZS_POOLNAME_MAX			(1024 + 1)
58
59#define	ZS_RESOURCE_TYPE_TIME		1
60#define	ZS_RESOURCE_TYPE_COUNT		2
61#define	ZS_RESOURCE_TYPE_BYTES		3
62
63#define	ZS_LIMIT_TYPE_TIME		1
64#define	ZS_LIMIT_TYPE_COUNT		2
65#define	ZS_LIMIT_TYPE_BYTES		3
66
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
74
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
82
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
88
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
101
102#define	ZS_USER_ALL			1
103#define	ZS_USER_KERNEL			2
104#define	ZS_USER_ZONES			3
105#define	ZS_USER_FREE			4
106
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
119
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
131
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
145
146#define	ZS_PZ_PROP_SCHEDULERS	1
147#define	ZS_PZ_PROP_CPU_SHARES	2
148#define	ZS_PZ_PROP_CPU_CAP	4
149
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
154
155#define	ZS_COMPUTE_SET_TOTAL		1
156#define	ZS_COMPUTE_SET_AVERAGE		2
157#define	ZS_COMPUTE_SET_HIGH		3
158
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
163
164
165/* Per-client handle to libzonestat */
166typedef struct zs_ctl zs_ctl_t;
167
168/*
169 * These usage structure contains the system's utilization (overall, zones,
170 * psets, memory) at a given point in time.
171 */
172typedef struct zs_usage zs_usage_t;
173
174/*
175 * The usage set is for computations on multiple usage structures to describe
176 * a range of time.
177 */
178typedef struct zs_usage_set zs_usage_set_t;
179
180/*
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
183 * can be traversed.
184 */
185typedef struct zs_zone zs_zone_t;
186typedef struct zs_pset zs_pset_t;
187typedef struct zs_pset_zone zs_pset_zone_t;
188
189/*
190 * Opaque structure for properties.
191 */
192typedef struct zs_property zs_property_t;
193
194
195/* functions for opening/closing a handle for reading current usage */
196zs_ctl_t *zs_open();
197void zs_close(zs_ctl_t *);
198
199/* function for reading current resource usage */
200zs_usage_t *zs_usage_read(zs_ctl_t *);
201
202/* functions for manimulating usage data: zs_usage */
203zs_usage_t *zs_usage_compute(zs_usage_t *, zs_usage_t *, zs_usage_t *, int);
204void zs_usage_free(zs_usage_t *);
205
206/* functions for manipulating sets of usage data: zs_usage_set */
207zs_usage_set_t *zs_usage_set_alloc();
208void zs_usage_set_free(zs_usage_set_t *);
209int zs_usage_set_add(zs_usage_set_t *, zs_usage_t *);
210int zs_usage_set_count(zs_usage_set_t *);
211zs_usage_t *zs_usage_set_compute(zs_usage_set_t *, int);
212
213/* functions for overall system resources: zs_resource */
214void zs_resource_property(zs_usage_t *, int, int, zs_property_t *);
215int zs_resource_type(int);
216uint64_t zs_resource_total_uint64(zs_usage_t *, int);
217uint64_t zs_resource_used_uint64(zs_usage_t *, int, int);
218uint64_t zs_resource_used_zone_uint64(zs_zone_t *, int);
219void zs_resource_total_time(zs_usage_t *, int, timestruc_t *);
220void zs_resource_used_time(zs_usage_t *, int, int, timestruc_t *);
221void zs_resource_used_zone_time(zs_zone_t *, int, timestruc_t *);
222uint_t zs_resource_used_pct(zs_usage_t *, int, int);
223uint_t zs_resource_used_zone_pct(zs_zone_t *, int);
224
225/* functions for individual zone usage: zs_zone */
226int zs_zone_list(zs_usage_t *, zs_zone_t **, int);
227zs_zone_t *zs_zone_first(zs_usage_t *);
228zs_zone_t *zs_zone_next(zs_usage_t *, zs_zone_t *);
229void zs_zone_property(zs_zone_t *, int, zs_property_t *);
230int zs_zone_limit_type(int);
231uint64_t zs_zone_limit_uint64(zs_zone_t *, int);
232uint64_t zs_zone_limit_used_uint64(zs_zone_t *, int);
233void zs_zone_limit_time(zs_zone_t *, int, timestruc_t *);
234void zs_zone_limit_used_time(zs_zone_t *, int, timestruc_t *);
235uint_t zs_zone_limit_used_pct(zs_zone_t *, int);
236
237/* functions for individual psets: zs_pset_list */
238int zs_pset_list(zs_usage_t *, zs_pset_t **, int);
239zs_pset_t *zs_pset_first(zs_usage_t *);
240zs_pset_t *zs_pset_next(zs_usage_t *, zs_pset_t *);
241void zs_pset_property(zs_pset_t *, int, zs_property_t *);
242void zs_pset_total_time(zs_pset_t *, timestruc_t *);
243uint64_t zs_pset_total_cpus(zs_pset_t *);
244void zs_pset_used_time(zs_pset_t *, int, timestruc_t *);
245uint64_t zs_pset_used_cpus(zs_pset_t *, int);
246uint_t zs_pset_used_pct(zs_pset_t *, int);
247
248/* functions for a pset's per-zone usage: zs_pset_zone */
249int zs_pset_zone_list(zs_pset_t *, zs_pset_zone_t **, int);
250zs_pset_zone_t *zs_pset_zone_first(zs_pset_t *);
251zs_pset_zone_t *zs_pset_zone_next(zs_pset_t *, zs_pset_zone_t *);
252zs_zone_t *zs_pset_zone_get_zone(zs_pset_zone_t *);
253zs_pset_t *zs_pset_zone_get_pset(zs_pset_zone_t *);
254void zs_pset_zone_property(zs_pset_zone_t *, int, zs_property_t *);
255void zs_pset_zone_used_time(zs_pset_zone_t *, timestruc_t *);
256uint64_t zs_pset_zone_used_cpus(zs_pset_zone_t *);
257uint_t zs_pset_zone_used_pct(zs_pset_zone_t *, int);
258
259/* functions for accessing properties */
260zs_property_t *zs_property_alloc();
261size_t zs_property_size();
262void zs_property_free(zs_property_t *);
263int zs_property_type(zs_property_t *);
264int zs_property_id(zs_property_t *);
265char *zs_property_string(zs_property_t *);
266double zs_property_double(zs_property_t *);
267void zs_property_time(zs_property_t *, timestruc_t *);
268uint64_t zs_property_uint64(zs_property_t *);
269int64_t zs_property_int64(zs_property_t *);
270uint_t zs_property_uint(zs_property_t *);
271int zs_property_int(zs_property_t *);
272
273#ifdef __cplusplus
274}
275#endif
276
277#endif	/* _ZONESTAT_H */
278