aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qtip/ansible_library/plugins/action/calculate.py21
-rw-r--r--tests/integration/compute.yaml47
-rw-r--r--tests/integration/specs/compute.yaml36
-rw-r--r--tests/integration/tasks/openssl.yaml53
4 files changed, 148 insertions, 9 deletions
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<rsa_sign_512>\d+\.\d)\s+
+ ?(?P<rsa_verify_512>\d+\.\d)$
+ - |-
+ ^rsa\s+1024\sbits\s.+\s+
+ ?(?P<rsa_sign_1024>\d+\.\d)\s+
+ ?(?P<rsa_verify_1024>\d+\.\d)$
+ - |-
+ ^rsa\s+2048\sbits\s.+\s+
+ ?(?P<rsa_sign_2048>\d+\.\d)\s+
+ ?(?P<rsa_verify_2048>\d+\.\d)$
+ - |-
+ ^rsa\s+4096\sbits\s.+\s+
+ ?(?P<rsa_sign_4096>\d+\.\d)\s+
+ ?(?P<rsa_verify_4096>\d+\.\d)$
+ register: openssl_rsa_metrics
+
+# - filename: AES-128-CBC_dump
+# grep:
+# - |-
+# ^aes-128-cbc\s+
+# ?(?P<aes_128_cbc_16_bytes>\d+\.\w+)\s+
+# ?(?P<aes_128_cbc_64_bytes>\d+\.\w+)\s+
+# ?(?P<aes_128_cbc_256_bytes>\d+\.\w+)\s+
+# ?(?P<aes_128_cbc_1024_bytes>\d+\.\w+)\s+
+# ?(?P<aes_128_cbc_8192_bytes>\d+\.\w+)$