scripts/performance/measure.py (42 lines of code) (raw):
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import sys
from subprocess import check_output, STDOUT, CalledProcessError
def mean(data):
"""Return the sample arithmetic mean of data."""
n = len(data)
if n < 1:
raise ValueError('len < 1')
return sum(data)/float(n)
def sq_deviation(data):
"""Return sum of square deviations of sequence data."""
c = mean(data)
return sum((x-c)**2 for x in data)
def pstdev(data):
"""Calculates the population standard deviation."""
n = len(data)
if n < 2:
raise ValueError('len < 2')
ss = sq_deviation(data)
return (ss/n) ** 0.5
def scenario(command, loop=10):
real = []
user = []
syst = []
test_command = 'time -p ' + command
for i in range(loop):
try:
lines = check_output([test_command], shell=True, stderr=STDOUT).split('\n')
except CalledProcessError as e:
lines = e.output.split('\n')
real_time = float(lines[-4].split()[1])
real.append(float(lines[-4].split()[1]))
user.append(float(lines[-3].split()[1]))
syst.append(float(lines[-2].split()[1]))
sys.stdout.write('Loop {} => {} \n'.format(i, real_time))
sys.stdout.flush()
print('Command: {}'.format(command))
print('Real: mean => {} \t pstdev => {}'.format(mean(real), pstdev(real)))
print('User: mean => {} \t pstdev => {}'.format(mean(user), pstdev(user)))
print('Syst: mean => {} \t pstdev => {}'.format(mean(syst), pstdev(syst)))
print('')
scenario('az')
scenario('az cl')
scenario('az cloud')
scenario('az cloud list')
scenario('az cloud show --this-does-not-exist')