Во время разработки приложения вам необходимо знать, чего ожидать от SBC с точки зрения скорости вычислений, чтобы разработать приложение, способное обрабатывать все поступающие данные.
В этом руководстве мы представляем метод измерения производительности SBC в различных задачах и способы ее экстраполяции на размер вашего приложения.
Измерение кода
Для измерения кода мы используем простые функции, которые вычисляют время, необходимое для отправки или получения набора байтов. С этой информацией у нас достаточно, чтобы вычислить загрузку ЦП и размер приложения.
Ниже мы приводим пример для сравнительного анализа операций записи GPS. Он просто отправляет фиктивные данные в GPS и измеряет время. Возвращаемое значение имеет единицы измерения [байт/секунду]
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
Результаты
| 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] |
Расчет использования ЦП
Как показано в таблице, SBC может отправлять 88 [КБ/с] в GPS, используя 100% ЦП. Это также означает, что если ваше приложение отправляет 8.8 [КБ/с] в GPS, оно использует 10% ЦП.
Та же идея может быть применена к любому приложению, чтобы получить приблизительное представление об использовании ЦП и правильно определить размер вашего приложения.
и