26 мая 2018
Кравченко Виктор

Raspberry Pi 3: Model B+ vs Model B — сравнительное тестирование

Радиотехника и электроника Цифровые устройства Умный дом Raspberry
01 На заметку:
У данной статьи есть видеоверсия!
Подписывайтесь на канал , чтобы быть в курсе обновлений!
02

Введение

В сравнительном тестировании будут использоваться две платы — Raspberry Pi 3 Model B (2016) и Raspberry Pi 3 Model B+ (2018).

04

Отличительные технические характеристики плат представлены в таблице:

05
Raspberry Pi 3
Model B (2016) Model B+ (2018)
Чип Broadcom BCM2837,
Cortex-A53, 64-bit,
quad-core SoC @ 1.2GHz
Broadcom BCM2837B0,
Cortex-A53, 64-bit,
quad-core SoC @ 1.4GHz
Улучшенное управление температурой и производительностью
ОЗУ 1GB LPDDR2 SDRAM 1GB LPDDR2 SDRAM
Wi-Fi IEEE 802.11 b/g/n
2.4GHz
Wireless LAN (WLAN)
IEEE 802.11 b/g/n/ac
2.4GHz/5GHz
Wireless LAN (WLAN)
Bluetooth Bluetooth Low Energy 4.1 (BLE) Bluetooth Low Energy 4.2 (BLE)
Чип беспроводной связи Broadcom BCM43438 Cypress CYW43455
Чип USB/LAN Microchip LAN9514 Microchip LAN7515
Скорость передачи данных по LAN 100 Мб/сек 300 Мб/сек
(Gigabit Ethernet over USB 2.0)
Поддержка питания PoE Отсутствует При помощи HAT-переходника
PXE-загрузка по Ethernet Да Да, устранены ошибки
Требования к питанию 5В, 2.0А 5В, 2.5А
Заявленная цена $35 $35
06

Все тесты исполняются на платах «как есть», из коробки — без корпусов, радиаторов или иных источников активного охлаждения. В обоих экземплярах используются две одинаковые флешкарты MicroSDHC Sony SR-16UYV 16Gb 10Class. На обеих флешках развернут образ Raspbian Stretch With Desktop 4.9 (release 2018-04-18, с поддержкой Model B+). Блок питания 5В/2,5А.

07

Запуск системы

В данном сравнении будут интересны два показателя — первый и второй запуск.

08
Результаты:
09
Преимущество новой RPi B+ не так очевидно, особенно учитывая незначительность и непринципиальность показателя Первый запуск
Преимущество новой RPi B+ не так очевидно, особенно учитывая незначительность и непринципиальность показателя «Первый запуск»
10

Вычисление числа π, с различным количеством знаков после запятой

Данное сравнение демонстрирует, насколько быстро происходит вычисление количества знаков после запятой числа π (пи).

11
Результаты:
12
13

Как повторить тест?Для вычисления числа π, используется калькулятор bc (англ. Basic Calculator). Перед использованием его необходимо установить:

bc (англ. basic calculator) — интерактивный интерпретатор Си-подобного языка, позволяет выполнять вычисления с произвольно заданной точностью.
14
1
sudo apt-get install bc
15

Команда вычисления числа π (пи):

16
1
time echo "scale=10000; 4*a(1)" | bc -l
17

Где:

  • time — по завершении расчета выводит информацию о затраченном времени
  • scale=10000 — точность, количество знаков после запятой — в данном случае 1000
  • 4*a(1) — выражение для расчета числа пи — арктангенс числа 1 умножается на 4 (функция a() вычисляет арктангенс, $arctan(1)=45°={π\over4}$)
  • bc -l — параметр -l указывает на использование стандартной библиотеки математических функций

18

Тестирование производится при помощи скрипта getpi.sh, поочередно запускающего расчет числа π, с возрастающей точностью:

19
1
2
3
4
5
6
7
#!/bin/bash for scale in 10 100 1000 10000 do time echo "scale=$scale; 4*a(1)" | bc -l echo "________________" echo "" done
getpi.sh
20

Запуск скрипта:

21
1
bash getpi.sh
22 На заметку:
Для вызова скрипта напрямую (без bash), скрипту нужно назначить права на исполнение:
1
sudo chmod +x /home/pi/getpi.sh

