# Copyright (c) 2010 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import logging, os, re from autotest_lib.client.bin import test from autotest_lib.client.bin import utils as bin_utils from autotest_lib.client.common_lib import error, utils class platform_AesThroughput(test.test): version = 1 def setup(self): self.results = {'bytes_per_sec_ideal_min' : 20 * 1024 * 1024} def run_once(self): num_cpus = bin_utils.count_cpus() logging.debug('Running using all cpus: %d' % num_cpus) results = self.openssl_speed('aes-256-cbc', '-multi %d' % num_cpus) parsed = self.parse_results(results) self.update_stats(parsed) self.export_stats() def openssl_speed(self, cipher, options=''): cmd = 'openssl speed %s -mr %s' % (cipher, options) return utils.system_output(cmd, retain_output=True) def parse_results(self, results, name=''): # Split the results into lines. # We really only want the final line for our purposes. type, times = results.split("\n")[-1].split(' ') # +F:num:aes-256 cbc -> aes_256_cbc type = re.sub('[- ]', '_', type.split(':')[-1]) # cbc:time:time:time:... -> time, time, ... times = times.split(':')[1:] # Build the key names if len(name) > 0: name = name + '_' key_prefix = 'bytes_per_sec_' + name + type + '_blocksz_' keys = ['16_bytes', '64_bytes', '256_bytes', '1024_bytes', '8192_bytes'] keys = [key_prefix+k for k in keys] if len(times) > len(keys): logging.debug(results) raise error.TestFail('openssl output format parsing failed') return dict(zip(keys, times)) def update_stats(self, keyvals): self.results.update(keyvals) def export_stats(self): self.write_perf_keyval(self.results)