干货福利,第一时间送达! 在嵌入式项目预研前期阶段,我们常常需要对某个平台进行资源和性能方面的评估,以下是最常见的一些评估指标:
系统内存空间通过free、cat /proc/meminfo或者top,查看内存情况。一般有这样一个经验公式:
$ 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机制使用的内存
获取磁盘空间
$ 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
$ 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
$ 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 //内核态的时间
获取CPU信息
$ 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是每秒百万条指令。
$ uptime
16:10:01 up 6:40, load average: 1.27, 1.27, 1.39
$ 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
一般 经验
系统现在参数
$ 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
新建一个进程需要最小的内存空间本机为8M,具体可通过ulimit -s查看
$ ulimit -s
8192