Для интерактивной задачи точности расчета, можно использовать следующий вариант скрипта:
1
2
#!/bin/bash time echo "scale=$1; 4*a(1)" | bc -l

Пример вызова скрипта (после назначения прав на исполнение) с точностью 10000 знаков после запятой:
1
/home/pi/getpi.sh 10000

или
1
./getpi.sh 10000
23

Пропускная способность Ethernet и Wi-Fi (2,4 ГГц)

Тестирование пропускной способности гигабитного Ethernet over USB производится при помощи утилиты iperf3. Для подключения по Ethernet, Windows-ПК оснащен гигабитным сетевым PCI-адаптером TP-Link TG-3269.


Сетевая PCI-карта TP-Link TG-3269
24

Малинка подключена по витой паре напрямую к ПК, минуя роутеры и свитчи. При копировании по SCP инициатором копирования выступает Raspberry Pi 3, при копировании при помощи FileZilla инициатором выступает Windows-ПК:

25
26

В тестировании пропускной способности по Wi-Fi (2,4 ГГц) Малинка является единственным Wi-Fi-клиентом в сети:

27
28
Результаты:
29
Ограничения USB, поверх которого реализован гигабитный Ethernet оказывают влияние на максимальную скорость
Ограничения USB, поверх которого реализован гигабитный Ethernet оказывают влияние на максимальную скорость
30
31

Как повторить тест?В первую очередь необходимо установить утилиту iperf3 на Малинку:

32
1
sudo apt-get install iperf3 -y
33

И скачать версию утилиты iperf3 для Windows.

34 На заметку:
Для получения основных параметров Wi-Fi-сети можно выполнить команду:
1
iwconfig



Разница в значениях показателей приведена в таблице:


Для отключения режима управления питанием Wi-Fi, необходимо выполнить команду:
1
sudo iwconfig wlan0 power off

Вернуть обратно:
1
sudo iwconfig wlan0 power on
35

Для запуска утилиты в Windows необходимо в командной строке запустить файл ipref3.exe с параметрами. Для запуска сервера:

36
1
iperf3.exe -s
37

Для запуска клиента (необходимо указывать IP-адрес сервера):

38
1
iperf3.exe -c 192.168.0.49
39

Таким образом, если Windows-ПК (192.168.0.49) выступает сервером, а Raspberry Pi (192.168.0.98) выступает клиентом, то необходимо выполнить следующие команды:

40
1
2
3
4
5
# на Windows-ПК: iperf3.exe -s # на Raspberry Pi iperf3 -c 192.168.0.49
41

Если наоборот — Raspberry Pi сервер и Windows-ПК клиент, то:

42
1
2
3
4
5
# на Raspberry Pi iperf3 -s # на Windows-ПК: iperf3.exe -c 192.168.0.98
43
44

Копирование файлов по сети — Ethernet

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

45

Тестирование скорости обмена данными по сети осуществляется на задаче копирования файлов. Файл копируется с Raspberry Pi 3 на Windows-ПК и обратно — с Windows-ПК на Raspberry Pi 3. SSH-сервер развернут на Windows-ПК.

46

Результаты:

47
48

Как повторить тест?SCP с FreeSSHd. В данном примере копирование осуществляется с Raspberry Pi на Windows-компьютер и обратно по протоколу SCP, при помощи одноименной утилиты.

SCP (от англ. secure copy) — протокол особого копирования файлов, использующий в качестве транспорта SSH.
49 Важно:
Для копирования файлов с использованием SSH, он должен быть включен. Сделать это можно двумя путями:
  • Кнопка ПУСК → Preferences → Raspberry Pi Configuration, вкладка Interfaces, SSH → Enabled

  • Выполнить в терминале команду sudo raspi-config. В появившемся окне выбрать Interfacing Options → SSH.
50

Для этого на Windows-компьютере необходимо запустить SSH-сервер, например, FreeSSHd. В конце установки, необходимо сгенерировать ключи:

51
52

Отменить запуск сервера как службы:

53
54

Далее, вызвав контекстное меню, щелкнув на значке в области уведомлений, нужно завершить работу сервера, и запустить его с правами администратора. Это необходимо для того, чтобы FreeSSHd мог сохранять все изменяемые параметры.

