Durante o design do aplicativo, você precisa saber o que esperar do SBC em termos de velocidade de computação para projetar um aplicativo que possa processar todos os dados recebidos.
Neste tutorial apresentamos um método para medir o desempenho do SBC em diferentes tarefas e como extrapolá-lo para dimensionar sua aplicação.
Medindo o código
Para medir o código, usamos funções simples que calculam o tempo necessário para enviar ou receber um monte de bytes. Com essas informações, temos o suficiente para calcular o uso da CPU e dimensionar um aplicativo.
Abaixo, damos a você um exemplo para comparar as operações de gravação do GPS. Ele simplesmente envia dados fictícios para o GPS e mede seu tempo. O valor de retorno tem 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 de uso da CPU
Conforme mostrado na tabela o SBC pode enviar 88[KB/s] para o GPS, utilizando 100% da CPU. Isso também significa que se seu aplicativo enviar 8.8 [KB/s] para o GPS, ele usará 10% da CPU.
A mesma ideia pode ser aplicada a qualquer aplicativo para obter uma aproximação do uso da CPU e dimensionar seu aplicativo corretamente.