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