55
56
57

После открытия окна, зеленая галочка будет свидетельствовать об успешном запуске SSH-сервера.

58
59

Далее на вкладке Users остается создать пользователя, под данными которого будет осуществляться копирование:

60
61
62

И изменить папку по умолчанию, в которую будет осуществляться копирование (по умолчанию, шаблон $HOME\ соответствует папке C:\Users\User):

63
64

Теперь для копирования файла с Raspberry Pi на Windows-компьютер, в терминале Малинки нужно выполнить команду:

65
1
scp /home/pi/Videos/movie.avi user@192.168.0.50:movie.avi
66
67

Для копирования в обратную сторону выполняется следующая команда:

68
1
scp user@192.168.0.50:movie.avi /home/pi/Videos/movie.avi
69

Как повторить тест?SFTP с FileZilla. В данном примере копирование осуществляется с Raspberry Pi на Windows-компьютер и обратно по протоколу SFTP, при помощи файлового менеджера FileZilla для Windows. Инициатором копирования, вне зависимости от направления, выступает Windows-ПК.

70

После установки и запуска FileZilla, вызывается Менеджер сайтов:

71
72

Вводятся параметры подключения: IP-адрес Малинки, протокол и данные пользователя (по умолчанию, логин: pi, пароль: raspberry)

73
74

После соединения, можно осуществлять операции копирования:

75
76

Температура и частота процессора

Цель данного теста — продемонстрировать разницу в алгоритмах управления работой процессора в условиях максимальной загруженности, без охлаждения — троттлинг, при превышении максимально допустимой температуры.

Троттлинг (англ. throttling, пропуск тактов) — механизм пропуска части машинных тактов (циклов) в цифровой электронике с целью в том числе и защиты процессора, от термического повреждения при перегреве.
77
Результаты:
78
График наглядно демонстрирует эффективность примененных средств — металлической крышки для охлаждения чипа и алгоритмов обработки троттлинга для безопасности при перегреве
График наглядно демонстрирует эффективность примененных средств — металлической крышки для охлаждения чипа и алгоритмов обработки троттлинга для безопасности при перегреве
79

Результаты раздельно:

80
Raspberry Pi 3 Model B (2016)
Raspberry Pi 3 Model B (2016)
Raspberry Pi 3 Model B+ (2018)
Raspberry Pi 3 Model B+ (2018)
81

Как повторить тест?Для тестирования процессора под нагрузкой используется утилита sysbench, которую нужно предварительно установить:

Исходники утилиты sysbench на GitHub — https://github.com/akopytov/sysbench

Мануал — sysbench-manual.pdf
82
1
sudo apt-get install sysbench
83

Для умышленного повышения температуры процессора используется Bash-скрипт, максимально нагружающий все ядра (4 потока):

84
1
2
3
4
5
#!/bin/bash for((i=1;i<=10;i++)) do sysbench --num-threads=4 --test=cpu --cpu-max-prime=20000 --validate run done
test_temp.sh
85

Скрипт запускается командой bash (а не sh):

86
1
bash test_temp.sh
87

Для сохранения и отображения данных, используется скрипт на Python. За отображение графика температуры отвечает библиотека Matplotlib, которую нужно установить перед использованием:

88
1
sudo apt-get install python3-matplotlib
89

Скрипт основан на вызове утилиты vcgencmd с параметром измерения температуры чипа — measure_temp (о прочих параметрах утилиты vcgencmd можно почитать здесь):

90
1
vcgencmd measure_temp
91
92 На заметку:
Данный способ получения температуры используется в модернизации обычной активной системы охлаждения в умную:

93

Актуальная частота также запрашивается через утилиту vcgencmd, но уже с параметром measure_clock arm:

94
1
vcgencmd measure_clock arm
95
96

Содержимое скрипта measure_temp_freq.py:

