Meadow F7 RC1 – JIT-Compiler, mehr Performance

Die .net-Embeddedplattform Meadow F7 erfährt permanente Erweiterungen: die vor wenigen Tagen lancierte Version RC1 beschleunigt die Programmausführung durch einen JIT-Compiler, und bietet Entwicklern außerdem einige neue APIs.

Worum geht es hier?

Bryan Costanichs aus dem Netduino-Projekt hervorgegangene Arbeitsumgebung Meadow erlaubt Entwicklern die „Mobilisierung“ von in .net gehaltenem Code. MSR-Code kann so in Visual C#, Visual F# oder Visual Basic entstehen, das Erlernen von C ist nicht notwendig. Als Arbeitsplattform kommt dabei übrigens der in der Abbildung gezeigte kombinatorische Prozessrechner zum Einsatz, der einen STM32– und einen ESP32-Kern kombiniert.

(Bildquelle alle: Autor, teilweise via https://www.instagram.com/tam.hanna/)

Wie aktualisieren?

Zur Nutzung der neuen Version ist im ersten Schritt eine Aktualisierung des globalen Kommandozeilenwerkzeugs notwendig:

1
PS C:Userstamha> dotnet tool update Wildernesslabs.Meadow.CLI global

2
Das Tool “wildernesslabs.meadow.cli” wurde in der neuesten stabilen Version neu installiert (Version 0.90.0).

3
[c]

4

5
Im nächsten Schritt folgt eine Aktualisierung des lokalen Caches im Interesse der Bandbreiteneinsparung legt die CLI eine lokale Arbeitskopie des Betriebssystems an, die es fortan zur Entwicklung verwendet:

6
[c]

7
PS C:Userstamha> meadow download os

8
Downloading latest version file

9
Downloaded 285 bytes

10
Meadow OS version 0.9.0.4 is already downloaded.

11
Done!

Danach erfolgt das Anschließen des Meadow F7 im normalen Betriebsmodus – suchen Sie den Port im Gerätemanager, und befehlen sie danach nach folgendem Schema eine Aktualisierung der Firmware:

1
PS C:Userstamha> meadow flash os d s “COM5”

2
. . .

3
Updated Meadow to OS: 0.6.4.0 (May 27 2022 22:23:47), Mono: 0.6.4.0, Coprocessor: Not available

4
Done!

Bereitstellung eines Testprogramms

Da man in der Dokumentation des Updates eine Performancesteigerung um den Faktor fünf bis zehn verspricht, bietet sich ein kleiner Test mit Hardware an. Hierzu ist ein neues Projektskelett erforderlich – wichtig ist, im Header nach folgendem Schema die zur vorliegenden Hardware passende Basisklasse einzubinden:

1
namespace MeadowBench1

2
{

3
// Change F7FeatherV2 to F7FeatherV1 for V1.x boards

4
public class MeadowApp : App<F7FeatherV1>

Der Rest des Testprogramms ist dann eine nach Schema F erfolgende Ausgabe einer charakteristischen Wellenform:

1
{

2
Led myLED;

3
public override Task Run() {

4
Console.WriteLine(“Run…”);

5

6
CycleColors();

7
return base.Run();

8
}

9

10
public override Task Initialize() {

11
Console.WriteLine(“Initialize…”);

12
myLED = new Led(Device.CreateDigitalOutputPort(Device.Pins.D01));

13
return base.Initialize();

14
}

15

16
void CycleColors() {

17
Console.WriteLine(“Cycle colors…”);

18
while (true) {

19
myLED.IsOn = true;

20
myLED.IsOn = false;

21
}

22
}

23
}

24
}

Vergleich der Performance

Zum Test bzw. zur Sichtbarmachung der Ergebnisse bietet sich ein Modulationsdomänenanalysator im Histogramm-Modus an. Vor dem Update bekam der Autor das folgende Ergebnis.

Nach dem Einspielen des Updates und einer Rekompilation veränderte sich die Situation nicht nennenswert.

Interessant ist, dass die Datei  meadow.config.yaml den JIT-Compiler von Haus aus aktiviert:

1
MonoControl:

2
Options: jit

Zu seiner Deaktivierung reicht es aus, den Inhalt nach folgendem Schema anzupassen und ein Redeployment zu befehlen:

1
MonoControl:

2
Options:

Lohn der Mühen ist eine wesentliche Verlangsamung des Systems.

Angemerkt sei, dass man im Hause Costanitch unter https://github.com/WildernessLabs/Meadow_Performance_Benchmarks ein Benchmarkrepository pflegt. Die dortigen Programmbeispiele zeigen – teilweise – erhebliche Performancesprünge.

(Bildquelle: https://github.com/WildernessLabs/Meadow_Performance_Benchmarks)

Verbesserungen beim Startup

Während die durch JIT erreichbaren Leistungssteigerungen nicht immer beeindruckend ausfallen, beschleunigt Wilderness Labs auch den eigentlichen Startprozess durch Entfernung eines wohl durch „Grandfathering“ entstandenen zehnsekündigen Delays beim Hochfahren des Betriebssystems.
Eine Optimierung des Eventmodells am WiFi-Coprozessor soll außerdem für eine wesentliche Beschleunigung des Verbindungsaufbaus sorgen:

1
We have made changes to the event model on the ESP32 resulting in a 90% decrease in WiFi connection times, reducing WiFi connection time to 35 second on average.

Eine weitere Optimierung betrifft den Linker, der seine Arbeit nun im Rahmen der Kompilation erledigt – Lohn davon ist eine wesentlich schnellere Auslieferung von Code.

Mehr erfahren

Zu guter Letzt sei noch auf die URL http://developer.wildernesslabs.co/Meadow/Release_Notes/Release-Candidates/ verwiesen, unter der sich ein detaillierter Changelog der neuen Version befindet.

Zuerst erschienen bei Mikrocontroller.net News

Quelle: Read More