Tijdens het applicatieontwerp moet u weten wat u van de SBC kunt verwachten in termen van rekensnelheid om een applicatie te ontwerpen die alle komende gegevens kan verwerken.
In deze zelfstudie presenteren we een methode om SBC-prestaties in verschillende taken te meten en hoe u deze kunt extrapoleren naar de grootte van uw toepassing.
De code meten
Om de code te meten, gebruiken we eenvoudige functies die de benodigde tijd berekenen voor het verzenden of ontvangen van een aantal bytes. Met die informatie hebben we genoeg om het CPU-gebruik te berekenen en een applicatie te dimensioneren.
Hieronder geven we u een voorbeeld om te benchmarken GPS bewerkingen schrijven. Het stuurt eenvoudigweg dummygegevens naar de GPS en meet de tijd. De geretourneerde waarde heeft eenheden van [bytes/seconde]
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
Resultaten
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] |
CPU-gebruiksberekening
Zoals in de tabel te zien is, kan de SBC 88 [KB/s] naar de GPS sturen, gebruikmakend van 100% van de CPU. Het betekent ook dat als uw toepassing 8.8 [KB/s] naar de GPS verzendt, deze 10% van de CPU gebruikt.
Hetzelfde idee kan op elke toepassing worden toegepast om een schatting te krijgen van het CPU-gebruik en om uw toepassing de juiste grootte te geven.