记录下项目这两天遇到的一个内存方面的问题.
环境: mips24K, 内存128M(扣除audio/video直接控制的内存后, 剩下65M), 内核版本2.6.29.4
项目那边反馈说, 加载wifi相关的东西后, 内存少了很多. 怎么回事呢?
1. 先ps, cat /proc/meminfo
# ps
PID USER VSZ STAT COMMAND
1 root 1572 S init
2 root 0 SW< [kthreadd]
3 root 0 SW< [ksoftirqd/0]
4 root 0 SW< [watchdog/0]
5 root 0 SW< [events/0]
6 root 0 SW< [khelper]
7 root 0 SW< [kintegrityd/0]
8 root 0 SW< [kblockd/0]
9 root 0 SW< [ksuspend_usbd]
10 root 0 SW< [khubd]
11 root 0 SW [pdflush]
12 root 0 SW [pdflush]
13 root 0 SW< [kswapd0]
14 root 0 SW< [nfsiod]
21 root 0 SW< [mtdblockd]
22 root 0 SW< [rpciod/0]
95 root 0 SWN [jffs2_gcd_mtd9]
173 root 0 SW [RTW_CMD_THREAD]
186 root 1296 S udhcpd /usr/bin/udhcpd.conf
191 root 1580 S -sh
195 root 1568 R ps
# free
total used free shared buffers
Mem: 189840 42376 147464 0 2016
-/+ buffers: 40360 149480
Swap: 0 0 0
# cat /proc/meminfo
MemTotal: 189840 kB
MemFree: 147480 kB
Buffers: 2016 kB
Cached: 14876 kB
SwapCached: 0 kB
Active: 1680 kB
Inactive: 15368 kB
Active(anon): 156 kB
Inactive(anon): 0 kB
Active(file): 1524 kB
Inactive(file): 15368 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 176 kB
Mapped: 656 kB
Slab: 4812 kB
SReclaimable: 736 kB
SUnreclaim: 4076 kB
PageTables: 36 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 94920 kB
Committed_AS: 504 kB
VmallocTotal: 1048404 kB
VmallocUsed: 3084 kB
VmallocChunk: 1042024 kB
显然这个内存总数超出了实际128M的大小. 查看uboot的bootargs, 果然, "Kernel command line: mem=65M console=ttyS0,115200n8r cpuclock=54M no_console_suspend apppart=mtdblock8 appfs=squashfs mtdparts=mt_sf:64k(bt),512k(ub),256k(avbin),128k(logo),64k(rw0),64k(rw1),512k(loader),3520k(kernel),7232k(app),512k(data)mem=128M@128M"
多了个配置, 这个是给256M的demo板用的. 问题解决.
2. 修改后再运行wifi的脚本后统计一下, 查看meminfo和slabinfo. free的有13M左右.
# cat /proc/meminfo
MemTotal: 59892 kB
MemFree: 13328 kB
Buffers: 28 kB
Cached: 21028 kB
SwapCached: 0 kB
Active: 1780 kB
Inactive: 19648 kB
Active(anon): 372 kB
Inactive(anon): 0 kB
Active(file): 1408 kB
Inactive(file): 19648 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 392 kB
Mapped: 1516 kB
Slab: 4852 kB
SReclaimable: 640 kB
SUnreclaim: 4212 kB
PageTables: 72 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 29944 kB
Committed_AS: 952 kB
VmallocTotal: 1048404 kB
VmallocUsed: 3084 kB
VmallocChunk: 1038384 kB
# cat /proc/slabinfo
slabinfo - version: 2.1
# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables <limit> <batchcount> <sharedfactor> : slabdata <active_slabs> <num_slabs> <sharedavail>
scsi_sense_cache 1 40 96 40 1 : tunables 120 60 0 : slabdata 1 1 0
scsi_cmd_cache 1 24 160 24 1 : tunables 120 60 0 : slabdata 1 1 0
rpc_buffers 8 8 2048 2 1 : tunables 24 12 0 : slabdata 4 4 0
rpc_tasks 8 24 160 24 1 : tunables 120 60 0 : slabdata 1 1 0
rpc_inode_cache 0 0 416 9 1 : tunables 54 27 0 : slabdata 0 0 0
cfq_io_context 2 40 96 40 1 : tunables 120 60 0 : slabdata 1 1 0
cfq_queue 2 44 88 44 1 : tunables 120 60 0 : slabdata 1 1 0
fuse_request 0 0 376 10 1 : tunables 54 27 0 : slabdata 0 0 0
fuse_inode 0 0 384 10 1 : tunables 54 27 0 : slabdata 0 0 0
jffs2_inode_cache 19 145 24 145 1 : tunables 120 60 0 : slabdata 1 1 0
jffs2_node_frag 94 145 24 145 1 : tunables 120 60 0 : slabdata 1 1 0
jffs2_refblock 12 16 248 16 1 : tunables 120 60 0 : slabdata 1 1 0
jffs2_tmp_dnode 0 0 32 113 1 : tunables 120 60 0 : slabdata 0 0 0
jffs2_raw_inode 0 0 68 56 1 : tunables 120 60 0 : slabdata 0 0 0
jffs2_raw_dirent 0 0 40 92 1 : tunables 120 60 0 : slabdata 0 0 0
jffs2_full_dnode 94 203 16 203 1 : tunables 120 60 0 : slabdata 1 1 0
jffs2_i 19 22 336 11 1 : tunables 54 27 0 : slabdata 2 2 0
ntfs_big_inode_cache 0 0 448 9 1 : tunables 54 27 0 : slabdata 0 0 0
ntfs_inode_cache 0 0 152 26 1 : tunables 120 60 0 : slabdata 0 0 0
ntfs_name_cache 0 0 512 8 1 : tunables 54 27 0 : slabdata 0 0 0
ntfs_attr_ctx_cache 0 0 32 113 1 : tunables 120 60 0 : slabdata 0 0 0
ntfs_index_ctx_cache 0 0 64 59 1 : tunables 120 60 0 : slabdata 0 0 0
nfs_direct_cache 0 0 68 56 1 : tunables 120 60 0 : slabdata 0 0 0
nfs_write_data 36 36 448 9 1 : tunables 54 27 0 : slabdata 4 4 0
nfs_read_data 32 36 416 9 1 : tunables 54 27 0 : slabdata 4 4 0
nfs_inode_cache 0 0 552 7 1 : tunables 54 27 0 : slabdata 0 0 0
nfs_page 0 0 64 59 1 : tunables 120 60 0 : slabdata 0 0 0
fat_inode_cache 17 22 352 11 1 : tunables 54 27 0 : slabdata 2 2 0
fat_cache 9 169