97 Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from subprocess import check_output # Импортируем библиотеку по работе с внешними подпроцессами from time import sleep, strftime, time # Импортируем библиотеку для работы со временем import matplotlib.pyplot as plt # Импортируем библиотеку Matplotlib для построения графиков from re import findall # Импортируем библиотеку по работе с регулярными выражениями plt.ion() # Инициализируем x = [] y = [] def get_temp(): temp = check_output(["vcgencmd","measure_temp"]).decode() # Выполняем запрос температуры temp = float(findall('\d+\.\d+', temp)[0]) # Извлекаем при помощи RE значение температуры из строки "temp=47.8'C" return(temp) # Возвращаем результат def get_freq(): freq = check_output(["vcgencmd","measure_clock arm"]).decode() # Выполняем запрос частоты freq = int(findall('\d+', freq)[1])/1000000 # Извлекаем при помощи RE значение частоты return(freq) # Возвращаем результат def write_temp_freq(temp, freq): # Функция записи значений температуры и частоты в файл with open("cpu_temp_freq.csv", "a") as log: log.write("{0}\t{1}\t{2}\n".format(strftime("%Y-%m-%d %H:%M:%S"),str(temp).replace(".",","),str(freq).replace(".",","))) def graph(temp): # Функция отображения данных на графике y.append(temp) x.append(time()) plt.clf() plt.scatter(x,y) plt.plot(x,y) plt.draw() while True: # Бесконечный цикл запроса температуры temp = get_temp() # Получаем значение температуры freq = get_freq() # Получаем значение температуры write_temp_freq(temp, freq) # Записываем полученную температуру в файл #graph(temp) # Отображаем температуру на графике print(temp, "°C, ", freq, "MHz") # Выводим температуру в консоль sleep(1) # Ждем 1 секунду
measure_temp_freq.py
98

Сначала из оболочки Shell запускается скрипт measure_temp_freq.py, а затем в терминале запускается на выполнение скрипт test_temp.sh.

99 На заметку:
Скетч, позволяющий динамически выводить график температуры/частоты во время выполнения тестов при помощи библиотеки Matplotlib (также нагружает процессор и искажает результаты) — measure_temp_freq_only_graph.py (4,47 KB):

100

Тестирование процессора (CPU)

Процессор тестируется также при помощи утилиты sysbench, используя вычисления с 64-разрядными числами.

101
Результаты:
102
103

Как повторить тест?Для замеров скорости процессора используется та же команда, которая использовалась при исследовании троттлинга процессора, за тем лишь исключением, что выполняется с задействованием одного ядра:

104
1
sysbench --test=cpu --cpu-max-prime=10000 run
105

Тестирование оперативной памяти

Оперативная память тестируется также при помощи утилиты sysbench. Здесь измеряется производительность последовательных операций чтения/записи в оперативную память.

106
Результаты:
107
108

Как повторить тест? Тест выполняется до тех пор, пока в выделенный буфер памяти не будет записан/считан объем, передаваемый в параметре --memory-total-size — 2 Гб:

109
1
sysbench --test=memory --memory-total-size=2G run
110

Тестирование скорости чтения/записи файловой системы

Здесь используется тест sysbench.

111
Результаты:
112
113

Как повторить тест?При подготовке теста создаются рабочие файлы заданного суммарного размера (10 Мб):

114
1
sysbench --test=fileio --file-total-size=10M --file-test-mode=rndrw prepare
115

Далее запускается непосредственно тест — осуществляются операции чтения/записи:

116
1
sysbench --test=fileio --file-total-size=10M --file-test-mode=rndrw run
117

Удаление рабочих файлов, созданных на этапе подготовке теста:

118
1
sysbench --test=fileio --file-total-size=10M --file-test-mode=rndrw cleanup
119

Графика

Замеры производительности в графических задачах производятся при помощи пакета GeeXLab на следующих демках:

  • vertex_pool_particles
  • sphere_env_mapping
  • texture_mapping

120
Результаты:
121
122

Как повторить тест?Скачать архив с пакетом GeeXLab (по умолчанию, в папку /home/pi/):

123
1
wget http://geeks3d.com/dl/get/505 -O GeeXLab.zip
124

И распаковать скачанный ZIP-архив:

125
1
unzip GeeXLab.zip
126

Для удобства можно переименовать распакованную папку GeeXLab_FREE_rpi_gl21 в более лаконичную и удобную GeeXLab:

127
1
mv GeeXLab_FREE_rpi_gl21 GeeXLab
128

