Durante la progettazione dell'applicazione, è necessario sapere cosa aspettarsi dall'SBC in termini di velocità di calcolo per progettare un'applicazione in grado di elaborare tutti i dati in arrivo.
In questo tutorial presentiamo un metodo per misurare le prestazioni SBC in diverse attività e come estrapolarlo per dimensionare la tua applicazione.
Misurare il codice
Per misurare il codice utilizziamo semplici funzioni che calcolano il tempo necessario per inviare o ricevere un mucchio di byte. Con queste informazioni abbiamo abbastanza per calcolare l'utilizzo della CPU e le dimensioni di un'applicazione.
Di seguito ti forniamo un esempio per confrontare le operazioni di scrittura GPS. Invia semplicemente dati fittizi al GPS e misura il suo tempo. Il valore restituito ha unità di [byte/secondo]
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
Risultati
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] |
Calcolo dell'utilizzo della CPU
Come mostrato nella tabella, l'SBC può inviare 88[KB/s] al GPS, utilizzando il 100% della CPU. Significa anche che se l'applicazione invia 8.8[KB/s] al GPS, utilizza il 10% della CPU.
La stessa idea può essere applicata a qualsiasi applicazione per ottenere un'approssimazione dell'utilizzo della CPU e dimensionare correttamente l'applicazione.