[rtems-central commit] spec: Add runtime performance item type

Sebastian Huber sebh at rtems.org
Fri Nov 13 10:09:47 UTC 2020


Module:    rtems-central
Branch:    master
Commit:    4a6b9bc5b83cbfee575831a9f94508ba8d0bd435
Changeset: http://git.rtems.org/rtems-central/commit/?id=4a6b9bc5b83cbfee575831a9f94508ba8d0bd435

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Nov 12 12:01:26 2020 +0100

spec: Add runtime performance item type

---

 spec/spec/requirement-non-functional-generic.yml   |  71 ++++++++++
 spec/spec/requirement-non-functional-type.yml      |  31 -----
 spec/spec/requirement-non-functional.yml           |   2 +-
 spec/spec/requirement-performance-runtime-env.yml  |  22 +++
 spec/spec/requirement-performance-runtime-envs.yml |  23 +++
 spec/spec/requirement-performance-runtime-kind.yml |  24 ++++
 .../requirement-performance-runtime-limits.yml     |  24 ++++
 .../requirement-performance-runtime-params.yml     |  23 +++
 .../requirement-performance-runtime-values.yml     |  23 +++
 spec/spec/requirement-performance-runtime.yml      | 155 +++++++++++++++++++++
 spec/spec/runtime-measurement-request-role.yml     |  23 +++
 11 files changed, 389 insertions(+), 32 deletions(-)

diff --git a/spec/spec/requirement-non-functional-generic.yml b/spec/spec/requirement-non-functional-generic.yml
new file mode 100644
index 0000000..9a12cbb
--- /dev/null
+++ b/spec/spec/requirement-non-functional-generic.yml
@@ -0,0 +1,71 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: build-configuration
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: constraint
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: design
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: documentation
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: interface
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: interface-requirement
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: maintainability
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: performance
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: portability
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: quality
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: reliability
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: resource
+  uid: requirement-non-functional
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: safety
+  uid: requirement-non-functional
+spec-description: |
+  Items of this type state a non-functional requirement with the non-functional
+  type defined by the specification type refinement.
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: null
+    mandatory-attributes: all
+spec-name: Generic Non-Functional Requirement Item Type
+spec-type: requirement-non-functional-generic
+type: spec
diff --git a/spec/spec/requirement-non-functional-type.yml b/spec/spec/requirement-non-functional-type.yml
deleted file mode 100644
index 35c163a..0000000
--- a/spec/spec/requirement-non-functional-type.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
-copyrights:
-- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
-enabled-by: true
-links:
-- role: spec-member
-  uid: root
-spec-description: null
-spec-example: null
-spec-info:
-  str:
-    assert:
-      in:
-      - build-configuration
-      - constraint
-      - design
-      - documentation
-      - interface
-      - interface-requirement
-      - maintainability
-      - performance
-      - portability
-      - quality
-      - reliability
-      - resource
-      - safety
-    description: |
-      This type shall be used for non-functional requirement types.
-spec-name: Requirement Non-Functional Type
-spec-type: requirement-non-functional-type
-type: spec
diff --git a/spec/spec/requirement-non-functional.yml b/spec/spec/requirement-non-functional.yml
index 11bd549..030a976 100644
--- a/spec/spec/requirement-non-functional.yml
+++ b/spec/spec/requirement-non-functional.yml
@@ -17,7 +17,7 @@ spec-info:
       non-functional-type:
         description: |
           It shall be the non-functional type of the requirement.
-        spec-type: requirement-non-functional-type
+        spec-type: name
     description: |
       This set of attributes specifies a non-functional requirement.
     mandatory-attributes: all
