Copyright (c) 1998, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
#include <pcsample.h> long pcsample(uintptr_t samples[], long nsamples);
The pcsample() function provides CPU-use statistics by profiling the amount of CPU time expended by a program.
For profiling dynamically-linked programs and 64-bit programs, it is superior to the profil(2) function, which assumes that the entire program is contained in a small, contiguous segment of the address space, divides this segment into "bins", and on each clock tick increments the counter in the bin where the program is currently executing. With shared libraries creating discontinuous program segments spread throughout the address space, and with 64-bit address spaces so large that the size of "bins" would be measured in megabytes, the profil() function is of limited value.
The pcsample() function is passed an array samples containing nsamples pointer-sized elements. During program execution, the kernel samples the program counter of the process, storing unadulterated values in the array on each clock tick. The kernel stops writing to the array when it is full, which occurs after nsamples / HZ seconds of process virtual time. The HZ value is obtained by invoking the call sysconf(_SC_CLK_TCK). See sysconf(3C).
The sampling can be stopped by a subsequent call to pcsample() with the nsamples argument set to 0. Like profil(), sampling continues across a call to fork(2), but is disabled by a call to one of the exec family of functions (see exec(2)). It is also disabled if an update of the samples[\|] array causes a memory fault.
The pcsample() function always returns 0 the first time it is called. On subsequent calls, it returns the number of samples that were stored during the previous invocation. If nsamples is invalid, it returns -1 and sets errno to indicate the error.
The pcsample() function will fail if:
EINVAL
The value of nsamples is not valid.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
MT-Level | Async-Signal-Safe |
Interface Stability | Stable |
exec(2), fork(2), profil(2), sysconf(3C), attributes(5)