Raspberry Pi3 против DragonBoard: разработка приложений на Python
Автор: Николай Хабаров, Embedded Expert DataArt, евангелист технологий умного дома.
Python идеально подходит для создания простых PoC-проектов. Всех преимуществ этого языка мы перечислять не будем, обратим внимание на особенность, которая кажется нам одной из самых интересных — кроссплатформенность. Именно благодаря ей Python оказывается очень удобным для создания встраиваемых систем. Не нужно компилировать двоичные файлы, нет необходимости заниматься развертыванием приложений. Тот же код работает как на ПК, так и на одноплатных решениях на базе Linux (например, Raspberry Pi).
Однако у этого подхода есть и свои ограничения. Он не может быть использован для некоторых проектов, требующих определенного оборудования (например, у настольных ПК может не быть и скорее всего не будет SPI, I2C и т. д.). И, конечно же, платы на базе архитектуры ARM работают медленнее, чем персональный компьютер. Поэтому в некоторых случаях алгоритм, отлично работающий на ПК, будет недостаточно производительным на встраиваемой системе.
Высокая производительность была важна для одного из наших последних проектов.
Мы использовали Dragonboard 410c в качестве одной из целевых платформ и были приятно удивлены производительностью платы. Даже без инструментального бенчмаркинга мы заметили значительно более высокую скорость при установке пакетов ОС, запуске приложений и общей производительности по сравнению с Raspberry Pi 3. Давайте посмотрим на спецификации плат:
| Плата | Raspberry Pi 3 | DragonBoard 410c |
|---|---|---|
| Процессор | BCM2837, Quad-core ARMA53(v8) 1.2GHz |
Snapdragon 410E, Quad-core ARMA53(v8) 1.2GHz |
| Память | 1GB | 1GB |
Характеристики примерно одинаковые — они не объясняют лучшую производительность DragonBoard, которую мы видели своими глазами. Поэтому мы провели тест производительности, чтобы убедиться в том, действительно ли эта плата быстрее.
Мы решили измерить на этих платах производительность Python 3 — самой интересной для нас версии этого языка программирования. Мы использовали Python Performance Benchmark Suite, который основывается главным образом на тестах производительности в реальных условиях, а не на синтетических бенчмарках, и использует существующие приложения везде, где это возможно.
Мы использовали нашу любимую ОС для встроенных платформ — Ubuntu Core 16. Это консистентная операционная система с транзакционными обновлениями, которая (что самое главное) поддерживает обе платы, принимающие участие в нашем тестировании. Мы установили Ubuntu Core на SD-карту и использовали snap «classic» для создания традиционной среды ubuntu для проведения теста.
Эта команда устанавливает Pyperformance:
pip3 install pyperformance
Для запуска мы использовали следующие параметры:
echo pyperformance run –python=python3 -o result.json | nohup sudo classic &
Тест длится достаточно долго, поэтому мы использовали эту сложную команду, чтобы тестирование выполнялось в фоновом режиме без активного ssh-соединения. Это также позволило избежать проблем, вызванных разрывом того же ssh-соединения, которое повлекло бы за собой остановку теста.
Вот что мы получили в итоге:
Результаты нас сильно удивили. Производительность DragonBoard почти в два раза выше, чем у Raspberry Pi 3! Конечно, не стоит забывать, что официальное ядро Linux для Raspberry Pi 3 имеет 32-битную архитектуру armhf (v7), а ядро DragonBoard 410c — 64-битную архитектуру amr64 (v8). Вероятно, разница производительности вызвана тем, что Python использует 64-битные вычисления.
Давайте также запустим sysbench — тест, использующий нативный код. Sysbench включает в себя несколько тестов, которые мы хотели бы запустить: cpu, memory, threads, mutex. Эти тесты относятся к более «синтетическим», но в любом случае давайте сравним чистую вычислительную мощность плат. Результаты ниже:
| Тест | Raspberry Pi3 | DragonBoard 410c |
|---|---|---|
| cpu sysbench –test=cpu run |
318.1229s | 12.6500s |
| memory sysbench –test=memory –memory-total-size=2G run |
7.5322s | 3.0507s |
| threads sysbench –test=threads run |
23.1469s | 9.1600s |
| mutex sysbench –test=mutex run |
0.0283s | 0.0141s |
По итогам теста cpu процессор DragonBoard 410c оказался в 25 раз быстрее Raspberry Pi. Это связано с тем, что в тесте cpu используются вычисления с 64-разрядными числами, а в таком случае 64-битная операционная система действительно имеет большое преимущество. Другие тесты показали, что производительность DragonBoard примерно в два раза выше, что в целом соответствует показателям pybenchmark. При этом нужно учесть, что 64-битное ядро не должно влиять на тестирование теста threads.
Конечно, всегда есть возможность разработать свой проект с помощью C или даже одного только ассемблера и получить лучшую производительность. Но обычно время разработки дороже стоимости платы. Использование таких инструментов, как Python, дешевле, эффективнее и производительнее. С их помощью можно создать более качественный продукт и быстрее вывести его на рынок. Снижение производительности, вызванное Python, можно легко преодолеть с помощью более мощной платы. Мы очень надеемся, что официальные мэйнтейнеры выпустят 64-битную версию ядра Raspberry Pi, но на сегодня идеальным выбором для разработки встраиваемых приложений на Python остается DragonBoard 410c.
Источник

Airbus A220 первым из пассажирских самолётов получит систему навигации, не зависящую от GPS
Все 33 Raptor включились на 15 секунд: SpaceX провела успешные огневые испытания ускорителя Super Heavy B22
Boeing недосчитывается до $6,5 млн ежедневно: выпуск грузовых 777F почти два месяца простаивает
«Выбор очевиден»: Airbus намерен нарастить выпуск A350 — мировой авиации требуется больше широкофюзеляжных лайнеров
Samsung Galaxy S27 Ultra оснастят батареей на 5700 мА·ч, 60-ваттной зарядкой, 200-мегапиксельной камерой и защитой по стандарту IP68
Nvidia планирует ввести подписку на $2000 в год за каждую видеокарту для работы с нейросетями
Раскрыты характеристики Samsung Galaxy S27 Pro: аккумулятор на 5200 мАч, 2К-экран, камера 200 Мп и защита IP68
Теперь смотреть сериалы и листать TikTok можно на собственном рукаве: учёные вшили в ткань экран