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