Skip to content

WildernessLabs/Meadow_Performance_Benchmarks

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Meadow_Performance_Benchmarks

Contains applications that measure the performance of Meadow, as well as the results of those tests.

This is primarily to track the progress of our performance improvements.

To validate, make sure to run application in release mode.

Please Note - Small variances will occur between runs and between boards.

Benchmark results

Below this markdown you will see the kinds of tests we perform on our boards to benchmark its performance for each release.

Pi Calculation

Calculates pi (3.14159..) to [x] digits and records the amount of time (in seconds) it takes. Here are the results per release:

Operation b3.5 b3.6 b3.7 b6.0.1 b6.3 RC1 RC1 w/ JIT RC-2 RC-3 3.0-preview
Calculate 50 digits 11s 11s 2.3s 1.8s 1.7s 2.3s 2.3s 2.2s 2.5s 2.1s
Calculate 100 digits 54s 54s 10.8s 8.9s 8.3s 11.2s 11.1s 10.1s 11.9s 9.9s
Calculate 150 digits 127s 126s 24.4s 20.6s 19.3s 26.3s 25.8s 23.4s 27.9s 23.0s

Pi CalculationPi Calculation

List Benchmark

List Operations

Create a 1,000 item List<int>, and perform basic list operations on it.

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1+JIT RC-2 RC-3 3.0-preview
Instantiation 30ms 30ms 30ms 19ms 10ms 11ms 11ms 5ms 13ms 14ms 15ms 14ms
Population 120ms 120ms 20ms 44ms 20ms 21ms 10ms 21ms 28ms 29ms 31ms 30ms
Summation 130ms 120ms 30ms 21ms 19ms 19ms 11ms 19ms 26ms 26ms 29ms 22ms

List OperationsList Operations

List Clearing

Clear the 1,000 item list by removing an item one at a time:

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1+JIT RC-2 RC-3 3.0-preview
Clearing 59000ms 59000ms 7700ms 6100ms 7100ms 9000ms 8800ms 7500ms 115ms 130ms 134ms 114ms

List ClearingList Clearing

Digital Output Port Operations

Digital Port initialization

Initializes three DigitalOutputPort instances, one for each of the onboard LED components and writes to them.

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1+JIT RC-2 RC-3 3.0-preview
Port initialization 2700ms 2800ms 2000ms 500ms 450ms 460ms 470ms 480ms 740ms 704ms 770ms 1413ms

Port initializationPort initialization

Digital Port Writes

Alternate states to 3 Digital Output ports in 100 cycles.

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1 w/ JIT RC-2 RC-3 3.0-preview 3.0-preview (raw BSRR)
300 writes 48000ms 13000ms 150ms 1400ms 1330ms 150ms 140ms 140ms 50ms 50ms 54ms 5ms 1ms

NOTE: Due to the drastic change of performance for this benchmark going from 4800 milliseconds (or 4.8 seconds) to 50 milliseconds (or 0.05 seconds), the graph below is expressed on a logarithmic scale.

300 writes300 writes

Digital Port Average Time Per Write

Average time calculated between creating and writing on the digital output ports.

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1 w/ JIT RC-2 RC-3 3.0-preview 3.0-preview (raw BSRR)
Avg time per write 159ms 42ms 0.5ms 0.5ms 0.44ms 0.51ms 0.46ms 0.47ms 0.16ms 0.17ms 0.18ms 0.017ms 0.003ms

NOTE: Due to the drastic change of performance for this benchmark going from 159 milliseconds to 0.17 milliseconds, the graph below is expressed on a logarithmic scale.

Avg time per writeAvg time per write

Soft PWM Generation

Generates a PWM signal in software. Currently is a visual test. Run the test and note which was the last frequency change that was noticeable.

Operation b3.5 b3.6 b3.7 b4.3 b5.1 b6.0.1 b6.3 RC1 RC1+JIT 3.0-preview
Maximum Frequency @ 50% duty ~50hz ~50hz ~100hz ~100hz ~100hz ~100hz ~100hz ~100Hz ~1500Hz TBD

Maximum Frequency @ 50% dutyMaximum Frequency @ 50% duty

Methodology Notes

3.0-preview: .NET 10 Mono runtime (Meadow.OS 2.999.2.2) on F7CoreComputeV2 in a ProjectLab V5, Release build of both the native runtime and the managed app. The benchmark project was bumped from Meadow.Sdk/1.1.0 / netstandard2.1 / App<F7FeatherV1> to Microsoft.NET.Sdk / net10.0 / App<F7CoreComputeV2>, and the three OnboardLedRed/Green/Blue pin references in the Digital Output and Soft PWM tests were retargeted to free F7CC pins (PA0, PA3, PA9); the test logic is otherwise unchanged. Soft PWM max frequency requires visual / scope inspection — _TBD_ until measured. The dedicated GPIO microbenchmark in the Meadow repo (F7DigitalOutputPort fast path) reports ~0.26µs per State = write in a tight 200k-iteration loop; this benchmark's 0.017ms (≈17µs) per write reflects the same path under the README's short 300-iteration / 3-distinct-port test pattern, which has less JIT warm-up and fewer inlining opportunities.

3.0-preview (raw BSRR): Same 100×3 alternation as the standard "300 writes" measurement, but written through F7DigitalOutputPort.GetRawWriteHandle(out uint* bsrr, out uint setMask, out uint clearMask) — a new escape hatch in Meadow.Core that hands back a pointer to the STM32 BSRR register and the set/clear masks for the pin. The hot loop becomes three back-to-back register stores per iteration with no virtual dispatch and no _state field maintenance. Stopwatch's ~1ms resolution caps measurement at the low end; the 200k-iteration GPIO microbenchmark in the Meadow repo resolves the raw path at closer to 45ns/write (≈22 MHz square wave when unrolled). The relative ~5× advantage over the managed State = path on the same hardware with the same loop shape is the headline; the absolute number is bounded by timer granularity.

About

Contains applications that measure the performance of Meadow, as well as the results of those tests.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages