From 4a6b9bc5b83cbfee575831a9f94508ba8d0bd435 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 12 Nov 2020 12:01:26 +0100 Subject: 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(-) create mode 100644 spec/spec/requirement-non-functional-generic.yml delete mode 100644 spec/spec/requirement-non-functional-type.yml create mode 100644 spec/spec/requirement-performance-runtime-env.yml create mode 100644 spec/spec/requirement-performance-runtime-envs.yml create mode 100644 spec/spec/requirement-performance-runtime-kind.yml create mode 100644 spec/spec/requirement-performance-runtime-limits.yml create mode 100644 spec/spec/requirement-performance-runtime-params.yml create mode 100644 spec/spec/requirement-performance-runtime-values.yml create mode 100644 spec/spec/requirement-performance-runtime.yml create mode 100644 spec/spec/runtime-measurement-request-role.yml diff --git a/spec/spec/requirement-non-functional-generic.yml b/spec/spec/requirement-non-functional-generic.yml new file mode 100644 index 00000000..9a12cbb9 --- /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 35c163a9..00000000 --- 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 11bd5495..030a9769 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 00000000..35becdee --- /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 00000000..9c301a5c --- /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 00000000..1c0abb93 --- /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 00000000..4a642fb1 --- /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 ``"/"`` with being the + architecture of the BSP and 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 00000000..4f460a9f --- /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 00000000..100c0374 --- /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 00000000..6dc19d9c --- /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 + "`` with 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 + "`` with 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"`` with 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 00000000..0103073d --- /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 -- cgit v1.2.3