Print this page
9936 atomic ops in syscall_mstate() induce significant overhead
9942 zone secflags are not initialized correctly

*** 18,28 **** * * CDDL HEADER END */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2015 Joyent, Inc. All rights reserved. * Copyright 2014 Nexenta Systems, Inc. All rights reserved. * Copyright 2014 Igor Kozhukhov <ikozhukhov@gmail.com>. */ #ifndef _SYS_ZONE_H --- 18,28 ---- * * CDDL HEADER END */ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2018 Joyent, Inc. * Copyright 2014 Nexenta Systems, Inc. All rights reserved. * Copyright 2014 Igor Kozhukhov <ikozhukhov@gmail.com>. */ #ifndef _SYS_ZONE_H
*** 40,49 **** --- 40,50 ---- #include <sys/uadmin.h> #include <sys/ksynch.h> #include <sys/socket_impl.h> #include <sys/secflags.h> #include <netinet/in.h> + #include <sys/cpu_uarray.h> #ifdef __cplusplus extern "C" { #endif
*** 328,337 **** --- 329,347 ---- #include <sys/list.h> #include <sys/loadavg.h> #define GLOBAL_ZONEUNIQID 0 /* uniqid of the global zone */ + /* + * Indexes into ->zone_ustate array, summing the micro state of all threads in a + * particular zone. + */ + #define ZONE_USTATE_STIME (0) + #define ZONE_USTATE_UTIME (1) + #define ZONE_USTATE_WTIME (2) + #define ZONE_USTATE_MAX (3) + struct pool; struct brand; /* * Each of these constants identifies a kernel subsystem that acquires and
*** 582,607 **** psecflags_t zone_secflags; /* default zone security-flags */ /* * Misc. kstats and counters for zone cpu-usage aggregation. - * The zone_Xtime values are the sum of the micro-state accounting - * values for all threads that are running or have run in the zone. - * This is tracked in msacct.c as threads change state. - * The zone_stime is the sum of the LMS_SYSTEM times. - * The zone_utime is the sum of the LMS_USER times. - * The zone_wtime is the sum of the LMS_WAIT_CPU times. - * As with per-thread micro-state accounting values, these values are - * not scaled to nanosecs. The scaling is done by the - * zone_misc_kstat_update function when kstats are requested. */ kmutex_t zone_misc_lock; /* protects misc statistics */ kstat_t *zone_misc_ksp; zone_misc_kstat_t *zone_misc_stats; ! uint64_t zone_stime; /* total system time */ ! uint64_t zone_utime; /* total user time */ ! uint64_t zone_wtime; /* total time waiting in runq */ /* fork-fail kstat tracking */ uint32_t zone_ffcap; /* hit an rctl cap */ uint32_t zone_ffnoproc; /* get proc/lwp error */ uint32_t zone_ffnomem; /* as_dup/memory error */ uint32_t zone_ffmisc; /* misc. other error */ --- 592,607 ---- psecflags_t zone_secflags; /* default zone security-flags */ /* * Misc. kstats and counters for zone cpu-usage aggregation. */ kmutex_t zone_misc_lock; /* protects misc statistics */ kstat_t *zone_misc_ksp; zone_misc_kstat_t *zone_misc_stats; ! /* Accumulated microstate for all threads in this zone. */ ! cpu_uarray_t *zone_ustate; /* fork-fail kstat tracking */ uint32_t zone_ffcap; /* hit an rctl cap */ uint32_t zone_ffnoproc; /* get proc/lwp error */ uint32_t zone_ffnomem; /* as_dup/memory error */ uint32_t zone_ffmisc; /* misc. other error */