01 | На заметку: |
У данной статьи есть видеоверсия!
Подписывайтесь на канал
, чтобы быть в курсе обновлений! |
|
02 |
Введение В сравнительном тестировании будут использоваться две платы — Raspberry Pi 3 Model B (2016) и Raspberry Pi 3 Model B+ (2018). |
|
04 |
Отличительные технические характеристики плат представлены в таблице: |
|
05 |
|
|
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+ не так очевидно, особенно учитывая незначительность и непринципиальность показателя «Первый запуск»
|
|
10 |
Вычисление числа π, с различным количеством знаков после запятой Данное сравнение демонстрирует, насколько быстро происходит вычисление количества знаков после запятой числа π (пи). |
|
11 |
Результаты:
|
|
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 |
Где:
|
|
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-ПК: |
|
26 |
В тестировании пропускной способности по Wi-Fi (2,4 ГГц) Малинка является единственным Wi-Fi-клиентом в сети: |
|
28 |
Результаты:
|
|
29 |
Ограничения USB, поверх которого реализован гигабитный Ethernet оказывают влияние на максимальную скорость
|
|
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 |
|
44 |
Копирование файлов по сети — Ethernet Показатель пропускной способности является номинальным показателем и не дает представления о скорости исполнения реальных задач. |
|
45 |
Тестирование скорости обмена данными по сети осуществляется на задаче копирования файлов. Файл копируется с Raspberry Pi 3 на Windows-ПК и обратно — с Windows-ПК на Raspberry Pi 3. SSH-сервер развернут на Windows-ПК. |
|
46 |
Результаты: |
|
48 |
Как повторить тест?SCP с FreeSSHd. В данном примере копирование осуществляется с Raspberry Pi на Windows-компьютер и обратно по протоколу SCP, при помощи одноименной утилиты. |
SCP (от англ. secure copy) — протокол особого копирования файлов, использующий в качестве транспорта SSH.
|
49 | Важно: |
Для копирования файлов с использованием SSH, он должен быть включен. Сделать это можно двумя путями:
|
|
50 |
Для этого на Windows-компьютере необходимо запустить SSH-сервер, например, FreeSSHd. В конце установки, необходимо сгенерировать ключи: |
|
52 |
Отменить запуск сервера как службы: |
|
54 |
Далее, вызвав контекстное меню, щелкнув на значке в области уведомлений, нужно завершить работу сервера, и запустить его с правами администратора. Это необходимо для того, чтобы FreeSSHd мог сохранять все изменяемые параметры. |
|
57 |
После открытия окна, зеленая галочка будет свидетельствовать об успешном запуске SSH-сервера. |
|
59 |
Далее на вкладке Users остается создать пользователя, под данными которого будет осуществляться копирование: |
|
62 |
И изменить папку по умолчанию, в которую будет осуществляться копирование (по умолчанию, шаблон $HOME\ соответствует папке C:\Users\User): |
|
64 |
Теперь для копирования файла с Raspberry Pi на Windows-компьютер, в терминале Малинки нужно выполнить команду: |
|
65 |
1 scp /home/pi/Videos/movie.avi user@192.168.0.50:movie.avi |
|
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, вызывается Менеджер сайтов: |
|
72 |
Вводятся параметры подключения: IP-адрес Малинки, протокол и данные пользователя (по умолчанию, логин: pi, пароль: raspberry) |
|
74 |
После соединения, можно осуществлять операции копирования: |
|
76 |
Температура и частота процессора Цель данного теста — продемонстрировать разницу в алгоритмах управления работой процессора в условиях максимальной загруженности, без охлаждения — троттлинг, при превышении максимально допустимой температуры. |
Троттлинг (англ. throttling, пропуск тактов) — механизм пропуска части машинных тактов (циклов) в цифровой электронике с целью в том числе и защиты процессора, от термического повреждения при перегреве.
|
77 |
Результаты:
|
|
График наглядно демонстрирует эффективность примененных средств — металлической крышки для охлаждения чипа и алгоритмов обработки троттлинга для безопасности при перегреве |
79 |
Результаты раздельно: |
|
80 |
|
|
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 |
|
92 | На заметку: |
Данный способ получения температуры используется в модернизации обычной активной системы охлаждения в умную:
|
|
93 |
Актуальная частота также запрашивается через утилиту vcgencmd, но уже с параметром measure_clock arm: |
|
94 |
1 vcgencmd measure_clock arm |
|
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 |
Результаты:
|
|
103 |
Как повторить тест?Для замеров скорости процессора используется та же команда, которая использовалась при исследовании троттлинга процессора, за тем лишь исключением, что выполняется с задействованием одного ядра: |
|
104 |
1 sysbench --test=cpu --cpu-max-prime=10000 run |
|
105 |
Тестирование оперативной памяти Оперативная память тестируется также при помощи утилиты sysbench. Здесь измеряется производительность последовательных операций чтения/записи в оперативную память. |
|
106 |
Результаты:
|
|
108 |
Как повторить тест? Тест выполняется до тех пор, пока в выделенный буфер памяти не будет записан/считан объем, передаваемый в параметре --memory-total-size — 2 Гб: |
|
109 |
1 sysbench --test=memory --memory-total-size=2G run |
|
110 |
Тестирование скорости чтения/записи файловой системы Здесь используется тест sysbench. |
|
111 |
Результаты:
|
|
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 на следующих демках:
|
|
120 |
Результаты:
|
|
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: |
|
133 |
В появившемся окне в поле GL_VERSION должна стоять версия 2.1: |
|
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 |
|
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 нагрузкой» указан максимальный зафиксированный ток в процессе работы утилиты sysbench с задействованием 4 ядер.
|
Проверено — автор рекомендует: Купить USB-измеритель 3 в 1 (тока/напряжения/мощности)Видео-инструкция о покупке со скидками на Aliexpress |
156 |
Выводы Цена новой RPi Model B+ не сопоставима приросту в производительности. |
|
158 |
Похожие запросы:
|
|