This page sums up CMRX kernel performance history. Since thread metric benchmark has been ported to CMRX we run it periodically to measure relative performance of changes done in the code.
First several records in benchmark score history are not versioned as they were measured before CMRX kernel got its first versioned release v.0.1.0. These results were measured during short performance improvement campaign capturing how kernel performance was improving as small code changes were done.
Below is chart showing how many instructions individual tests in the benchmark need to process one test iteration on average. This value is calculated based on CPU frequency and test duration. This chart contains more tests than just the four tests we run on other RTOSes. The IPC view allows us to show tests with very wide range of scores in one plot without plots of even the fastest tests being indistinguishable from zero.
You can learn more about what each test benchmarks on this page.
Following chart shows relative change of score from test to test. In this chart score in each specific benchmark is compared to previous one taking previous score as baseline. Values in this chart denote how much the score has improved or worsened. Values greater than 0 mean that score has improved and code is faster. Values lower than 0 mean score has decreased and code is slower.
Below are notes regarding changes in the code of benchmark itself that affected benchmark performance or other notable differences worth of mentioning:
Asserts disabled: Asserts were disabled in the release build
Sanitization disabled: Sanitization of PSP was disabled in release build
Fast syscall lookup: System call lookup is performed using binary rather than linear search
v0.1.0: Synchronization benchmark was changed to use mutexes rather than notify / wait subsystem. This decreased score a bit as mutexes use notifications internally.
v0.1.1: Preemptive benchmark was changed to use signals instead of notification to stop/resume threads as this is what other RTOSes do, message passing benchmark does not use timeouts anymore