在产品的开发中linux中文乱码,通过对当前系统消耗显存总额的统计,可以对产品所需显存总数进行精确的评估,因而选择合适的显存芯片与大小,增加产品的成本。在碰到显存泄漏类问题时,常常会对此束手无策,本文通过对proc下进程相关的文件进行剖析,精确评估系统消耗显存的大小,还可以对显存泄漏类问题的解决提供一种定位手段。
在显存使用上的原则是:假如显存充足,不用白不用,尽量使用显存来缓存一些文件,因而推动进程的运行速率,而当显存不足时,会通过相应的显存回收策略收回cache显存,供进程使用。
一、系统总显存的剖析
可以从proc目录下的meminfo文件了解到当前系统显存的使用情况汇总,其中可用的化学显存=memfree+buffers+cached,当memfree不够时,内核会通过回写机制(pdflush线程)把cached和buffered显存回讲到后备储存器,因而释放相关显存供进程使用,或则通过自动方法显式释放cache显存:
echo3>/proc/sys/vm/drop_caches
右图是海思平台下当前系统显存的总体使用情况,其中可以看见,系统消耗掉了29M的显存,下边继续剖析这种显存都是被谁消耗掉了。
#cat/proc/meminfo
MemTotal:68956kB
MemFree:18632kB
Buffers:4096kB
Cached:17260kB
SwapCached:0kB
Active:21304kB
Inactive:19248kB
SwapTotal:0kB
SwapFree:0kB
Dirty:0kB
Writeback:0kB
AnonPages:19216kB
Mapped:2472kB
Slab:6900kB
SReclaimable:924kB
SUnreclaim:5976kB
PageTables:460kB
NFS_Unstable:0kB
Bounce:0kB
CommitLimit:62060kB
Committed_AS:28864kB
VmallocTotal:442368kB
VmallocUsed:46984kB
VmallocChunk:393212kB
二、进程使用显存的统计
在32位中,每位进程拥有4G的虚拟显存空间,其中0~3GB是每位进程的私有用户空间,这个空间对系统中其他进程是不可见的。3~4GB是linux内核空间linux用户内存泄露,由系统所有的进程以及内核所共享的。通过访问/proc/{pid}/下相关文件,可以了解每位线程虚拟显存空间的使用情况,进而了解每位线程所消耗显存的多少。
因为我们的产品都是使用多线程方法实现的,多个线程共享一个进程的用户态虚拟地址空间linux数据恢复,虚拟地址空间包含若干区域,主要有如下几个区域:
1、当前执行文件的代码段linux用户内存泄露,该代码段称为text段。
2、执行文件的数据段,主要储存执行文件用到的全局变量,静态变量。
3、存储全局变量和动态形成的数据的堆。
4、用于保存局部变量和实现函数调用的栈。
5、采用mmap形式映射到虚拟地址空间中的显存段
21/212>