diff --git a/spec/spec/requirement-performance-runtime-env.yml b/spec/spec/requirement-performance-runtime-env.yml
new file mode 100644
index 0000000..35becde
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-env.yml
@@ -0,0 +1,22 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  str:
+    assert:
+    - in:
+      - FullCache
+      - HotCache
+      - DirtyCache
+    - re: ^Load/[1-9][0-9]*$
+    description: |
+      It specifies the runtime measurement environment.
+spec-name: Runtime Measurement Environment
+spec-type: requirement-performance-runtime-env
+type: spec
diff --git a/spec/spec/requirement-performance-runtime-envs.yml b/spec/spec/requirement-performance-runtime-envs.yml
new file mode 100644
index 0000000..9c301a5
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-envs.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      This set of attributes provides runtime performance limits for a set of
+      runtime measurement environments.
+    generic-attributes:
+      description: null
+      key-spec-type: requirement-performance-runtime-env
+      value-spec-type: requirement-performance-runtime-values
+    mandatory-attributes: all
+spec-name: Runtime Measurement Environment Table
+spec-type: requirement-performance-runtime-envs
+type: spec
diff --git a/spec/spec/requirement-performance-runtime-kind.yml b/spec/spec/requirement-performance-runtime-kind.yml
new file mode 100644
index 0000000..1c0abb9
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-kind.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  str:
+    assert:
+    - in:
+      - max-lower-bound
+      - max-upper-bound
+      - mean-lower-bound
+      - mean-upper-bound
+      - min-lower-bound
+      - min-upper-bound
+    description: |
+      It specifies the kind of a runtime measurement value.
+spec-name: Runtime Measurement Value Kind
+spec-type: requirement-performance-runtime-kind
+type: spec
diff --git a/spec/spec/requirement-performance-runtime-limits.yml b/spec/spec/requirement-performance-runtime-limits.yml
new file mode 100644
index 0000000..4a642fb
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-limits.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      This set of attributes provides runtime performance limits for BSP
+      variants specified by ``"<arch>/<bsp>"`` with <arch> being the
+      architecture of the BSP and <bsp> being the base name of the BSP.
+    generic-attributes:
+      description: null
+      key-spec-type: str
+      value-spec-type: requirement-performance-runtime-envs
+    mandatory-attributes: all
+spec-name: Runtime Performance Limit Table
+spec-type: requirement-performance-runtime-limits
+type: spec
diff --git a/spec/spec/requirement-performance-runtime-params.yml b/spec/spec/requirement-performance-runtime-params.yml
new file mode 100644
index 0000000..4f460a9
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-params.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      This set of attributes defines parameters of the runtime performance
+      requirement.
+    generic-attributes:
+      description: null
+      key-spec-type: name
+      value-spec-type: any
+    mandatory-attributes: all
+spec-name: Runtime Performance Parameter Set
+spec-type: requirement-performance-runtime-params
+type: spec
diff --git a/spec/spec/requirement-performance-runtime-values.yml b/spec/spec/requirement-performance-runtime-values.yml
new file mode 100644
index 0000000..100c037
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime-values.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      This set of attributes provides a set of runtime measurement values each
+      of a specified kind.  The unit of the values shall be one second.
+    generic-attributes:
+      description: null
+      key-spec-type: requirement-performance-runtime-kind
+      value-spec-type: float
+    mandatory-attributes: all
+spec-name: Runtime Measurement Value Table
+spec-type: requirement-performance-runtime-values
+type: spec
diff --git a/spec/spec/requirement-performance-runtime.yml b/spec/spec/requirement-performance-runtime.yml
new file mode 100644
index 0000000..6dc19d9
--- /dev/null
+++ b/spec/spec/requirement-performance-runtime.yml
@@ -0,0 +1,155 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+- role: spec-refinement
+  spec-key: non-functional-type
+  spec-value: performance-runtime
+  uid: requirement-non-functional
+spec-description: |
+  The item shall have exactly one link with the
+  ${runtime-measurement-request-role:/spec-name}.  A requirement text processor
+  shall support a substitution of $${.:/limit-kind}:
+
+  * For a ${requirement-performance-runtime-kind:/spec-name} of
+    ``min-lower-bound`` or ``min-upper-bound``, the substitution of
+    $${.:/limit-kind} shall be ``"minimum"``.
+
+  * For a ${requirement-performance-runtime-kind:/spec-name} of
+    ``mean-lower-bound`` or ``mean-upper-bound``, the substitution of
+    $${.:/limit-kind} shall be ``"mean"``.
+
+  * For a ${requirement-performance-runtime-kind:/spec-name} of
+    ``max-lower-bound`` or ``max-upper-bound``, the substitution of
+    $${.:/limit-kind} shall be ``"maximum"``.
+
+  A requirement text processor shall support a substitution of
+  $${.:/limit-condition}:
+
+  * For a ${requirement-performance-runtime-kind:/spec-name} of
+    ``min-lower-bound``, ``mean-lower-bound``, or ``max-lower-bound``, the
+    substitution of $${.:/limit-condition} shall be ``"greater than or equal to
+    <value>"`` with <value> being the value of the corresponding entry in the
+    ${requirement-performance-runtime-values:/spec-name}.
+
+  * For a ${requirement-performance-runtime-kind:/spec-name} of
+    ``min-upper-bound``, ``mean-upper-bound``, or ``max-upper-bound``, the
+    substitution of $${.:/limit-condition} shall be ``"less than or equal to
+    <value>"`` with <value> being the value of the corresponding entry in the
+    ${requirement-performance-runtime-values:/spec-name}.
+
+  A requirement text processor shall support a substitution of
+  $${.:/environment}.  The value of the substitution shall be ``"<environment>
+  environment"`` with <environment> being the environment of the corresponding
+  entry in the ${requirement-performance-runtime-envs:/spec-name}.
+spec-example: |
+  SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+  copyrights:
+  - Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+  enabled-by: true
+  links:
+  - role: runtime-measurement-request
+    uid: ../val/performance
+  limits:
+    sparc/leon3:
+      DirtyCache:
+        max-upper-bound: 0.000005
+        mean-upper-bound: 0.000005
+      FullCache:
+        max-upper-bound: 0.000005
+        mean-upper-bound: 0.000005
+      HotCache:
+        max-upper-bound: 0.000005
+        mean-upper-bound: 0.000005
+      Load/1:
+        max-upper-bound: 0.00001
+        mean-upper-bound: 0.00001
+      Load/2:
+        max-upper-bound: 0.00001
+        mean-upper-bound: 0.00001
+      Load/3:
+        max-upper-bound: 0.00001
+        mean-upper-bound: 0.00001
+      Load/4:
+        max-upper-bound: 0.00001
+        mean-upper-bound: 0.00001
+  params: {}
+  rationale: null
+  references: []
+  test-body:
+    brief: |
+      Get a buffer.
+    code: |
+      ctx->status = rtems_partition_get_buffer( ctx->part_many, &ctx->buffer );
+    description: null
+  test-cleanup: null
+  test-prepare: null
+  test-setup: null
+  test-teardown:
+    brief: |
+      Return the buffer.
+    code: |
+      rtems_status_code sc;
+
+      T_quiet_rsc_success( ctx->status );
+
+      sc = rtems_partition_return_buffer( ctx->part_many, ctx->buffer );
+      T_quiet_rsc_success( sc );
+
+      return tic == toc;
+    description: null
+  text: |
+    When a partition has exactly ${../val/performance:/params/buffer-count} free
+    buffers, the ${.:limit-kind} runtime of exactly
+    ${../val/performance:/params/sample-count} successful calls to
+    ${../if/get-buffer:/name} in the ${.:/environment} shall be
+    ${.:limit-condition}.
+  non-functional-type: performance-runtime
+  requirement-type: non-functional
+  type: requirement
+spec-info:
+  dict:
+    attributes:
+      limits:
+        description: null
+        spec-type: requirement-performance-runtime-limits
+      params:
+        description: null
+        spec-type: requirement-performance-runtime-params
+      test-body:
+        description: |
+          It shall provide the code of the measure runtime body handler.  In
+          contrast to other methods, this method is mandatory.
+        spec-type: test-support-method
+      test-setup:
+        description: |
+          It may provide the code of the measure runtime setup handler.
+        spec-type: test-support-method
+      test-teardown:
+        description: |
+          It may provide the code of the measure runtime teardown handler.
+        spec-type: test-support-method
+      test-prepare:
+        description: |
+          It may provide the code to prepare the measure runtime request.  This
+          method is called after the prepare method of the corresponding
+          ${runtime-measurement-test:/spec-name} item and before the request.
+        spec-type: test-support-method
+      test-cleanup:
+        description: |
+          It may provide the code to clean up the measure runtime request.
+          This method is called before the cleanup method of the corresponding
+          ${runtime-measurement-test:/spec-name} item and after the request.
+        spec-type: test-support-method
+    description: |
+      This set of attributes specifies non-functional runtime performance
+      requirements and the corresponding validation test code.  Along with the
+      requirement, the test code to execute a measure runtime request is
+      specified.
+    mandatory-attributes: all
+spec-name: Runtime Performance Requirement Item Type
+spec-type: requirement-performance-runtime
+type: spec
diff --git a/spec/spec/runtime-measurement-request-role.yml b/spec/spec/runtime-measurement-request-role.yml
new file mode 100644
index 0000000..0103073
--- /dev/null
+++ b/spec/spec/runtime-measurement-request-role.yml
@@ -0,0 +1,23 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+- role: spec-refinement
+  spec-key: role
+  spec-value: runtime-measurement-request
+  uid: link
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      It defines the runtime measurement request role of links.  The link
+      target shall be a ${runtime-measurement-test:/spec-name} item.
+    mandatory-attributes: all
+spec-name: Runtime Measurement Request Link Role
+spec-type: runtime-measurement-request-role
+type: spec



More information about the vc mailing list