From 0d87b1fd8de30280e94b29d3fc629890c1b4b39b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 11 Nov 2020 15:57:38 +0100 Subject: spec: Add partition manager performance items --- spec/rtems/part/req/perf-get-buffer.yml | 64 +++++++++++++++++++ spec/rtems/part/req/perf-get-no-buffer.yml | 52 ++++++++++++++++ spec/rtems/part/req/perf-return-buffer.yml | 45 ++++++++++++++ spec/rtems/part/val/performance.yml | 99 ++++++++++++++++++++++++++++++ 4 files changed, 260 insertions(+) create mode 100644 spec/rtems/part/req/perf-get-buffer.yml create mode 100644 spec/rtems/part/req/perf-get-no-buffer.yml create mode 100644 spec/rtems/part/req/perf-return-buffer.yml create mode 100644 spec/rtems/part/val/performance.yml diff --git a/spec/rtems/part/req/perf-get-buffer.yml b/spec/rtems/part/req/perf-get-buffer.yml new file mode 100644 index 00000000..09f84fe9 --- /dev/null +++ b/spec/rtems/part/req/perf-get-buffer.yml @@ -0,0 +1,64 @@ +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 diff --git a/spec/rtems/part/req/perf-get-no-buffer.yml b/spec/rtems/part/req/perf-get-no-buffer.yml new file mode 100644 index 00000000..0115fbef --- /dev/null +++ b/spec/rtems/part/req/perf-get-no-buffer.yml @@ -0,0 +1,52 @@ +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: {} +params: {} +rationale: null +references: [] +test-body: + brief: | + Try to get a buffer. + code: | + ctx->status = rtems_partition_get_buffer( ctx->part_one, &ctx->buffer ); + description: null +test-cleanup: + brief: | + Return the buffer. + code: | + rtems_status_code sc; + + sc = rtems_partition_return_buffer( ctx->part_one, ctx->buffer_2 ); + T_rsc_success( sc ); + description: null +test-prepare: + brief: | + Get the buffer. + code: | + rtems_status_code sc; + + sc = rtems_partition_get_buffer( ctx->part_one, &ctx->buffer_2 ); + T_rsc_success( sc ); + description: null +test-setup: null +test-teardown: + brief: | + Check the status code. + code: | + T_quiet_rsc( ctx->status, RTEMS_UNSATISFIED ); + + return tic == toc; + description: null +text: | + When a partition has no free buffers, the ${.:limit-kind} runtime of exactly + ${../val/performance:/params/sample-count} unsatisfied calls to + ${../if/get-buffer:/name} in the ${.:/environment} shall be + ${.:limit-condition}. +non-functional-type: performance-runtime +requirement-type: non-functional +type: requirement diff --git a/spec/rtems/part/req/perf-return-buffer.yml b/spec/rtems/part/req/perf-return-buffer.yml new file mode 100644 index 00000000..0199c361 --- /dev/null +++ b/spec/rtems/part/req/perf-return-buffer.yml @@ -0,0 +1,45 @@ +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: {} +params: {} +rationale: null +references: [] +test-body: + brief: | + Return the buffer. + code: | + ctx->status = rtems_partition_return_buffer( ctx->part_many, ctx->buffer ); + description: null +test-cleanup: null +test-prepare: null +test-setup: + brief: | + Get the buffer. + code: | + rtems_status_code sc; + + sc = rtems_partition_get_buffer( ctx->part_many, &ctx->buffer ); + T_quiet_rsc_success( sc ); + description: null +test-teardown: + brief: | + Check the status code. + code: | + T_quiet_rsc( ctx->status, RTEMS_SUCCESSFUL ); + + return tic == toc; + description: null +text: | + When a partition has exactly ${../val/performance:/params/buffer-count} minus + one free buffers, the ${.:limit-kind} runtime of exactly + ${../val/performance:/params/sample-count} successful calls to + ${../if/return-buffer:/name} in the ${.:/environment} shall be + ${.:limit-condition}. +non-functional-type: performance-runtime +requirement-type: non-functional +type: requirement diff --git a/spec/rtems/part/val/performance.yml b/spec/rtems/part/val/performance.yml new file mode 100644 index 00000000..110c7244 --- /dev/null +++ b/spec/rtems/part/val/performance.yml @@ -0,0 +1,99 @@ +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: [] +params: + sample-count: 1000 + buffer-count: 100 +test-brief: | + This test case provides a context to run Partition Manager performance tests. +test-cleanup: null +test-context: +- brief: | + This member provides a partition with exactly one free buffer. + description: null + member: | + rtems_id part_one +- brief: | + This member provides a partition with exactly ${.:/params/buffer-count} + free buffers. + description: null + member: | + rtems_id part_many +- brief: | + This member provides a status code. + description: null + member: | + rtems_status_code status +- brief: | + This member provides a buffer pointer. + description: null + member: | + void *buffer +- brief: | + This member provides a second buffer pointer. + description: null + member: | + void *buffer_2 +test-context-support: null +test-description: null +test-includes: +- rtems.h +- rtems/chain.h +test-local-includes: [] +test-prepare: null +test-setup: + brief: | + Creates the test partition. + code: | + rtems_status_code sc; + size_t size; + void *area; + uintptr_t length; + + size = sizeof( rtems_chain_node ); + + area = T_malloc( size ); + sc = rtems_partition_create( + rtems_build_name( ' ', 'O', 'N', 'E' ), + area, + size, + size, + RTEMS_DEFAULT_ATTRIBUTES, + &ctx->part_one + ); + T_assert_rsc_success( sc ); + + length = ${.:/params/buffer-count} * size; + area = T_malloc( length ); + sc = rtems_partition_create( + rtems_build_name( 'M', 'A', 'N', 'Y' ), + area, + length, + size, + RTEMS_DEFAULT_ATTRIBUTES, + &ctx->part_many + ); + T_assert_rsc_success( sc ); + description: null +test-stop: null +test-support: null +test-target: testsuites/validation/tc-part-performance.c +test-teardown: + brief: | + Deletes the test partition. + code: | + rtems_status_code sc; + + if ( ctx->part_one != 0 ) { + sc = rtems_partition_delete( ctx->part_one ); + T_rsc_success( sc ); + } + + if ( ctx->part_many != 0 ) { + sc = rtems_partition_delete( ctx->part_many ); + T_rsc_success( sc ); + } + description: null +type: runtime-measurement-test -- cgit v1.2.3