嵌入式linux综合性能评估

2023-02-16 14:55:49 浏览数 (2)

干货福利,第一时间送达! 在嵌入式项目预研前期阶段,我们常常需要对某个平台进行资源和性能方面的评估,以下是最常见的一些评估指标:

1、内存评估

系统内存空间通过free、cat /proc/meminfo或者top,查看内存情况。一般有这样一个经验公式:

  • 应用程序可用内存/系统物理内存>70%时,表示系统内存资源非常充足,不影响系统性能;
  • 20%<应用程序可用内存/系统物理内存<70%时,表示系统内存资源基本能 满足应用需求,暂时不影响系统性能;
  • 应用程序可用内存/系统物理内 存<20%时,表示系统内存资源紧缺,需要增加系统内存;
代码语言:javascript复制
$ free
              total        used        free      shared  buff/cache   available
Mem:         123496       21512       75132        1132       26852       63416
Swap:             0           0           0

$ cat /proc/meminfo
MemTotal:         123496 kB //所有可用的内存大小,物理内存减去预留位和内核使用。系统从加电开始到引导完成,firmware/BIOS要预留一些内存,内核本身要占用一些内存,最后剩下可供内核支配的内存就是MemTotal。这个值在系统运行期间一般是固定不变的,重启会改变。
MemFree:           75132 kB //表示系统尚未使用的内存。
MemAvailable:      63400 kB //真正的系统可用内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存
Buffers:            5644 kB //用来给块设备做缓存的内存,(文件系统的 metadata、pages)
Cached:            19040 kB //分配给文件缓冲区的内存,例如vi一个文件,就会将未保存的内容写到该缓冲区
SwapCached:            0 kB //被高速缓冲存储用的交换空间(硬盘的swap)的大小
Active:            20356 kB //经常使用的高速缓冲存储器页面文件大小
Inactive:          12628 kB //不经常使用的高速缓冲存储器文件大小
Active(anon):       9412 kB //活跃的匿名内存
Inactive(anon):       20 kB //不活跃的匿名内存
Active(file):      10944 kB //活跃的文件使用内存
Inactive(file):    12608 kB //不活跃的文件使用内存
Unevictable:           0 kB //不能被释放的内存页
Mlocked:               0 kB //系统调用 mlock 
SwapTotal:             0 kB //交换空间总内存
SwapFree:              0 kB //交换空间空闲内存
Dirty:                 0 kB //等待被写回到磁盘的
Writeback:             0 kB //正在被写回的
AnonPages:          8300 kB //未映射页的内存/映射到用户空间的非文件页表大小
Mapped:            11480 kB //映射文件内存
Shmem:              1132 kB //已经被分配的共享内存
KReclaimable:       2132 kB //内核内存,内存压力时内核尝试回收
Slab:               8240 kB //内核数据结构缓存
SReclaimable:       2132 kB //可收回slab内存
SUnreclaim:         6108 kB //不可收回slab内存
KernelStack:         568 kB //内核消耗的内存
PageTables:          516 kB //管理内存分页的索引表的大小
NFS_Unstable:          0 kB //不稳定页表的大小
Bounce:                0 kB //在低端内存中分配一个临时buffer作为跳转,把位于高端内存的缓存数据复制到此处消耗的内存
WritebackTmp:          0 kB //FUSE用于临时写回缓冲区的内存
CommitLimit:       61748 kB //系统实际可分配内存
Committed_AS:      58568 kB //系统当前已分配的内存
VmallocTotal:    1048372 kB //预留的虚拟内存总量
VmallocUsed:        1288 kB //已经被使用的虚拟内存
VmallocChunk:          0 kB //可分配的最大的逻辑连续的虚拟内存
Percpu:               32 kB //percpu机制使用的内存
2、磁盘评估

获取磁盘空间

代码语言:javascript复制
$ df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 6.0M      6.0M         0 100% /rom
tmpfs                    60.3M      1.1M     59.2M   2% /tmp
/dev/mtdblock6           23.8M      9.0M     14.8M  38% /overlay
overlayfs:/overlay       23.8M      9.0M     14.8M  38% /
tmpfs                   512.0K         0    512.0K   0% /dev
  • Filesystem:代表该文件系统时哪个分区,所以列出的是设备名称。
  • 1K-blocks:说明下面的数字单位是1KB,可利用-h或-m来改变单位大小,也可以用-B来设置。
  • Used:已经使用的空间大小。
  • Available:剩余的空间大小。
  • Use%:磁盘使用率。如果使用率在90%以上时,就需要注意了,避免磁盘容量不足出现系统问题,尤其是对于文件内容增加较快的情况(如/home、/var/spool/mail等)。
  • Mounted on:磁盘挂载的目录,即该磁盘的内容可以在挂载目录下面找到。
代码语言:javascript复制
$ cat /proc/partitions
major minor  #blocks  name

  31        0        192 mtdblock0
  31        1         64 mtdblock1
  31        2         64 mtdblock2
  31        3      32448 mtdblock3
  31        4       1962 mtdblock4
  31        5      30485 mtdblock5
  31        6      24384 mtdblock6
3、磁盘写入速度评估
代码语言:javascript复制
$ time dd if=/dev/urandom of=ranfile bs=1M count=1
1 0 records in
1 0 records out

real    0m0.126s //程序的实际运行时间
user    0m0.000s //用户态的时间
sys     0m0.110s //内核态的时间
4、CPU评估

获取CPU信息

代码语言:javascript复制
$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 298.80
Features        : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x3
CPU part        : 0xc08
CPU revision    : 2

Hardware        : Generic AM33XX (Flattened Device Tree)
Revision        : 0000
Serial          : 0000000000000000

BogoMIPS Linux操作系统中衡量 计算机处理器

运行速度的一种尺度。Bogo是Bogus(伪)的意思;MIPS是每秒百万条指令。

5、cpu占用情况
代码语言:javascript复制
$ uptime
 16:10:01 up  6:40,  load average: 1.27, 1.27, 1.39
  • 16:10:01 :服务器事件
  • 6:40 :当前服务器运行时长
  • load average:这个输出值,这三个值的大小一般不能大于系统CPU的个数,例如,本输出中系统有8个CPU,如果load average的三个值长期大于8时,说明CPU很繁忙,负载很高,可能会影响系统性能,但是偶尔大于8时,倒不用担心,一般不会影响系统性能。相反,如果load average的输出值小于CPU的个数,则表示CPU还有空闲的时间片,比如本例中的输出,CPU是非常空闲的。
6、系统运行情况
代码语言:javascript复制
$ top
Mem: 48420K used, 75076K free, 1132K shrd, 5644K buff, 19040K cached
CPU:  30% usr  68% sys   0% nic   0% idle   0% io   0% irq   0% sirq
Load average: 1.05 1.14 1.06 2/71 6586
  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
    7     2 root     SW       0   0%   2% [ksoftirqd/0]
 6064  5894 root     S    46772  38%   1% ./myAPP

一般 经验

  • user% sys%< 70%状态良好
  • user% sys%= 85% 状态报警
  • user% sys% >=90% 状态糟糕
7、其他参数

系统现在参数

代码语言:javascript复制
$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3814
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 3814
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
8、进程资源

新建一个进程需要最小的内存空间本机为8M,具体可通过ulimit -s查看

代码语言:javascript复制
$ ulimit -s
8192

0 人点赞