Durante el diseño de la aplicación, debe saber qué esperar del SBC en términos de velocidad de cómputo para diseñar una aplicación que pueda procesar todos los datos entrantes.
En este tutorial presentamos un método para medir el rendimiento de SBC en diferentes tareas y cómo extrapolarlo al tamaño de su aplicación.
Midiendo el código
Para medir el código usamos funciones simples que calculan el tiempo requerido para enviar o recibir un montón de bytes. Con esa información, tenemos suficiente para calcular el uso de la CPU y dimensionar una aplicación.
A continuación te damos un ejemplo para comparar GPS escribir operaciones. Simplemente envía datos ficticios al GPS y mide su tiempo. El valor de retorno tiene unidades de [bytes/segundo]
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
Resultados
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] |
Cálculo del uso de la CPU
Como se muestra en la tabla, el SBC puede enviar 88 [KB/s] al GPS, utilizando el 100 % de la CPU. También significa que si su aplicación envía 8.8[KB/s] al GPS, usa el 10% de la CPU.
La misma idea se puede aplicar a cualquier aplicación para obtener una aproximación del uso de la CPU y dimensionar su aplicación correctamente.