Lors de la conception de l'application, vous devez savoir à quoi vous attendre du SBC en termes de vitesse de calcul pour concevoir une application capable de traiter toutes les données entrantes.
Dans ce tutoriel, nous présentons une méthode pour mesurer les performances SBC dans différentes tâches et comment l'extrapoler pour dimensionner votre application.
Mesurer le code
Pour mesurer le code, nous utilisons des fonctions simples qui calculent le temps nécessaire pour envoyer ou recevoir un tas d'octets. Avec ces informations, nous en avons assez pour calculer l'utilisation du processeur et dimensionner une application.
Ci-dessous, nous vous donnons un exemple pour comparer GPS opérations d'écriture. Il envoie simplement des données factices au GPS et mesure son temps. La valeur de retour a des unités de [octets/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
Résultats
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] |
Calcul de l'utilisation du processeur
Comme indiqué dans le tableau, le SBC peut envoyer 88 [Ko/s] au GPS, en utilisant 100 % du CPU. Cela signifie également que si votre application envoie 8.8[Ko/s] au GPS, elle utilise les 10 % de CPU.
La même idée peut être appliquée à n'importe quelle application pour obtenir une approximation de l'utilisation du processeur et dimensionner correctement votre application.