OrangePi Alpro开箱体验 & ubuntu 与 openEuler 实时性对比
- 1 介绍
- 1.1 概述
- 1.2 OrangePi Kunpeng Pro vs OrangePi AIpro
- 2 开箱
- 3 芯片介绍
- OrangePi AIpro(8T)
- Atlas 200I DK A2
- 4 开机
- 连接鼠标、键盘、显示器
- 桌面
- 查看系统信息
- 配置网络查看IP
- 远程SSH
- WinSCP
- 5 GPIO Tool
- gpio_operate 命令说明
- gpio_operate 操作 12 引脚
- IO 控制 RGB 灯
- 6 ubuntu 与 openEuler 实时性对比
- 查看配置 kernel.sched_rt_runtime_us & kernel.sched_rt_period_us
- cyclictest 介绍
- 6.1 ubuntu22.04 测试
- 安装 cyclictest
- 运行
- 切root,加实时用户组都失败
- 设置参数 sched_rt_runtime_us 为 -1 【*】
- 测试
- 负载测试(该方法需要在rt-tests目录下面执行)
- 空载测试(该方法需要在rt-tests目录下面执行)
- 6.2 openEuler 22.03 测试
- 测试
- 满载测试
- 空载测试
- 7 openEuler
- 7.1 烧写 openEuler 镜像到 TF 卡中的方法
- 7.2 远程SSH
- 7.3 查看内核版本
- 7.4 命令
- 8 补充
- 8.1 指令
- 8.2 快捷键
- 8.3 CPU 性能提升
- 参考
1 介绍
1.1 概述
OrangePi AIpro(8T) 开发板,是香橙派与华为联合打造的,偏向人工智能应用。
1.2 OrangePi Kunpeng Pro vs OrangePi AIpro
OrangePi Kunpeng Pro 与 OrangePi AIpro 都是和华为合作产品。
华为麒麟、昇腾、鲲鹏等几大系列芯片中,昇腾和鲲鹏都致力于成为算力底座,昇腾面向AI计算,鲲鹏面向通用计算。
2 开箱
3 芯片介绍
昇腾 Ascend 310 系列有 310B1 和 310B4。
310B1:表示芯片算力规格为20T。
310B4:表示芯片算力规格为8T。
目前已知,OrangePi AIpro(8T) 和 Atlas 200I DK A2 都采用 310B4 芯片。算力都是 8 TOPS。
OrangePi AIpro(8T)
OrangePi AIpro(8T) 使用 Hi1910 模块,其中包含一个芯片 Ascend 310B4,对应算力是 8 TOPS。Ascend 310B1 芯片算力是 16 TOPS。
(base) root@orangepiaipro:/home/HwHiAiUser/Desktop# npu-smi info
+--------------------------------------------------------------------------------------------------------+
| npu-smi 23.0.0 Version: 23.0.0 |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+===============================+=================+======================================================+
| 0 310B4 | Alarm | 0.0 47 15 / 15 |
| 0 0 | NA | 0 1985 / 7545 |
+===============================+=================+======================================================+
# npu-smi info -t board -i 0 -c 0
NPU ID : 0
Chip ID : 0
Chip Type : Ascend
Chip Name : 310B4
Chip Version : V1
Board ID : 0x280b
Module Board ID : NA
PCB ID : NA
BOM ID : 1
Die ID : V1, 17450D64 01C20310 519BD217 5A69090A 26B80000
Atlas 200I DK A2
Atlas 200I DK A2 采用 310B4 芯片。
Atlas 200I DK A2 是 Atlas 200DK 之后的一款产品,从2022年一直酝酿至今,终于在2023年5月6日-7日昇腾AI开发者峰会2023正式发布。
该开发者套件,算力 8 TOPS,通常配备有4GB RAM和128GB的microSD存储空间,操作系统为Ubuntu 22.04 LTS。此外,它还支持CANN(Compute Architecture for Neural Networks)7.0.RC1版本,用于神经网络计算的优化和加速。
售价 1999。
4 开机
连接鼠标、键盘、显示器
桌面
账户:HwHiAiUser
密码:Mind@123
查看系统信息
可以看到预装系统是Ubuntu,版本是22.04
配置网络查看IP
先连接 wifi,然后使用 ifconfig 查看 IP 地址 192.168.0.115
远程SSH
- 账户:root
- 密码:Mind@123
电脑中在 cmd 窗口中输入
ssh root@192.168.0.115
然后输入密码进入
WinSCP
- 账户:root
- 密码:Mind@123
WinSCP 连接后,方便传输文件。
5 GPIO Tool
如下图,本开发板有40pin引脚。
开发板 40 pin 接口引脚的功能如下表所示,其中标红部分的引脚默认配置为GPIO 功能,可以直接使用,其他具有 GPIO 复用功能的引脚需要修改DTS 配置才能正常使用 GPIO 的功能。
Linux 镜像中预装了 gpio_operate 工具用于设置 GPIO 管脚的输入与输出方向,也可将每个 GPIO 管脚独立的设为 0 或 1。
gpio_operate 命令说明
类型 | 描述 |
---|---|
gpio_group | GPIO组号,取值为[0,8] |
gpio_pin | GPIO管脚号,取值为[0,31] |
direction | GPIO 管脚方向,取值为[0,1] 0:输入方向 1:输出方向 |
value | GPIO 管脚值,取值为[0,1] 当 GPIO 管脚方向为输入方向时,不允许设置 GPIO 管脚值 |
# gpio_operate help
(base) root@orangepiaipro:~# gpio_operate -h
Usage: gpio_operate <Command|-h> [Options...]
gpio_operate Command:
-h : This command's help information.
set_value : Set gpio pin value.
get_value : Get gpio pin value.
set_direction : Set gpio pin direction value.
get_direction : Get gpio pin direction value.
# 查询GPIO管脚方向
gpio_operate get_direction gpio_group gpio_pin
eg: gpio_operate get_direction 7 3
# 设置GPIO管脚方向
gpio_operate set_direction gpio_group gpio_pin direction
eg: gpio_operate set_direction 7 3 1
# 查询GPIO管脚值
gpio_operate get_value gpio_group gpio_pin
eg: gpio_operate get_value 7 3
# 用于设置GPIO管脚值为高电平或者低电平
# 注意设置管脚值前,请确保已将 GPIO 管脚的方向设置为输出
gpio_operate set_value gpio_group gpio_pin value
eg: gpio_operate set_value 7 3 1
gpio_operate 操作 12 引脚
(base) root@orangepiaipro:~# gpio_operate get_direction 7 3
Get gpio pin direction value successed, value is 0.
(base) root@orangepiaipro:~# gpio_operate set_direction 7 3 1
Set gpio pin direction value successed.
(base) root@orangepiaipro:~# gpio_operate get_value 7 3
Get gpio pin value successed, value is 0.
(base) root@orangepiaipro:~# gpio_operate set_value 7 3 1
Set gpio pin value successed.
(base) root@orangepiaipro:~# gpio_operate get_value 7 3
Get gpio pin value successed, value is 1.
(base) root@orangepiaipro:~#
IO 控制 RGB 灯
- 选择引脚
12:IO [7,3]
13:IO [1,6]
14:GND
15:IO [2,15]
- 设置GPIO管脚方向为输出方向
gpio_operate set_direction 7 3 1
gpio_operate set_direction 1 6 1
gpio_operate set_direction 2 15 1
- 设置电平
gpio_operate set_value 7 3 1
gpio_operate set_value 1 6 1
gpio_operate set_value 2 15 1
6 ubuntu 与 openEuler 实时性对比
都不做实时优化的情况下进行对比:
查看配置 kernel.sched_rt_runtime_us & kernel.sched_rt_period_us
(base) root@orangepiaipro:# sysctl kernel.sched_rt_runtime_us
kernel.sched_rt_runtime_us = 950000
(base) root@orangepiaipro:# sudo sysctl kernel.sched_rt_period_us
kernel.sched_rt_period_us = 1000000
(base) root@orangepiaipro:#
/proc/sys/kernel/sched_rt_period_us //默认是1000000us
/proc/sys/kernel/sched_rt_runtime_us //默认是950000us
表示1s内,实时进程最多占用cpu 0.95s的时间,其余0.05s需要留给TASK_RUNNING的普通进程,以免普通进程被饿死。
设置参数
sudo sysctl -w kernel.sched_rt_runtime_us=950000
sudo sysctl -w kernel.sched_rt_period_us=1000000
cyclictest 介绍
cyclictest 所测得的延时是中断延时加调度延时。
6.1 ubuntu22.04 测试
安装 cyclictest
(1)Debian / Ubuntu 系统可直接安装
apt-get install rt-tests
(2)git 仓库源码下载编译安装【最新版本】
- 拷贝 cyclictest 的 Git 仓库
git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
- 进入本地 git 仓库
cd rt-tests
- make编译
make
- 生成执行文件
(3)git 仓库源码下载编译安装【推荐稳定版】
# 需要安装libnuma-devel包后make编译
apt install numactl-devel
git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
git checkout stable/v1.0
make all
make install
make cyclictest
运行
直接运行会报错
(base) root@orangepiaipro:/opt/worthsen/rt-tests# ./cyclictest
Unable to change scheduling policy!
either run as root or join realtime group
(base) root@orangepiaipro:/opt/worthsen/rt-tests#
切root,加实时用户组都失败
进程调度策略(特别是与实时(realtime)调度相关的)需要特殊权限,并需要加入实时用户组。
- 切root用户
- 加入实时用户组
# 检查是否存在一个名为 rt 或其他名称的实时用户组
grep rt /etc/group
# 创建一个新的实时用户组(如果尚不存在)
sudo groupadd rt
# 将你的用户添加到实时用户组
sudo usermod -aG rt your_username
# 退出并重新登录,或者重启你的会话,以使组更改生效。
# 验证你是否已加入实时用户组:
groups
设置参数 sched_rt_runtime_us 为 -1 【*】
(base) root@orangepiaipro:# sudo sysctl -w kernel.sched_rt_runtime_us=-1
kernel.sched_rt_runtime_us = -1
测试
负载测试(该方法需要在rt-tests目录下面执行)
./cyclictest -t 4 -p 99 -n -m -d 0 & ./hackbench -l -1 -g 15 -f 25 -P
hackbench -l -1 -g 15 -f 25 -P 是用来制作负载的
- -l -1: 表示hackbench将以无限循环方式运行,不会自动退出。
- -g 15: 设置每个进程组(group)的进程数量为15。每个进程组将会生成一组进程进行通信。
- -f 25: 设置每个进程组之间的父子关系的数量为25。这决定了进程组之间的通信方式。
- -P: 使用多个CPU核心来运行测试,以模拟多核系统的情况。
cyclictest -t 4 -p 99 -n -m -d 0
- -t 4: 指定使用4个线程进行测试。每个线程将创建一个周期性负载。
- -p 99: 设置线程的优先级为99,这是最高的实时优先级。使用最高优先级可以更好地测试系统的实时性能。
- -n: 在测试期间禁止休眠。这将防止系统进入休眠状态,以保持系统处于活跃状态。
- -m: 运行测试前锁定内存。这将防止测试期间的内存分页错误,并提供更一致的测试结果。
- -d 0: 禁用延迟输出。这将阻止输出每个线程的详细延迟数据,只显示测试的总体统计信息
(1)满载测试会卡,为了顺利控制测试时间,一个 cmd Terminal 先关闭cyclictest,让统计数据先停止
(base) root@orangepiaipro:# killall cyclictest
(2)运行命令的 cmd Terminal 中后关闭 hackbench
# kill hackbench
ctrl + c
- 300s
CPU 序号 | 线程优先级 | 时间间隔(ms) | 计数器 | 最小值 | 平均值 | 最大值 |
---|---|---|---|---|---|---|
0 | 99 | 1000 | 307071 | 4 | 13 | 140 |
1 | 99 | 1000 | 307074 | 4 | 14 | 242 |
2 | 99 | 1000 | 312029 | 4 | 11 | 232 |
3 | 99 | 1000 | 312025 | 4 | 14 | 2249 |
(base) root@orangepiaipro:# cyclictest -t 4 -p 99 -n -m -d 0 & hackbench -l -1 -g 15 -f 25 -P
[1] 5885
Running in process mode with 15 groups using 50 file descriptors each (== 750 tasks)
Each sender will pass -1 messages of 100 bytes
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 152.37 122.29 85.64 96/1423 6738
T: 0 ( 5935) P:99 I:1000 C: 307071 Min: 4 Act: 13 Avg: 13 Max: 140
T: 1 ( 5992) P:99 I:1000 C: 307074 Min: 4 Act: 14 Avg: 14 Max: 242
T: 2 ( 6041) P:99 I:1000 C: 312029 Min: 4 Act: 10 Avg: 11 Max: 232
T: 3 ( 6082) P:99 I:1000 C: 312025 Min: 4 Act: 13 Avg: 14 Max: 2249
^CSignal 2 caught, longjmp'ing out!
longjmp'ed out, reaping children
sending SIGTERM to all child processes
signaling 750 worker threads to terminate
Time: 325.087
[1]+ Done cyclictest -t 4 -p 99 -n -m -d 0
(base) root@orangepiaipro:#
空载测试(该方法需要在rt-tests目录下面执行)
./cyclictest -t 4 -p 99 -n -m -d 0
- 300s
CPU 序号 | 线程优先级 | 时间间隔(ms) | 计数器 | 最小值 | 平均值 | 最大值 |
---|---|---|---|---|---|---|
0 | 99 | 1000 | 300325 | 3 | 6 | 1826 |
1 | 99 | 1000 | 300320 | 3 | 6 | 609 |
2 | 99 | 1000 | 300314 | 3 | 5 | 500 |
3 | 99 | 1000 | 300308 | 3 | 5 | 234 |
(base) root@orangepiaipro:# cyclictest -t 4 -p 99 -n -m -d 0
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 17.53 17.41 17.18 2/669 5453
T: 0 ( 5367) P:99 I:1000 C: 300325 Min: 3 Act: 9 Avg: 6 Max: 1826
T: 1 ( 5368) P:99 I:1000 C: 300320 Min: 3 Act: 7 Avg: 6 Max: 609
T: 2 ( 5369) P:99 I:1000 C: 300314 Min: 3 Act: 9 Avg: 5 Max: 500
T: 3 ( 5370) P:99 I:1000 C: 300308 Min: 3 Act: 7 Avg: 5 Max: 234
(base) root@orangepiaipro:#
(base) root@orangepiaipro:/home/HwHiAiUser/Desktop#
6.2 openEuler 22.03 测试
步骤同上
测试
满载测试
- 300s
CPU 序号 | 线程优先级 | 时间间隔(ms) | 计数器 | 最小值 | 平均值 | 最大值 |
---|---|---|---|---|---|---|
0 | 99 | 1000 | 305747 | 3 | 13 | 1209 |
1 | 99 | 1000 | 305763 | 3 | 12 | 394 |
2 | 99 | 1000 | 305747 | 3 | 12 | 921 |
3 | 99 | 1000 | 305738 | 3 | 11 | 2106 |
sh-5.1# cyclictest -t 4 -p 99 -n -m -d 0 & hackbench -l -1 -g 15 -f 25 -P
[1] 4141
Running in process mode with 15 groups using 50 file descriptors each (== 750 tasks)
Each sender will pass -1 messages of 100 bytes
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 134.12 97.08 52.06 120/1240 4990
T: 0 ( 4191) P:99 I:1000 C: 305747 Min: 3 Act: 80 Avg: 13 Max: 1209
T: 1 ( 4255) P:99 I:1000 C: 305763 Min: 3 Act: 14 Avg: 12 Max: 394
T: 2 ( 4297) P:99 I:1000 C: 305747 Min: 3 Act: 20 Avg: 12 Max: 921
T: 3 ( 4413) P:99 I:1000 C: 305738 Min: 3 Act: 12 Avg: 11 Max: 2106
^CSignal 2 caught, longjmp'ing out!
longjmp'ed out, reaping children
sending SIGTERM to all child processes
signaling 750 worker threads to terminate
Time: 312.209
[1]+ Done cyclictest -t 4 -p 99 -n -m -d 0
sh-5.1#
空载测试
- 300s
CPU 序号 | 线程优先级 | 时间间隔(ms) | 计数器 | 最小值 | 平均值 | 最大值 |
---|---|---|---|---|---|---|
0 | 99 | 1000 | 300700 | 3 | 4 | 100 |
1 | 99 | 1000 | 300693 | 3 | 4 | 1842 |
2 | 99 | 1000 | 300688 | 3 | 4 | 175 |
3 | 99 | 1000 | 300681 | 3 | 3 | 135 |
sh-5.1# cyclictest -t 4 -p 99 -n -m -d 0
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 17.21 17.35 15.56 1/486 3961
T: 0 ( 3859) P:99 I:1000 C: 300700 Min: 3 Act: 4 Avg: 4 Max: 100
T: 1 ( 3860) P:99 I:1000 C: 300693 Min: 3 Act: 3 Avg: 4 Max: 1842
T: 2 ( 3861) P:99 I:1000 C: 300688 Min: 3 Act: 3 Avg: 4 Max: 175
T: 3 ( 3862) P:99 I:1000 C: 300681 Min: 3 Act: 3 Avg: 3 Max: 135
sh-5.1#
7 openEuler
7.1 烧写 openEuler 镜像到 TF 卡中的方法
详细步骤请看用户手册。https://orangepi.net/wp-content/uploads/2024/05/OrangePi_AI_Pro_v0.3.1.pdf
(1)32GB 或更大容量的 TF卡
(2)TF 卡插入读卡器,然后插入电脑
如果 TF 卡已经有系统,需要格式化。工具软件 SDCardFormatter。
(3)下载镜像 openEuler
(4)下载烧录工具软件 balenaEtcher
-
Portable 版本无需安装,双击打开就可以使用
-
以管理员身份运行
-
选择镜像,选择盘符,开始烧录
-
烧录中
-
校验
-
成功
显示校验失败,不过 TF 卡插入板子,可以运行。
(5)打开 balenaEtcher,以管理员身份运行
7.2 远程SSH
- 账户:root
- 密码:Mind@123
电脑中在 cmd 窗口中输入
ssh root@192.168.0.100
然后输入密码进入
7.3 查看内核版本
-sh-5.1# cat /proc/version
Linux version 5.10.0+ (root@orangepi-M600) (aarch64-target-linux-gnu-gcc (Do-Compiler V100R001C13B001) 7.3.0, GNU ld (Do-Compiler V100R001C13B001) 2.38) #1 SMP Tue Jan 30 11:14:55 CST 2024
-sh-5.1# cat /etc/os-release
NAME="openEuler"
ID="openEuler"
VERSION_ID="22.03"
ANSI_COLOR="0;31"
VERSION="22.03 LTS dracut-055-4.oe2203"
PRETTY_NAME="openEuler 22.03 LTS dracut-055-4.oe2203 (Initramfs)"
DRACUT_VERSION="055-4.oe2203"
-sh-5.1# npu-smi info
+--------------------------------------------------------------------------------------------------------+
| npu-smi 23.0.0 Version: 23.0.0 |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+===============================+=================+======================================================+
| 0 310B4 | Alarm | 0.0 47 15 / 15 |
| 0 0 | NA | 0 1580 / 7545 |
+===============================+=================+======================================================+
-sh-5.1#
7.4 命令
# 安装
sudo dnf install package_name
8 补充
8.1 指令
# 查看Ubuntu发行版版本号
lsb_release -a
# 查看当前系统的内核名称、主机名、内核发型版本、节点名
uname -a
# 查询设备信息
npu-smi info
# 查询设备0中编号为0(NPU)的芯片的详细信息
npu-smi info -t board -i 0 -c 0
# 查看昇腾芯片的详细信息
ascend-dmi -i -dt
8.2 快捷键
# ubuntu 锁屏快捷键
Ctrl+Alt+L
# 截屏
Ctrl + Shift + Print Screen键
8.3 CPU 性能提升
官方使用 Unixbench 进行跑分测试,结果数据如下:
在主频 1.0GHz 的情况下,OrangePi AIPro 的单核分数平均为 590.6,四核分数平均为 1932.9;
CPU 的频率提升至 1.6GHz 的情况下,OrangePi AIPro 的单核分数平均为 911.9,四核分数平均为 2909.5。
主频提升之后,OrangePi AIPro 开发板的 CPU 性能得到提升,单核测试得分提高了 54.4%,四核测试得分提高了 50.5%。
参考
1、香橙派(Orange Pi) 官网
2、香橙派(Orange Pi) 官方–OrangePi AIpro(8T)
3、华为–迈向智能世界白皮书
4、昇腾Ascend之npu-smi工具在Atlas 200I DK A2的简单使用
5、华为Atlas 200I DK A2开箱!
6、HUAWEI Atlas 200I DK A2 昇腾AI开发者套件 “小藤”开发者套件 8TOPS算力
7、昇腾Ascend之npu-smi工具在Atlas 200I DK A2的简单使用
8、香橙派和华为合作的开发板,一个从来没想过的组合-香橙派 Al Pro
9、openEuler 22.03 LTS 版本新增了 Preempt_RT 内核实时补丁
10、Atlas 200I A2 Accelerator Module 23.0.3 Driver Development Guide 03
11、Linux 实时性能测试工具——Cyclictest
12、Linux 实时性能测试工具——Cyclictest 的使用与分析
13、实时性测试:cyclictest详解
14、cyclictest无法执行问题
15、14. RT-Linux