ARM异构集群组建与通信性能测试
ARM异构集群组建与通信性能测试
1 介绍
本研究以树莓派、飞腾派、米尔海思三款ARM开发板为基础,组建计算集群,在其上运行实时性测试程序,并结合交换机实现板间通信。
本文正在持续更新中...目前进展和待办事项见文末。
2 系统编译与加载
计划在下述开发板+系统上运行编译好的ARM程序:
| 序号 | 开发板 | 系统 | 状况 |
|---|---|---|---|
| 2.1 | 树莓派 | 原生Raspberry OS | |
| 2.2 | 树莓派 | openEuler 22.03 LTS(树莓派定制) | 成功运行 |
| 2.3 | 飞腾派 | 原生Phytium OS | |
| 2.4 | 飞腾派 | openEuler 23.09 (飞腾定制) | 成功运行 |
| 2.5 | 米尔 | 预置openEuler Embedded 22.03-LTS-SP2 qemu-aarch64 | 成功运行 |
注意:
- 使用make指令编译arm端的可执行文件之后,可以在PC尝试执行(理论上无法执行)。如果可以执行,可能是工具链变量source失败!这种情况是没有报错的。重新source,编译,再尝试。
- 实测,source了工具链变量之后,无法通过在make之后指定参数的方式修改!比如source了aarch64-openeuler-linux-gcc之后,用如下指令指定编译工具链为aarch64-linux-gnu-gcc:
make CROSS_COMPILE=aarch64-linux-gnu-
实际仍以aarch64-openeuler-linux-gcc编译!
3. 如果Makefile中的格式是CC?=$(CROSS_COMPILE)gcc,在make中带参数是无效的:
make CROSS_COMPILE=aarch64-linux-gnu- # 无效!
- 由于有线网络/Wifi的切换,可能会出现同一IP对应不同网卡(eth或wlan)的情况,scp报如下错误:
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
解决方法:
ssh-keygen -R 192.168.0.4
其中的IP地址表示所连接的网段地址(注意修改)。
2.1 树莓派 + 原生Raspberry OS
串口调试 - Windows
可使用MobaExterm进行调试。
串口调试 - Linux
下载驱动
首先下载Linux CH341驱动,按照参考链接安装。
参考链接:CH341 Linux驱动完整使用教程
首先要安装gcc-12。其次要进入driver文件夹,再make。
Key was rejected by service :
https://blog.csdn.net/hydront/article/details/130280075
insmod: ERROR: could not insert module ch341.ko: Invalid module format暂未解决...
现在Linux串口显示ttyUSB0(而非ttyCH341USB0),应该是因为CH341驱动没装上。现在也无法用Linux串口。待解决...
查看串口
之后将串口设备USB端插入Linux PC,查看串口信息:
PC$ sudo dmesg | grep tty
[57673.347646] usb_ch341 1-2:1.0: ttyCH341USB0: ch341 USB device
[57674.024542] usb 1-2: usbfs: interface 0 claimed by usb_ch341 while 'brltty' sets config #1
发现brltty导致USB转串口连接失败。brltty是一个驱动盲文显示器的后台进程,一般用不到,卸载:
sudo apt remove brltty
重新插入,发现可以识别:
PC$ sudo dmesg | grep tty
[57673.347646] usb_ch341 1-2:1.0: ttyCH341USB0: ch341 USB device
PC$ ls /dev | grep ttyCH341
ttyCH341USB0
实测minicom无法连接,执行sudo minicom -D /dev/ttyC341USB0 -b 115200后串口终端卡住。
screen 连接
目前实测screen可用于连接串口。在PC端执行:
screen /dev/ttyCH341USB0 115200
其他开发板的Linux串口终端也可采取此方法连接。
screen 终端支持滚动
鼠标滚轮默认效果是切换命令,而无法查看之前输出的内容。可通过以下方法解决:vi ~/.screenrc为新文件,添加如下内容:
termcapinfo xterm* ti@:te@
termcapinfo xterm|xterms|xs|rxvt 'hs:ts=\E]2;:fs=07:ds=\E]2;screen07'
2.2 树莓派 + openEuler 22.03 LTS SP3
下载镜像
烧录到SD卡
默认情况下,dd指令写入的块大小为512B,较慢。可以按照手册,设置参数bs=4M(实测1M也可):
sudo dd bs=4M if=./openEuler-22.03-LTS-SP3-raspi-aarch64.img of=/dev/sdc status=progress
凡事都需仔细,of参数为sdc(写入整个扇区),如果误作sdc1(即只写入第1个扇区),则会报错,贴图为戒:
基本配置
将SD卡插入树莓派即可启动。
| 用户名 | root | pi |
|---|---|---|
| 密码 | openeuler | raspberry |
基本配置:树莓派使用.md - Gitee
连接Wifi:
nmcli dev wifi connect <SSID> password <PWD>
树莓派4B默认不启用串口,通过如下方法启用:
vi /boot/config.txt,添加enable_uart=1reboot
实测连接到Windows串口平台(MobaExterm等)可以通信,Linux(Ubuntu)端暂时无法通信,待解决。
Linux端在安装了CH341驱动后,插入串口设备,通过
dmesg | grep tty可以看到插入的设备是ttyCH341USB0,但用minicom访问ttyCH341USB0或ttyS0,均没有反应。尝试用PuTTY,串口无法打开。
运行应用
编译工具:aarch64-linux-gnu-gcc
注意:需要确保没有source过aarch64-oe-gcc工具链:
aarch64-openeuler-linux-gcc -v
应当提示“未找到命令”。
修改rt-tests的Makefile:
# 修改前
CC?=$(CROSS_COMPILE)gcc
AR?=$(CROSS_COMPILE)ar
# 修改后
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
指定CROSS_COMPILE的值为aarch64-linux-gnu-,进行编译:
make CROSS_COMPILE=aarch64-linux-gnu-
使用下述命令在当前目录创建rt-tests_bin文件夹,放入编译好的可执行文件,并通过scp指令传到开发板:
mkdir rt-tests_bin
find . -maxdepth 1 -type f -executable -exec mv {} rt-tests_bin/ \;
ls ./rt-tests_bin | wc -w # 查看文件夹及文件数量,应为11
scp -r ./rt-tests_bin pi@192.168.0.8:/home/pi
在开发板端为文件夹中所有文件添加可执行权限:
sudo chmod -R u+x ./rt-tests_bin
即可运行。
2.3 飞腾派 + Phytium OS
保密
2.4 飞腾派 + openEuler 23.09
保密
2.5 米尔 + 预置openEuler Embedded 22.03-LTS-SP2 qemu-aarch64
串口调试 - Windows
用双Type-C线,一端插入DEBUG口,一端连接电脑USB,打开串口终端(如MobaExterm)即可。
串口调试 - Linux
安装minicom:
sudo apt install minicom
赋予用户使用串口权限(用户名username自定义):
sudo usermod -aG dialout username
实测串口设备在Ubuntu 22.04中识别为ttyACM0。
测试方法:将串口USB端插入PC,运行
sudo dmesg | grep tty,如果新增ttyACM0的信息,说明ttyACM0即为串口设备。可以拔插设备再次确认。
启用串口:
# 格式: minicom -D <设备> -b <波特率>
minicom -D /dev/ttyACM0 -b 115200
进入之后敲几次回车,使信息输出。如果命令提示符为=>,是因为进入了uboot界面,输入reset即可正常启动并进入终端。
minicom退出方法:Ctrl-A X,回车。
网络连接
参考文章:米尔MYD-LHI3093配置网络连接
运行应用
参考文章:MYD-LHI3093_openEuler软件开发指南补充
3 实时性测试
Cyclictest是评估实时系统相对性能最常用的工具之一,可以准确且重复地测量线程的预期唤醒时间与实际唤醒时间之间的差异,以便提供有关系统延迟的统计数据。详细介绍参见:参考链接
编译与安装rt-tests
参考链接:rt-tests compile-and-install
首先确保source了aarch64-oe-gcc工具链:
source /home/root/hi3093_tool/toolchain/environment-setup-aarch64-openeuler-linux
测试是否source成功,如果输出相关信息则成功:
aarch64-openeuler-linux-gcc -v
按照上述链接编译安装rt-tests(或单独编译cyclictest),注意要使用aarch64-openeuler-linux-gcc编译,命令:
make CROSS_COMPILE=aarch64-openeuler-linux-
使用下述命令在当前目录创建rt-tests_bin文件夹,放入编译好的可执行文件,并通过scp指令传到开发板:
mkdir rt-tests_bin
find . -maxdepth 1 -type f -executable -exec mv {} rt-tests_bin/ \;
ls ./rt-tests_bin | wc -w # 查看文件夹及文件数量,应为11
scp -r ./rt-tests_bin root@192.168.0.8:/root
运行测试程序
参考链接:Linux 实时性能测试工具—Cyclictest 的使用与分析
在开发板上为rt-tests_bin文件夹中所有文件赋予运行权限:
sudo chmod -R +x ./rt-tests_bin
测试参数举例:
./cyclictest -p 90 - m -c 0 -i 200 -n -h 100 -q -l 1000000
# MYD-LHi3093数据示例 (./cyclictest -p99 -t -m -n -D 1d)
policy: fifo: loadavg: 1.01 1.01 1.00 2/96 2072
T: 0 ( 1963) P:99 I:1000 C:86399712 Min: 8 Act: 13 Avg: 13 Max: 40
T: 1 ( 1964) P:99 I:1500 C:57599802 Min: 9 Act: 13 Avg: 13 Max: 78
T: 2 ( 1965) P:99 I:2000 C:43199847 Min: 9 Act: 10 Avg: 11 Max: 73
T: 3 ( 1966) P:99 I:2500 C:34559990 Min: 9 Act: 14 Avg: 11 Max: 72
多任务运行
目前树莓派可以安装screen实现多终端多任务运行(比如同时运行模拟负载Hackbench、实时性测试Cyclictest和任务管理器top)。
下面给出一种树莓派上模拟负载、实时性测试并监控性能的方案:
PC串口端:top使用任务管理器监控性能。
ARM端(显示器+键鼠直连):创建4个screen并分别模拟负载:
screen -S c1ping
taskset -c 0 /bin/ping -l 100000 -q -s 10 -f localhost &
screen -S c2ping
taskset -c 1 /bin/ping -l 100000 -q -s 10 -f localhost &
screen -S c3ping
taskset -c 2 /bin/ping -l 100000 -q -s 10 -f localhost &
screen -S c4ping
taskset -c 3 /bin/ping -l 100000 -q -s 10 -f localhost &
最后在当前层运行./cyclictest -p99 -t -m -n -D 1d -q -h 100 > output_str_ping测试实时性。
之前提到在PC端运行screen可以实现ARM端串口连接,而在ARM端运行screen可以实现多终端运行,也就是有2层screen。实测在PC端进入ARM端的第2层screen后,按Ctrl-A D将直接退出到PC端,而非第1层。有2种解决方法:
-
在PC端只访问第1层screen。第2层screen由显示器、鼠标键盘直连开发板的方式访问。
-
可以考虑写个脚本,每次开第2层都是临时的,退出即销毁。这样可以在PC端访问第2层screen。
其他开发板(飞腾、米尔)是否能安装screen,未测试。至少可以通过显示器、鼠标键盘直连的方式扩展1个终端,从而运行2个任务(比如Hackbench + Cyclictest)。
目前进展
三种开发板均实现了cyclictest的编译运行,测得3组结果,已上传至服务器。
待办事项
树莓派正在运行cyclictest,在CPU满载的状况下(通过循环ping自身实现)测试实时性。预计4.22 16:08完成。
- 在飞腾和米尔上安装screen
- 需要用openeuler的工具链编译
- 向飞腾反馈:BSP包编译问题
- 向米尔反馈:显示器问题
- zabbix集群管理
- 全有线:
- 全无线:飞腾WPA联网问题
- 编写处理cyclictest测试结果的程序(1个上传,1个下载+绘图分析)
4 通信测试
5 表决器
敬请期待...


浙公网安备 33010602011771号