с точки зрения Python

Python - идеальный язык для создания простых PoC-проектов. Мы не будем говорить о полном списке преимуществ Python, но самым удивительным является то, что Python является кроссплатформенным. Эта функция очень полезна для создания приложений для встраиваемых систем. Не нужно ждать, пока компилятор соберет двоичные файлы, не нужно развертывать приложения на плате. И тот же код работает на настольном ПК, а также на платах на базе Linux, таких как Raspberry Pi.

Однако у этого подхода есть свои пределы. Его нельзя использовать для некоторых проектов, связанных с оборудованием, например настольный компьютер не имеет SPI. И очевидно, что платы на базе ARM медленнее, чем ПК. Таким образом, в некоторых случаях алгоритм, идеально работающий на настольном компьютере, испытывает недостаток производительности во встроенной системе.

Сравнение производительности

Производительность была критической в ​​одном из наших последних проектов. В качестве одной из целевых платформ мы использовали Dragonboard 410c. Мы были приятно удивлены работой платы. Даже без инструментального тестирования мы почувствовали значительный рост количества установок пакетов ОС, запуска приложений и общей производительности по сравнению с Raspberry Pi 3.

Выглядит вполне одинаково и не объясняет превосходных характеристик DragonBoard. Поэтому мы провели тест производительности, чтобы понять, действительно ли он быстрее.

Эталонный тест

Мы решили измерить производительность Python 3 на этих платах как наиболее интересную для нас версию. Мы использовали Python Performance Benchmark Suite, который утверждает, что он ориентирован на реальные тесты, а не на синтетические тесты с использованием целых приложений, где это возможно.

Мы использовали нашу любимую ОС для встраиваемых платформ Ubuntu Core 16. Эта операционная система согласована и предоставляет обновления транзакций. И, что наиболее важно, он поддерживает обе платы для нашего тестового тестирования. Мы установили Ubuntu Core на SD-карту и использовали классическую среду для проведения теста.

Следующая команда устанавливает Pyperformance:

pip3 install pyperformance

Мы запустили его с помощью:

echo pyperformance run --python=python3 -o result.json | nohup sudo classic &

Мы использовали эту хитрую команду только для того, чтобы позволить тесту работать в фоновом режиме без активного ssh-соединения, поскольку это требует времени, и чтобы избежать каких-либо проблем из-за потерянного ssh-соединения (тест также будет остановлен).

Результаты

Результаты действительно удивительны. DragonBoard почти в два раза быстрее, чем Raspberry Pi 3! Теперь мы понимаем, почему мы почувствовали такой прирост производительности. Конечно, официальное ядро ​​Raspberry Pi 3 использует 32-битную архитектуру armhf (v7), а DragonBoard 410c имеет 64-битное ядро ​​amr64 (v8). Поскольку Python много использует 64-битную арифметику, вероятно, это объясняет разницу.

Заключительные тесты Sysbench

И чтобы подтвердить этот результат с помощью нативного кода, давайте также запустим тест «sysbench». В Sysbench есть несколько тестов, которые мы хотели бы запустить: процессор, память, потоки, мьютекс. Эти тесты более синтетические, но давайте все равно сравним вычислительную мощность плат.

Тест CPU в 25 раз быстрее. Это потому, что в тесте ЦП используются явные 64-битные целые числа. И это сценарий, в котором 64-битная ОС имеет действительно большое преимущество. Остальные тесты проходят примерно в два раза быстрее, что очень похоже на pybenchmark. Несмотря на то, что тест потоков не должен зависеть от 64-битного ядра.

Заключение

Конечно, всегда есть возможность разработать свой проект на C или даже на чистом Ассемблере и добиться большей производительности. Но обычно время разработки дороже, чем цена платы. Просто дешевле, эффективнее и продуктивнее использовать такие инструменты, как Python, которые помогают разрабатывать более качественный продукт и быстрее выводить его на рынок.

Снижение производительности, вызванное Python, можно легко преодолеть с помощью более мощной платы. Мы очень надеемся, что в официальном образе Raspberry Pi будет 64-битная ОС. Но на данный момент DragonBoard 410c - идеальный выбор для разработки приложений Python.

Автор Николай Хабаров, старший архитектор DataArt.