SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause copyrights: - Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de) enabled-by: RTEMS_SMP limits: sparc/gr712rc/smp/qual-only/aQM5D84izENqUHf5JXZtqffaL5bD4qBjf9HOSNfAMBY=: DirtyCache: max-upper-bound: 0.00016195199999999998 median-lower-bound: 0.0001072 median-upper-bound: 0.00016079999999999998 min-lower-bound: 0.0001072 FullCache: max-upper-bound: 9.36e-05 median-lower-bound: 4.2368e-05 median-upper-bound: 6.3552e-05 min-lower-bound: 4.16e-05 HotCache: max-upper-bound: 5.635199999999999e-05 median-lower-bound: 3.68e-05 median-upper-bound: 5.52e-05 min-lower-bound: 3.68e-05 Load/1: max-upper-bound: 0.00015955199999999998 median-lower-bound: 0.0001056 median-upper-bound: 0.0001584 min-lower-bound: 0.0001056 Load/2: max-upper-bound: 0.00016079999999999998 median-lower-bound: 0.0001056 median-upper-bound: 0.0001584 min-lower-bound: 0.0001056 sparc/gr740/smp/qual-only/3Y1G8SMm2FRTpZB5_0NhbpDnatbEYmbDLLW58d-wXuY=: DirtyCache: max-upper-bound: 6.1152e-05 median-lower-bound: 4.0768e-05 median-upper-bound: 6.1152e-05 min-lower-bound: 4.0768e-05 FullCache: max-upper-bound: 6.0119999999999994e-05 median-lower-bound: 4.008e-05 median-upper-bound: 6.0119999999999994e-05 min-lower-bound: 3.9824000000000004e-05 HotCache: max-upper-bound: 6.0048e-05 median-lower-bound: 4.0032000000000006e-05 median-upper-bound: 6.0048e-05 min-lower-bound: 3.996800000000001e-05 Load/1: max-upper-bound: 6.6072e-05 median-lower-bound: 4.4048e-05 median-upper-bound: 6.6072e-05 min-lower-bound: 4.3984000000000004e-05 Load/2: max-upper-bound: 6.6072e-05 median-lower-bound: 4.4048e-05 median-upper-bound: 6.6072e-05 min-lower-bound: 4.3984000000000004e-05 Load/3: max-upper-bound: 6.6072e-05 median-lower-bound: 4.4048e-05 median-upper-bound: 6.6072e-05 min-lower-bound: 4.3984000000000004e-05 Load/4: max-upper-bound: 6.6072e-05 median-lower-bound: 4.4048e-05 median-upper-bound: 6.6072e-05 min-lower-bound: 4.3984000000000004e-05 sparc/gr740/smp/qual-only/qpmWME3Tk2kfoQL1kmgyerzkvLKkrfPY7xWIWGfY0Fg=: DirtyCache: max-upper-bound: 6.0072e-05 median-lower-bound: 3.74688e-05 median-upper-bound: 5.620319999999999e-05 min-lower-bound: 3.72928e-05 FullCache: max-upper-bound: 3.19296e-05 median-lower-bound: 1.68192e-05 median-upper-bound: 2.52288e-05 min-lower-bound: 1.6752e-05 HotCache: max-upper-bound: 1.23312e-05 median-lower-bound: 8.2112e-06 median-upper-bound: 1.23168e-05 min-lower-bound: 8.208e-06 Load/1: max-upper-bound: 7.648799999999999e-05 median-lower-bound: 3.6755200000000003e-05 median-upper-bound: 5.5132799999999995e-05 min-lower-bound: 3.66336e-05 Load/2: max-upper-bound: 7.30416e-05 median-lower-bound: 3.69472e-05 median-upper-bound: 5.5420799999999996e-05 min-lower-bound: 3.65504e-05 Load/3: max-upper-bound: 0.00034555199999999995 median-lower-bound: 0.0001987136 median-upper-bound: 0.00029807039999999997 min-lower-bound: 0.0001984928 Load/4: max-upper-bound: 0.0005223648 median-lower-bound: 0.0003007328 median-upper-bound: 0.0004510992 min-lower-bound: 0.0002964096 links: - role: requirement-refinement uid: perf-runtime - role: runtime-measurement-request uid: ../val/perf non-functional-type: performance-runtime params: {} rationale: null references: [] requirement-type: non-functional test-body: brief: | Move the worker to scheduler A. code: | ctx->begin = T_tick(); ctx->status = rtems_task_set_scheduler( ctx->worker_id, SCHEDULER_A_ID, PRIO_HIGH ); description: null test-cleanup: brief: | Delete the worker tasks. code: | ResumeTask( ctx->worker_2_id ); DeleteTask( ctx->worker_2_id ); DeleteTask( ctx->worker_id ); description: null test-prepare: brief: | Create and start two worker tasks for scheduler B. Make the second worker busy. code: | ctx->worker_id = CreateTask( "WORK", PRIO_NORMAL ); SetScheduler( ctx->worker_id, SCHEDULER_B_ID, PRIO_NORMAL ); StartTask( ctx->worker_id, Worker, ctx ); Send( ctx, EVENT_SET_END ); WaitForNextTask( 1, ctx->worker_id ); ctx->worker_2_id = CreateTask( "WRK2", PRIO_NORMAL ); SetScheduler( ctx->worker_2_id, SCHEDULER_B_ID, PRIO_HIGH ); StartTask( ctx->worker_2_id, Worker, ctx ); SendEvents( ctx->worker_2_id, EVENT_BUSY ); SuspendTask( ctx->worker_2_id ); description: null test-setup: brief: | Move the worker to scheduler B. Make the worker ready to set the end time. code: | ResumeTask( ctx->worker_2_id ); SetScheduler( ctx->worker_id, SCHEDULER_B_ID, PRIO_NORMAL ); Send( ctx, EVENT_SET_END ); description: null test-teardown: brief: | Set the measured runtime. Discard samples interrupted by a clock tick. code: | T_quiet_rsc_success( ctx->status ); *delta = ctx->end - ctx->begin; SuspendTask( ctx->worker_2_id ); return tic == toc; description: null text: | Let U and V be two tasks with the distinct home schedulers. Let :math:`B` be a time point measured by U right before a call to ${../if/set-scheduler:/name} which moves task V to the home scheduler of U which preempts the caller. Let :math:`E` be a time point measured by V right after the first context switch after :math:`B`. While the execution environment is ${.:/environment}, while the measurement sample is :math:`E - B`, when exactly ${../val/perf:/params/sample-count} samples are collected, the ${.:/limit-kind} shall be ${.:/limit-condition}. type: requirement