Далее, в терминале вызвать окно настроек:

129
1
sudo raspi-config
130

В разделе Advanced Options → GL Driver включить использование OpenGL — GL (Full KMS) и перезагрузить Малинку.

131

После перезагрузки, для проверки, в оконном интерфейсе двойным щелчком запустить файл GeeXLab (и выбрать Execute) в папке /home/pi/GeeXLab:

132
133

В появившемся окне в поле GL_VERSION должна стоять версия 2.1:

134
135

Теперь, из терминала нужно перейти в папку с GeeXlab (/home/pi/GeeXLab):

136
1
cd /home/pi/GeeXLab
137

В файле demo.sh, открыв его в любом текстовом редакторе:

138
1
sudo nano demo.sh
139

Закомментировать строку:

140
1
./GeeXLab /demofile=\"./demos/gear/main.xml\"
141

И раскомментировать строку с той демкой, которую планируется запускать:

142
1
2
3
4
5
#./GeeXLab /demofile=\"./demos/vertex_pool_particles/demo_sphere_gl21.xml\" # или #./GeeXLab /demofile=\"./demos/sphere_env_mapping/demo_gl21.xml\" # или #./GeeXLab /demofile=\"./demos/texture_mapping/textured_quad_gl21.xml\"
143

Запускать демку можно следующей командой:

144
1
sh ./demo.sh
145
146
147
148

Python и GPIO

Данный тест показывает скорость переключения состояния пинов GPIO заданное количество раз.

149
Результаты:
150
Время исполнения в миллисекундах
Время исполнения в миллисекундах
151

Как повторить тест?Для повторения теста необходимо запустить следующий скетч на Python:

152 Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import RPi.GPIO as GPIO # Импортируем библиотеку по работе с GPIO from datetime import datetime, timedelta # Импортируем библиотеку для работы со временем try: pin = 5 # Переменная с номером пина GPIO.setmode(GPIO.BCM) # Устанавливаем режим нумерации пинов GPIO.setup(pin, GPIO.OUT, initial=1)# Инициализируем пин alltime = 0 # Переменная для вычисления среднего времени выполнения одного замера for k in range(0,10): # Переменная количества замеров i = 0 now = datetime.now() # Фиксируем время начала for i in range(0,1000000): # Переменная количества итераций в одном замере GPIO.output(pin, GPIO.HIGH) # Переключаем пин в HIGH GPIO.output(pin, GPIO.LOW) # Переключаем пин в LOW delta = (datetime.now() - now) # Получаем разницу во времени delay = (delta.total_seconds()*1000) # Получаем время исполнения одного цикла в мс alltime += delay print(delay) # Выводим полученное время k+=1 print("Среднее значение: " + str(round(alltime/10,2)) + " мс") # Выводим среднее время одного замера finally: GPIO.cleanup() # Возвращаем пины в исходное состояние print("End of program") # Информируем о завершении работы программы
test_python_GPIO.py
153

В скетче 10 раз запускается цикл по 1000000 полной смене состояния одного пина, вычисляется среднее время выполнения каждого цикла и, в завершение, в консоль выводится расчитанное среднее время в мс, затрачиваемое на выполнение одного цикла.

154

Энергопотребление

Для замеров энергопотребления используется USB-мультиметр. Замеры проводятся в состоянии покоя и в состоянии максимальной загруженности 4 ядер, во время исполнения утилиты sysbench из раздела о троттлинге.

155
В показателе C нагрузкой указан максимальный зафиксированный ток в процессе работы утилиты span class=monosysbench/span с задействованием 4 ядер.
В показателе «C нагрузкой» указан максимальный зафиксированный ток в процессе работы утилиты sysbench с задействованием 4 ядер.
156

Выводы

Цена новой RPi Model B+ не сопоставима приросту в производительности.

158

Похожие запросы:

  • How can I generate Pi to a given number of decimal places from a script?
  • Поиск информации о системе Raspberry Pi
  • Тестирование производительности Raspberry Pi 3
  • Сравнение производительности Raspberry Pi 3 Model B+
  • Вычисление числа π (пи)
  • Calculer le nombre Pi en ligne de commande sous Linux
comments powered by HyperComments