public
Created

intelcpu.sh

  • Download Gist
gistfile1.sh
Shell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#!/usr/bin/sh
#
# intelcpi - measure CPI and utilization on Intel processors.
#
# USAGE: intelcpi [interval]
# eg,
# intelcpi 0.1 # for 0.1 second intervals
#
# CPI shows how memory intensive CPU workloads are.
#
# Copyright 2011 Joyent, Inc. All rights reserved.
# Copyright 2011 Brendan Gregg. All rights reserved.
#
# CDDL HEADER START
#
# 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]
#
# CDDL HEADER END
 
interval=${1:-1} # default interval, 1 second
 
set -- `kstat -p unix:0:system_misc:ncpus` # assuming no psets,
cpus=$2 # number of CPUs
 
pics='instr_retired.any' # instructions
pics=$pics,'cpu_clk_unhalted.ref,sys' # cycles
 
/usr/sbin/cpustat -tc $pics $interval | nawk '
BEGIN { printf "%16s %8s %8s\n", "Instructions", "CPI", "%CPU"; }
NR > 1 {
total += $4;
instructions += $5;
cycles += $6;
}
NR > 1 && (((NR - 1) % '$cpus') == 0) {
printf "%16u %8.2f %8.2f\n", instructions,
cycles / instructions,
100 * cycles / total ;
total = 0;
cycles = 0;
instructions = 0;
}
'

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.