1*d339a29bSBryan Cantrill# 2*d339a29bSBryan Cantrill# CDDL HEADER START 3*d339a29bSBryan Cantrill# 4*d339a29bSBryan Cantrill# The contents of this file are subject to the terms of the 5*d339a29bSBryan Cantrill# Common Development and Distribution License (the "License"). 6*d339a29bSBryan Cantrill# You may not use this file except in compliance with the License. 7*d339a29bSBryan Cantrill# 8*d339a29bSBryan Cantrill# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*d339a29bSBryan Cantrill# or http://www.opensolaris.org/os/licensing. 10*d339a29bSBryan Cantrill# See the License for the specific language governing permissions 11*d339a29bSBryan Cantrill# and limitations under the License. 12*d339a29bSBryan Cantrill# 13*d339a29bSBryan Cantrill# When distributing Covered Code, include this CDDL HEADER in each 14*d339a29bSBryan Cantrill# file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*d339a29bSBryan Cantrill# If applicable, add the following below this CDDL HEADER, with the 16*d339a29bSBryan Cantrill# fields enclosed by brackets "[]" replaced with your own identifying 17*d339a29bSBryan Cantrill# information: Portions Copyright [yyyy] [name of copyright owner] 18*d339a29bSBryan Cantrill# 19*d339a29bSBryan Cantrill# CDDL HEADER END 20*d339a29bSBryan Cantrill# 21*d339a29bSBryan Cantrill 22*d339a29bSBryan Cantrill# 23*d339a29bSBryan Cantrill# Copyright (c) 2012, Joyent, Inc. All rights reserved. 24*d339a29bSBryan Cantrill# 25*d339a29bSBryan Cantrill 26*d339a29bSBryan Cantrilllet j=8 27*d339a29bSBryan Cantrill 28*d339a29bSBryan Cantrillenable() 29*d339a29bSBryan Cantrill{ 30*d339a29bSBryan Cantrill prog=/var/tmp/dtest.$$.d 31*d339a29bSBryan Cantrill err=/var/tmp/dtest.$$.err 32*d339a29bSBryan Cantrill 33*d339a29bSBryan Cantrill nawk -v nprobes=$1 'BEGIN { \ 34*d339a29bSBryan Cantrill for (i = 0; i < nprobes - 1; i++) { \ 35*d339a29bSBryan Cantrill printf("dtrace:::BEGIN,\n"); \ 36*d339a29bSBryan Cantrill } \ 37*d339a29bSBryan Cantrill \ 38*d339a29bSBryan Cantrill printf("dtrace:::BEGIN { exit(0); }\n"); \ 39*d339a29bSBryan Cantrill }' /dev/null > $prog 40*d339a29bSBryan Cantrill 41*d339a29bSBryan Cantrill dtrace -qs $prog > /dev/null 2> $err 42*d339a29bSBryan Cantrill 43*d339a29bSBryan Cantrill if [[ "$?" -eq 0 ]]; then 44*d339a29bSBryan Cantrill return 0 45*d339a29bSBryan Cantrill else 46*d339a29bSBryan Cantrill if ! grep "DIF program exceeds maximum program size" $err \ 47*d339a29bSBryan Cantrill 1> /dev/null 2>&1 ; then 48*d339a29bSBryan Cantrill echo "failed to enable $prog: `cat $err`" 49*d339a29bSBryan Cantrill exit 1 50*d339a29bSBryan Cantrill fi 51*d339a29bSBryan Cantrill 52*d339a29bSBryan Cantrill return 1 53*d339a29bSBryan Cantrill fi 54*d339a29bSBryan Cantrill} 55*d339a29bSBryan Cantrill 56*d339a29bSBryan Cantrill# 57*d339a29bSBryan Cantrill# First, establish an upper bound 58*d339a29bSBryan Cantrill# 59*d339a29bSBryan Cantrilllet upper=1 60*d339a29bSBryan Cantrill 61*d339a29bSBryan Cantrillwhile enable $upper ; do 62*d339a29bSBryan Cantrill let lower=upper 63*d339a29bSBryan Cantrill let upper=upper+upper 64*d339a29bSBryan Cantrill echo success at $lower, raised to $upper 65*d339a29bSBryan Cantrilldone 66*d339a29bSBryan Cantrill 67*d339a29bSBryan Cantrill# 68*d339a29bSBryan Cantrill# Now search for the highest value that can be enabled 69*d339a29bSBryan Cantrill# 70*d339a29bSBryan Cantrillwhile [[ "$lower" -lt "$upper" ]]; do 71*d339a29bSBryan Cantrill let guess=$(((lower + upper) / 2)) 72*d339a29bSBryan Cantrill echo "lower is $lower; upper is $upper; guess is $guess\c" 73*d339a29bSBryan Cantrill 74*d339a29bSBryan Cantrill if enable $guess ; then 75*d339a29bSBryan Cantrill if [[ $((upper - lower)) -le 2 ]]; then 76*d339a29bSBryan Cantrill let upper=guess 77*d339a29bSBryan Cantrill fi 78*d339a29bSBryan Cantrill 79*d339a29bSBryan Cantrill echo " (success)" 80*d339a29bSBryan Cantrill let lower=guess 81*d339a29bSBryan Cantrill else 82*d339a29bSBryan Cantrill echo " (failure)" 83*d339a29bSBryan Cantrill let upper=guess 84*d339a29bSBryan Cantrill fi 85*d339a29bSBryan Cantrilldone 86*d339a29bSBryan Cantrill 87*d339a29bSBryan Cantrilllet expected=10000 88*d339a29bSBryan Cantrill 89*d339a29bSBryan Cantrillif [[ "$lower" -lt "$expected" ]]; then 90*d339a29bSBryan Cantrill echo "expected support for enablings of at least $expected probes; \c" 91*d339a29bSBryan Cantrill echo "found $lower" 92*d339a29bSBryan Cantrill exit 1 93*d339a29bSBryan Cantrillfi 94*d339a29bSBryan Cantrill 95*d339a29bSBryan Cantrillecho "maximum supported enabled probes found to be $lower" 96*d339a29bSBryan Cantrillexit 0 97*d339a29bSBryan Cantrill 98