Integrate openssl metrics for qpi calculate 89/33189/3
authorYujun Zhang <zhang.yujunz@zte.com.cn>
Mon, 10 Apr 2017 11:03:38 +0000 (19:03 +0800)
committerYujun Zhang <zhang.yujunz@zte.com.cn>
Tue, 11 Apr 2017 03:31:48 +0000 (11:31 +0800)
Change-Id: I7319cd9b49cb27ba4fa367e395ceb2caa543c06e
Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
qtip/ansible_library/plugins/action/calculate.py
tests/integration/compute.yaml
tests/integration/specs/compute.yaml [new file with mode: 0644]
tests/integration/tasks/openssl.yaml [new file with mode: 0644]

index 030c4cd..f88729b 100644 (file)
@@ -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 {
index 576c6a1..cf9e659 100644 (file)
   # 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 (file)
index 0000000..0266ac8
--- /dev/null
@@ -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 (file)
index 0000000..0e70913
--- /dev/null
@@ -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+)$