From 9bbcdcb1333b510d86c944f0ae6ac1e78837df87 Mon Sep 17 00:00:00 2001 From: Yujun Zhang Date: Mon, 10 Apr 2017 19:03:38 +0800 Subject: Integrate openssl metrics for qpi calculate Change-Id: I7319cd9b49cb27ba4fa367e395ceb2caa543c06e Signed-off-by: Yujun Zhang --- qtip/ansible_library/plugins/action/calculate.py | 21 +++++++++- tests/integration/compute.yaml | 47 +++++++++++++++++---- tests/integration/specs/compute.yaml | 36 ++++++++++++++++ tests/integration/tasks/openssl.yaml | 53 ++++++++++++++++++++++++ 4 files changed, 148 insertions(+), 9 deletions(-) create mode 100644 tests/integration/specs/compute.yaml create mode 100644 tests/integration/tasks/openssl.yaml diff --git a/qtip/ansible_library/plugins/action/calculate.py b/qtip/ansible_library/plugins/action/calculate.py index 030c4cde..f88729b7 100644 --- a/qtip/ansible_library/plugins/action/calculate.py +++ b/qtip/ansible_library/plugins/action/calculate.py @@ -12,6 +12,9 @@ from numpy import mean from ansible.plugins.action import ActionBase +from ansible.utils.display import Display + +display = Display() class ActionModule(ActionBase): @@ -32,6 +35,11 @@ class ActionModule(ActionBase): def calc_qpi(qpi_spec, metrics): + + display.vv("calculate QPI {}".format(qpi_spec['name'])) + display.vvv("spec: {}".format(qpi_spec)) + display.vvv("metrics: {}".format(metrics)) + section_results = [{'name': s['name'], 'result': calc_section(s, metrics)} for s in qpi_spec['sections']] # TODO(yujunz): use formula in spec @@ -45,6 +53,11 @@ def calc_qpi(qpi_spec, metrics): def calc_section(section_spec, metrics): + + display.vv("calculate section {}".format(section_spec['name'])) + display.vvv("spec: {}".format(section_spec)) + display.vvv("metrics: {}".format(metrics)) + metric_results = [{'name': m['name'], 'result': calc_metric(m, metrics[m['name']])} for m in section_spec['metrics']] # TODO(yujunz): use formula in spec @@ -56,8 +69,14 @@ def calc_section(section_spec, metrics): def calc_metric(metric_spec, metrics): + + display.vv("calculate metric {}".format(metric_spec['name'])) + display.vvv("spec: {}".format(metric_spec)) + display.vvv("metrics: {}".format(metrics)) + # TODO(yujunz): use formula in spec - workload_results = [{'name': w['name'], 'score': mean(metrics[w['name']]) / w['baseline']} + # TODO(yujunz): convert metric to float in collector + workload_results = [{'name': w['name'], 'score': mean([float(m) for m in metrics[w['name']]]) / w['baseline']} for w in metric_spec['workloads']] metric_score = mean([r['score'] for r in workload_results]) return { diff --git a/tests/integration/compute.yaml b/tests/integration/compute.yaml index 576c6a19..cf9e6599 100644 --- a/tests/integration/compute.yaml +++ b/tests/integration/compute.yaml @@ -33,15 +33,46 @@ # collect system information - name: collect system information include: tasks/inxi.yaml + - name: ssl metrics + include: tasks/openssl.yaml -# TODO(yujunz) Calculate QPI from composed metrics -# e.g. -# qpi: -# score: 2048 -# spec: compute -# metrics: # values, not spec -# - ref_metric_a -# - ref_metric_b +- hosts: compute + tasks: + - name: calculate QPI of compute + calculate: + metrics: + ssl_rsa: "{{ openssl_rsa_metrics }}" + spec: # TODO(yujunz) load spec from file + name: compute + description: QTIP Performance Index of compute + formula: weighted arithmetic mean + sections: # split based on different application + - name: SSL + description: cryptography and SSL/TLS performance + formula: geometric mean + metrics: + - name: ssl_rsa + formual: geometric mean + workloads: + - name: rsa_sign_512 + description: RSA signature 512 bits + baseline: 14982.3 + - name: rsa_verify_512 + baseline: 180619.2 + - name: rsa_sign_1024 + baseline: 5037.7 + - name: rsa_verify_1024 + baseline: 67359.9 + - name: rsa_sign_2048 + baseline: 713.6 + - name: rsa_verify_2048 + baseline: 23458.0 + - name: rsa_sign_4096 + baseline: 102.1 + - name: rsa_verify_4096 + baseline: 6402.9 + register: compute_result + delegate_to: localhost # Generate and publish report - hosts: local diff --git a/tests/integration/specs/compute.yaml b/tests/integration/specs/compute.yaml new file mode 100644 index 00000000..0266ac8d --- /dev/null +++ b/tests/integration/specs/compute.yaml @@ -0,0 +1,36 @@ +############################################################################## +# Copyright (c) 2016 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## +name: compute +description: QTIP Performance Index of compute +formula: weighted arithmetic mean +sections: # split based on different application +- name: SSL + description: cryptography and SSL/TLS performance + formula: geometric mean + metrics: + - name: rsa + formual: geometric mean + workloads: + - name: rsa_sign_512 + description: RSA signature 512 bits + baseline: 14982.3 + - name: rsa_verify_512 + baseline: 180619.2 + - name: rsa_sign_1024 + baseline: 5037.7 + - name: rsa_verify_1024 + baseline: 67359.9 + - name: rsa_sign_2048 + baseline: 713.6 + - name: rsa_verify_2048 + baseline: 23458.0 + - name: rsa_sign_4096 + baeline: 102.1 + - name: rsa_verify_4096 + baseline: 6402.9 diff --git a/tests/integration/tasks/openssl.yaml b/tests/integration/tasks/openssl.yaml new file mode 100644 index 00000000..0e70913e --- /dev/null +++ b/tests/integration/tasks/openssl.yaml @@ -0,0 +1,53 @@ +############################################################################## +# Copyright (c) 2017 ZTE Corporation and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + +- name: install openssl - Cryptography and SSL/TLS Toolkit + package: + name: openssl + state: present + +- name: RSA signatures speed measurement + command: openssl speed rsa + register: openssl_rsa_log + +#- name: AES speed measurement +# command: openssl speed -evp aes-128-cbc +# register: openssl_aes_log + +- name: collect ssl metrics from openssl + collect: + string: "{{ openssl_rsa_log.stdout }}" + patterns: + - |- + ^rsa\s+512\sbits\s.+\s+ + ?(?P\d+\.\d)\s+ + ?(?P\d+\.\d)$ + - |- + ^rsa\s+1024\sbits\s.+\s+ + ?(?P\d+\.\d)\s+ + ?(?P\d+\.\d)$ + - |- + ^rsa\s+2048\sbits\s.+\s+ + ?(?P\d+\.\d)\s+ + ?(?P\d+\.\d)$ + - |- + ^rsa\s+4096\sbits\s.+\s+ + ?(?P\d+\.\d)\s+ + ?(?P\d+\.\d)$ + register: openssl_rsa_metrics + +# - filename: AES-128-CBC_dump +# grep: +# - |- +# ^aes-128-cbc\s+ +# ?(?P\d+\.\w+)\s+ +# ?(?P\d+\.\w+)\s+ +# ?(?P\d+\.\w+)\s+ +# ?(?P\d+\.\w+)\s+ +# ?(?P\d+\.\w+)$ -- cgit 1.2.3-korg