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 成功运行

注意:

  1. 使用make指令编译arm端的可执行文件之后,可以在PC尝试执行(理论上无法执行)。如果可以执行,可能是工具链变量source失败!这种情况是没有报错的。重新source,编译,再尝试。
  2. 实测,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-  # 无效!
  1. 由于有线网络/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进行调试。

参考链接:硬件接口调试之树莓派4B 串口调试 - 知乎

串口调试 - 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

下载镜像

下载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个扇区),则会报错,贴图为戒:
img

基本配置

将SD卡插入树莓派即可启动。

用户名 root pi
密码 openeuler raspberry

基本配置:树莓派使用.md - Gitee

连接Wifi:

nmcli dev wifi connect <SSID> password <PWD>

树莓派4B默认不启用串口,通过如下方法启用:

  1. vi /boot/config.txt,添加enable_uart=1
  2. reboot

实测连接到Windows串口平台(MobaExterm等)可以通信,Linux(Ubuntu)端暂时无法通信,待解决。

Linux端在安装了CH341驱动后,插入串口设备,通过dmesg | grep tty可以看到插入的设备是ttyCH341USB0,但用minicom访问ttyCH341USB0ttyS0,均没有反应。尝试用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种解决方法:

  1. 在PC端只访问第1层screen。第2层screen由显示器、鼠标键盘直连开发板的方式访问。

  2. 可以考虑写个脚本,每次开第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 表决器

敬请期待...

posted @ 2024-04-09 21:52  Digitzh  阅读(228)  评论(0)    收藏  举报