Raspberry Pi3 против DragonBoard: разработка приложений на Python

29 июня
Николай Хабаров
Raspberry Pi3 против DragonBoard: разработка приложений на Python

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.