核心资源
CPU
QuecPi Alpha 单板电脑采用高通 QCS6490 作为核心处理器,基于 Arm v8 Cortex ,主频高达 2.7GHz 。
- 查看 CPU 信息命令
root@qcm6490-idp:/# cat /proc/cpuinfo
processor : 0
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x2
CPU part : 0xd05
CPU revision : 0
processor : 1
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm lrcpc dcpop asimddp
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x2
CPU part : 0xd05
CPU revision : 0
- processor :系统中逻辑处理核的编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
- BogoMIPS :在系统内核启动时粗略测算的CPU 每秒运行百万条指令数( Million Instructions Per Second )
- 查看 CPU 使用率
执行top之后,按1显示各CPU核使用率
root@qcm6490-idp:/# top
top - 00:20:05 up 20 min, 1 user, load average: 0.04, 0.07, 0.06
Tasks: 340 total, 1 running, 339 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.5 us, 1.6 sy, 0.0 ni, 97.3 id, 0.0 wa, 0.5 hi, 0.0 si, 0.0 st
%Cpu1 : 0.5 us, 0.0 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.5 hi, 0.0 si, 0.0 st
%Cpu2 : 1.6 us, 0.0 sy, 0.0 ni, 97.3 id, 0.5 wa, 0.0 hi, 0.0 si, 0.5 st
%Cpu3 : 0.0 us, 0.5 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.5 hi, 0.0 si, 0.5 st
%Cpu4 : 1.1 us, 0.0 sy, 0.0 ni, 98.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.5 st
%Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7366.7 total, 6386.2 free, 498.6 used, 481.9 buff/cache
MiB Swap: 5395.5 total, 5395.5 free, 0.0 used. 6698.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 162028 9468 6524 S 1.1 0.1 0:07.64 systemd
594 message+ 20 0 6904 3712 3328 S 1.1 0.0 0:06.46 dbus-daemon
1087 root 20 0 1794556 61472 30848 S 1.1 0.8 0:05.56 containerd
1816 root 20 0 5768 2688 2048 R 1.1 0.0 0:00.04 top
40 root 20 0 0 0 0 I 0.5 0.0 0:00.48 kworker/3:0-mm_percpu_wq
50 root 20 0 0 0 0 S 0.5 0.0 0:00.55 rcuop/4
127 root 20 0 0 0 0 I 0.5 0.0 0:00.47 kworker/u16:6-events_unbound
280 root 20 0 34988 15176 14792 S 0.5 0.2 0:05.38 systemd-journal
925 root 20 0 630136 72200 53256 S 0.5 1.0 0:06.65 weston
- %us :表示用户空间程序的 CPU 使用率(没有通过 nice 调度)
- %sy :表示系统空间的 CPU 使用率,主要是内核程序
- %ni :表示用户空间且通过 nice 调度过的程序的 CPU 使用率
- %id :空闲 CPU
- %wa : 等待输入输出的 CPU 时间百分比
- %hi : CPU 处理硬中断的数量
- %si : CPU 处理软中断的数量
- %st : 实时
- 获取 CPU 温度信息
root@qcm6490-idp:/# cat /sys/class/thermal/thermal_zone0/temp
37000
- 上面显示数字为千分之一度,除以 1000 就是当前温度值。
- CPU 压力测试
CPU 的压力的测试方式有很多,可通过 bc 命令来计算圆周率方法来测试 CPU 在运算过程中的稳定性。
root@qcm6490-idp:/# echo "scale=5000; 4*a(1)" | bc -l -q &
[1] 1592
上述命令将在后台计算的 PI,并精确到小数点后 5000 位,计算过程需要一段时间。
此时,我们可以通过 top 命令检查 CPU 利用率的变化,如下所示:
root@qcm6490-idp:/# top
top - 06:42:14 up 8 min, 1 user, load average: 0.29, 0.16, 0.09
Tasks: 326 total, 3 running, 323 sleeping, 0 stopped, 0 zombie
%Cpu(s): 12.7 us, 0.2 sy, 0.0 ni, 86.8 id, 0.0 wa, 0.1 hi, 0.0 si, 0.2 st
MiB Mem : 7366.9 total, 6540.2 free, 439.5 used, 387.2 buff/cache
MiB Swap: 5395.7 total, 5395.7 free, 0.0 used. 6770.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1592 root 20 0 3052 1792 1536 R 99.7 0.0 0:14.37 bc
588 message+ 20 0 6908 3584 3200 S 0.7 0.0 0:03.06 dbus-da+
1 root 20 0 162064 9324 6380 S 0.3 0.1 0:04.26 systemd
...
约 15 秒后,PI 结果被计算出来。在此期间 CPU 使用率达到 100% ,没有发生异常,说明 CPU 压力测试通过。还可以继续增加精确值,可进一步提高测试压力。
root@qcm6490-idp:/# 3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
...
PMIC
Linux 内核一般提供了三种 Suspend: Freeze、Standby 和STR( Suspend to RAM ),在用户空间向 /sys/power/state 文件分别写入 "freeze"、"standby" 和 "mem" , 即可触发它们。 QuecPi Alpha 支持 freeze 、mem 2 种方式,disk 暂不支持,以下将以 mem 为例进行测试说明。
- 查看当前 QuecPi Alpha 支持的模式
root@qcm6490-idp:/# cat /sys/power/state
freeze mem disk
- 设置唤醒源
测试休眠唤醒需要先设置唤醒源,设置 Debug 串口( ttySC0 )为唤醒源。
root@qcm6490-idp:/# echo enabled > /sys/devices/platform/soc@0/9c0000.geniqup/994000.serial/tty/ttyMSM0/power/wakeup
- 休眠到内存
在用户空间向 /sys/power/state 写入字符串即进入相应的电源管理模式,休眠到内存的方式如下:
root@qcm6490-idp:/# echo mem > /sys/power/state
[15219.746797] PM: suspend entry (s2idle)
[15219.760424] Filesystems sync: 0.013 seconds
[15219.780574] Freezing user space processes
[15219.781589] process_accept_req: 22 callbacks suppressed
[15219.781600] smcinvoke: process_accept_req: Server id :17 interrupted probaby due to suspend, pid:897
[15219.791806] smcinvoke: process_accept_req: Server id :24 interrupted probaby due to suspend, pid:962
[15219.801969] smcinvoke: process_accept_req: Server id :18 interrupted probaby due to suspend, pid:903
[15219.812240] smcinvoke: process_accept_req: Server id :17 interrupted probaby due to suspend, pid:898
[15219.822590] smcinvoke: process_accept_req: Server id :18 interrupted probaby due to suspend, pid:902
[15219.832962] smcinvoke: process_accept_req: Server id :26 interrupted probaby due to suspend, pid:969
[15219.843391] smcinvoke: process_accept_req: Server id :21 interrupted probaby due to suspend, pid:929
[15219.853728] smcinvoke: process_accept_req: Server id :21 interrupted probaby due to suspend, pid:930
[15219.864031] smcinvoke: process_accept_req: Server id :17 interrupted probaby due to suspend, pid:899
[15219.874482] smcinvoke: process_accept_req: Server id :22 interrupted probaby due to suspend, pid:935
[15219.900228] Freezing user space processes completed (elapsed 0.119 seconds)
- 通过 debug 串口唤醒
输入休眠命令后 QuecPi Alpha 休眠,将运行状态数据存到内存,并关闭外设,进入等待模式,此时因为设置的是 debug 唤醒,键盘随意输入字符即能成功唤醒系统,如下:
[15221.270632] process_accept_req: 3 callbacks suppressed
[15221.270636] smcinvoke: process_accept_req: process_accept_req txn 4 either invalid or removed from Q
[15221.270655] smcinvoke: process_accept_req: process_accept_req txn 2 either invalid or removed from Q
[15221.270668] smcinvoke: process_accept_req: process_accept_req txn 3 either invalid or removed from Q
[15221.270742] smcinvoke: process_accept_req: process_accept_req txn 2 either invalid or removed from Q
[15221.270870] smcinvoke: process_accept_req: process_accept_req txn 1 either invalid or removed from Q
[15221.270924] smcinvoke: process_accept_req: process_accept_req txn 4 either invalid or removed from Q
[15221.270981] smcinvoke: process_accept_req: process_accept_req txn 3 either invalid or removed from Q
[15221.270982] done.
[15221.271044] smcinvoke: process_accept_req: process_accept_req txn 1 either invalid or removed from Q
[15221.271059] smcinvoke: process_accept_req: process_accept_req txn 3 either invalid or removed from Q
[15221.271078] smcinvoke: process_accept_req: process_accept_req txn 2 either invalid or removed from Q
[15221.371963] PM: suspend exit
UFS
QuecPi Alpha 内嵌 128GB UFS 存储芯片,相比 eMMC,UFS 读写速度更快、支持全双工通信和命令队列,性能更优。
1. 查看容量
通过 fdisk -l 命令可以查询到 ufs 分区信息及容量。
root@qcm6490-idp:/opt/bc-1.08.1# fdisk -l
Disk /dev/sda: 116.09 GiB, 124646326272 bytes, 30431232 sectors
Disk model: C2G072
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 49B3A77D-3D7D-22A5-0A10-6A2ECDDEA256
Device Start End Sectors Size Type
/dev/sda1 6 131077 131072 512M EFI System
/dev/sda2 131078 138757 7680 30M Linux filesystem
/dev/sda3 138758 30431226 30292469 115.6G Linux root (ARM-64)
2. 查看分区信息
通过 df 命令可以查询到 ufs 分区信息,使用情况,挂载目录等信息。
root@qcm6490-idp:/opt/bc-1.08.1# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 109G 3.3G 101G 4% /sysroot
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 3.6G 0 3.6G 0% /dev/shm
tmpfs 1.5G 31M 1.5G 3% /run
tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup
tmpfs 3.6G 12K 3.6G 1% /tmp
tmpfs 3.6G 0 3.6G 0% /var/volatile
/dev/sda1 511M 136M 376M 27% /boot
/dev/sda2 25M 892K 22M 4% /var/persist
tmpfs 737M 0 737M 0% /run/user/0
3. 性能测试
性能测试主要测试 ufs 在 linux 系统下对文件的读写速度,一般结合 time 与 dd 双命令进行测试。
- 写文件测试
root@qcm6490-idp:/opt# time dd if=/dev/zero of=tempfile bs=1M count=100 conv=fdatasync
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.2874 s, 365 MB/s
real 0m0.316s
user 0m0.000s
sys 0m0.122s
使用 dd 命令写文件时,需要加 conv=fdatasync 参数,表示当 dd 写 N 次结束之后,会 flush cache 同步到磁盘。因为对磁盘的写一般是先写到缓存还没有写到磁盘就返回了。这里测试出写磁盘速度为 365MB/s 。
- 读文件测试
在嵌入式系统中,经常需要测试系统文件读写性能,读文件时忽略 cache 的影响。这时可以指定参数 iflag=direct ,nonblock 。
root@qcm6490-idp:/opt# time dd if=tempfile of=/dev/null bs=1M count=100 iflag=direct,nonblock
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.196993 s, 532 MB/s
real 0m0.201s
user 0m0.001s
sys 0m0.041s
可知,从磁盘直接读取读速度为532MB/s。
Memory
- 查看内存信息
root@qcm6490-idp:/opt/bc-1.08.1# cat /proc/meminfo
MemTotal: 7543736 kB
MemFree: 6664720 kB
MemAvailable: 6928688 kB
Buffers: 19768 kB
Cached: 380520 kB
SwapCached: 0 kB
Active: 52044 kB
Inactive: 462332 kB
Active(anon): 3588 kB
Inactive(anon): 142568 kB
Active(file): 48456 kB
Inactive(file): 319764 kB
- MemTotal:所有可用的RAM 大小,物理内存减去预留位和内核使用
- MemFree :LowFree + HighFree
- Buffers:用来给块设备做缓存的大小
- Cached:文件的缓冲区大小
- SwapCached:已经被交换出来的内存。与I/O 相关
- Active:经常(最近)被使用的内存
- Inactive:最近不常使用的内存
- 获取内存使用率
root@qcm6490-idp:/opt/bc-1.08.1# free -m
total used free shared buff/cache available
Mem: 7366 437 6504 31 424 6763
Swap: 5395 0 5395
- total :内存总量
- used :被使用的内存量
- free :可使用的内存量
- 内存压力测试
通过给定测试内存的大小和次数, 可以对系统现有的内存进行压力上的测试。可使用系统工具 memtester 进行测试,如指定内存大小 300MB ,测试次数为 1 ,测试命令为 "memtester 300M 1" 。
下列以使用 300MB 内存空间,单次测试为例:
root@qcm6490-idp:/# memtester 300M 1
memtester version 4.5.1 (64-bit)
Copyright (C) 2001-2020 Charles Cazabon.
Licensed under the GNU General Public License version 2 (only).
pagesize is 4096
pagesizemask is 0xfffffffffffff000
want 300MB (314572800 bytes)
got 300MB (314572800 bytes), trying mlock ...locked.
Loop 1/1:
Stuck Address : ok
Random Value : ok
Compare XOR : ok
Compare SUB : ok
Compare MUL : ok
Compare DIV : ok
Compare OR : ok
Compare AND : ok
Sequential Increment: ok
Solid Bits : ok
Block Sequential : ok
Checkerboard : ok
Bit Spread : ok
Bit Flip : ok
Walking Ones : ok
Walking Zeroes : ok
Done.