Während des Anwendungsdesigns müssen Sie wissen, was Sie vom SBC in Bezug auf die Rechengeschwindigkeit erwarten können, um eine Anwendung zu entwerfen, die alle ankommenden Daten verarbeiten kann.
In diesem Tutorial stellen wir eine Methode vor, um die SBC-Leistung in verschiedenen Aufgaben zu messen und sie auf die Größe Ihrer Anwendung zu extrapolieren.
Messen des Codes
Um den Code zu messen, verwenden wir einfache Funktionen, die die erforderliche Zeit zum Senden oder Empfangen einer Reihe von Bytes berechnen. Mit diesen Informationen haben wir genug, um die CPU-Auslastung zu berechnen und eine Anwendung zu dimensionieren.
Nachfolgend geben wir Ihnen ein Beispiel zum Benchmarking von GPS-Schreibvorgängen. Es sendet einfach Dummy-Daten an das GPS und misst seine Zeit. Der Rückgabewert hat Einheiten von [Byte/Sekunde]
def benchmark_gps_write( chunk=64, N=128, baudrate=921600 ): gps = sbc.Gps( 1, baudrate ) buf = bytearray( chunk ) t0 = time.ticks_us() for i in range( N ): # send len(buf) bytes N times gps.write( buf ) t1 = time.ticks_us() dt_s = time.ticks_diff( t1, t0 )*1e-6 # Compute time size_bytes = chunk*N return size_bytes/dt_s
Ergebnisse
Task | Result | Units |
---|---|---|
ubx_parser | 3.25e+04 | [B/s] |
ubx_builder | 1.09e+05 | [B/s] |
NMEA_parser | 1.47e+04 | [B/s] |
flash_write | 1.82e+04 | [B/s] |
flash_read | 4.93e+05 | [B/s] |
sd_write | 4.46e+04 | [B/s] |
sd_read | 4.26e+05 | [B/s] |
gps_write | 8.85e+04 | [B/s] |
imu_read | 4.68e+02 | [Samples/s] |
ahrs_update | 1.01e+05 | [Calls/s] |
gc_collect | 4.89e+02 | [Calls/s] |
printf | 7.67e+05 | [B/s] |
Berechnung der CPU-Auslastung
Wie in der Tabelle gezeigt, kann der SBC 88 [KB/s] an das GPS senden, wobei 100 % der CPU verwendet werden. Das bedeutet auch, dass Ihre Anwendung, wenn sie 8.8 [KB/s] an das GPS sendet, 10 % der CPU verwendet.
Die gleiche Idee kann auf jede Anwendung angewendet werden, um eine Annäherung an die CPU-Auslastung zu erhalten und Ihre Anwendung richtig zu dimensionieren.