Podczas projektowania aplikacji musisz wiedzieć, czego się spodziewać po SBC pod względem szybkości obliczeń, aby zaprojektować aplikację, która będzie w stanie przetwarzać wszystkie nadchodzące dane.
W tym samouczku przedstawiamy metodę pomiaru wydajności SBC w różnych zadaniach oraz sposób jej ekstrapolacji w celu dostosowania do rozmiaru aplikacji.
Pomiar kodu
Do pomiaru kodu używamy prostych funkcji, które obliczają czas wymagany na wysłanie lub odebranie pakietu bajtów. Dzięki tym informacjom mamy wystarczająco dużo, aby obliczyć użycie procesora i rozmiar aplikacji.
Poniżej podajemy przykład do porównania GPS operacje zapisu. Po prostu wysyła fałszywe dane do GPS i mierzy swój czas. Wartość zwracana ma jednostki [bajtów/sekundę]
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
Efekt
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] |
Obliczanie użycia procesora
Jak pokazano w tabeli, SBC może wysłać do GPS 88[KB/s], wykorzystując 100% procesora. Oznacza to również, że jeśli Twoja aplikacja wysyła 8.8 [KB/s] do GPS, zużywa 10% procesora.
Ten sam pomysł można zastosować do dowolnej aplikacji, aby uzyskać przybliżone wykorzystanie procesora i prawidłowy rozmiar aplikacji.