source: rtems/testsuites/rhealstone/rhdeadlockbrk/rhdeadlockbrk.adoc @ cdf30f05

Last change on this file since cdf30f05 was b6c1578, checked in by Joel Sherrill <joel.sherrill@…>, on Jan 5, 2014 at 5:17:08 PM

rhealstone: Add rh prefix to all test names

This makes them easier to spot as a group in wildcard searches.

  • Property mode set to 100644
File size: 1.6 KB
1= Deadlock Break Benchmark
3This benchmark measures the average time to break a deadlock that occurs
4when a high priority task preempts a low priority task that is holding a
5resource that the high priority task needs. In RTEMS, these situations
6are mitigated through use of a semaphore with priority inheritance. A
7task holding a semaphore with priority inheritance enabled has its
8priority boosted to match that of the highest priority task blocked on
9that semaphore.
11== Directives
13  * rtems_semaphore_obtain
14  * rtems_semaphore_release
15  * rtems_task_suspend
16  * rtems_task_resume
19== Methodology
21This benchmark is structured in a way that is very similar to the semaphore-
22shuffle benchmark, but instead uses three tasks of differing priorities and
23suspend/resume instead of yield directives.
25The benchmark is run and timed once with no semaphore operations. This is the
26overhead time. The benchmark starts with the high priority task, which suspends
27itself, passing control to the mid priority task. The mid priority task then
28suspends itself, passing control to the low priority task. The low priority task
29resumes the mid priority task, which then resumes the high priority task. The
30process is repeated a total of BENCHMARKS times. This process is then executed
31with the low priority task holding a semaphore that the high priority task blocks
32on when trying to obtain. Due to priority inheritance (the deadlock break
33mechanism) the low priority task will execute instead of the mid priority task.
34The same system of suspend/resumes then occurs.
36The average is found and the overhead (the time of the first run) is subtracted
37out in the call to put_time.
Note: See TracBrowser for help on using the repository browser.