收藏 分销(赏)

compcache详细解说文档.docx

上传人:仙人****88 文档编号:12039895 上传时间:2025-09-01 格式:DOCX 页数:9 大小:83.20KB 下载积分:10 金币
下载 相关 举报
compcache详细解说文档.docx_第1页
第1页 / 共9页
compcache详细解说文档.docx_第2页
第2页 / 共9页


点击查看更多>>
资源描述
compcache详细说明文档 一、基本概念  1.Swap是什么? 在我们了解compcache之前,我们需要先了解什么是swap。简单 地说,swap就是虚拟内存。换句话说,计算机会划出一小部分硬盘空间来, 当作内存使用。一般来说,计算机会在内存中保留尽可能多的信息,直到内存占满。在这种情况下,计算机会开始把处于非活动状态的数据“块”(称作页)移到 swap里面,以为活动进程腾出内存。尽管swap比物理内存速度慢,但当你需要更多内存而又由于种种原因无法增加的时候,它仍然很有用。随着内存价格的 降低,普通意义上的swap应用也越来越少。 2.Compcache是什么?   “Compcache (压缩缓存)”提供了使用部分内存作为虚拟“压缩”swap的能力。换句话说,你可以把一部分你的物理内存(默认为25%)当作虚拟“压缩”swap使 用。这是一种经典的时间/空间权衡。你得到了更多“内存”,但伴随数据读出写入时的压缩、解压过程又会降低速度。当处理器变得更快(压缩/解压耗时更少) 而计算设备变得更小(没有空间放更多物理内存)时,虚拟“扩展”内存听起来就更有吸引力了。 二、应用场景 Android操作系统中的应用 在默认出厂情况下,当Android用光 内存之后,它会杀掉进程而不是将它们置入swap。从技术上来说,当手机内存不足时,Android会通知非活动进程它将要被杀死。而进程则会写下一小段 信息(比如说地图会写下你的GPS位置)然后死掉。当以后再次启用进程时,它会直接载入这段信息,这样一来,对一些应用来说,就好像它从来没有被关闭过一 样。从机理上说,这跟swap差不多。这两种方式的不同之处在于Android进程只会在它们被关闭的时候记下特定的信息,而 swap/compcache则会记下任何非活动的内存页,而不论这个页里存了些什么东西。理论上说这使得Androids的内存管理机制相对于传统的 swap/compcache更有效率。 三、系统介绍 Rzscontrol Ramzswap xvMalloc Ramzswap Compache由3部分构成,分别是xvMalloc、rzscontrol、ramzswap。关系图如下: 1、xvMalloc 该工程基于RAM块设备创建swap。Swap在RAM中,以压缩的方式存储内容。 2、rzscontrol rzscontrol用来控制ramzswap的组件。Compache核心模块在初始化的时候会创建多个ramzswap设备,rzscontrol就是用来控制每一个ramzswap设备的组件,例如使用rzscontrol进行ramzswap的初始化化或者状态查询等。 3、ramzswap 使用xvMalloc在内存中开辟的用来存放压缩数据的swap区域。 四、关键技术 1、内存管理原理 Compcache采用xvmalloc模块来管理系统内存。内存管理结构如下图所示: Used Block Free Block Free Block Free Block 内存池 系统内存 UsedBlock结构如图所示: Size:块的大小 Prev:上一块的偏移量 F1:本块已使用/未使用 F2:上一块已使用/未使用 User Data:数据区 FreeBlock结构如下图所示: 2、内存管理关键函数 内存管理函数主要集中在xvmalloc.c文件中。 (1) struct xv_pool *xv_create_pool(void) 函数: 该函数从内存空间中创建内存分配池 (2) void xv_destroy_pool(struct xv_pool *pool) 函数: 销毁内存分配池 (3) int xv_malloc(struct xv_pool *pool, u32 size, struct page **page, u32 *offset, gfp_t flags) 函数: 申请内存空间 (4) void xv_free(struct xv_po (5) ol *pool, struct page *page, u32 offset) 函数: 释放内存空间 3、设备管理 设备管理函数主要集中在ramzswap.c文件中 (1) static int create_device(struct ramzswap *rzs, int device_id) 函数: 创建设备 (2) static void destroy_device(struct ramzswap *rzs) 函数: 销毁设备 (3) static int __init ramzswap_init(void) 函数: 设备初始化 (4) static int ramzswap_read(struct ramzswap *rzs, struct bio *bio) 函数: 读设备 (5) static int ramzswap_write(struct ramzswap *rzs, struct bio *bio)函数: 写设备 五、系统功能流程 开始 创建内存设备 初始化内存设备 读设备 写设备 状态查询 注销设备 处理操作请求 其他IO控制 是否合理 抛出异常 否 (1)设备操作总流程 开始 创建内存池 销毁内存池 分配内存空间 释放内存空间 是否有空间 否 扩展内存池 结束 (2)内存管理流程 (3)设备读写流程 设备准备 申请解压空间 数据解压 数据冲刷 设备准备 申请压缩空间 数据压缩 存储 Ioctl:控制I/O设备 Int ioctl(int handle,int cmd,[int *argdx,int argcx]) ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率等。 Cmd参数得出方法:cmd参数在用户程式端由一些宏根据设备类型、序列号、传送方向、数据尺寸等生成,这个整数通过系统调用传递到内核中的驱动程式,在由驱动程式使用解码宏从这个整数中得到设备的类型、序列号、传动方向和数据尺寸等信息,然后通过switch{case}结构进行相应的操作。 快速启动是嵌入式Linux需要解决的关键问题。在比较目前加速嵌入式Linux启动的几种方法的基础上,给出了一种针对内核启动优化的快速启动方案。通过测量内核启动过程时间,获取了主要的延时因素,一次为依据,引入Kernel XIP技术消除了内核映像拷贝解压时间,提出了不检测、驱动模块化、驱动管理化等加速设备初始化策略,设计了一种既适合快速启动又实用的文件系统架构。试验结果表明,该方案明显地加快了嵌入式Linux的启动速度。需要注意的是,方案中使用XIP技术会对系统运行性能造成轻微的影响。在对性能要求高的场合,需采用一定的技术对XIP做进一步优化,如采用Partial XIP。此外,鉴于嵌入式Linux快速启动问题的复杂性,在不同应用背景下,应灵活采用相应的优化技术。 嵌入式系统作为以应用为中心的专用计算机系统,需要在启动速度、实时性、系统尺寸、电源管理等方面进行优化。近年来,linux凭借其优良的特性广泛地应用于嵌入式系统。但是,作为一种原来为PC机设计的操作系统,设计者开始并没有考虑嵌入式应用对启动速度的要求,导致其用典型的方法启动时,启动时间一般都在几十秒以上,这对于用户来说是无法接受的。此外随着Linux内核的不断膨胀,启动时间越来越长,因此,加快启动速度已经成为嵌入式Linux亟待解决的关键问题之一。目前对加快嵌入式linux启动速度的研究主要在以下三个方面:一是待机技术、二是休眠启动、三是常规启动优化。 (2)本文在分析嵌入式Linux启动各个阶段的基础上,结合相关的研究,提出了在嵌入式设备上综合XIP机制和休眠机制,利用休眠的状态信息以加速启动的方案 嵌入式系统大多是专用的计算机系统,以应用为中心,需要在系统的尺寸、启动速度、运行实时性以及电源管理诸方面进行优化。与PC 机相比,嵌入式系统具有不同的硬件结构和软件要求,很多信息设备甚至要求系统即开即用,这就对嵌入式系统的启动速度提出了要求。Linux系统源代码开放,具有内核小、效率高、性能稳定等优点,在嵌入式领域得到了广泛的应用,但启动过程稍显繁琐,因此,Linux应用于嵌入式系统,不仅仅要求在某些功能上的“删减”,加快启动速度也是应用时需要解决的一个重要问题。 快速启动对于普及嵌入式Linux系统具有重要的意义,本文通过分析嵌入式系统的引导过程,提出了综合XIP和linux休眠机制,通过改造bootloader和利用休眠的状态信息,软硬件结合,加速启动的方案。经验证此方案在加快嵌入式Linux启动速度方面效果明显,这对研究和简化嵌入式Linux的引导过程,缩短嵌入式设备的启动时间具有十分重要的研究和借鉴意义。 测试的话可以分5到六次,每次得出采用这种方式的启动时间和不采用这种方式的启动时间画一个表。 XIP技术(execute in place)即就地执行的意思,操作系统内核直接在Flash中运行,不需要拷贝到RAM。但是,NOR Flash的存储器访问周期要比RAM大的多,在使用XIP技术后可能会降低程序的运行速度,不过由于CPU的指令预取机制及Cache机制,实际使用起来并不会明显降低应用程序的运行速度。 (3)提高系统在配置较低的嵌入式设备上的启动速度,对嵌入式Linux的推广应用具有重要的意义。详细分析了嵌入式Linux启动引导过程的Bootloader部分和内核的初始化部分之后,通过对部分内核源代码的修改及U-boot 的重新设计实现,提出了一种基于状态恢复的系统快速引导策略,并在基于Intel Xscale的嵌入式开发板上进行验证。 Linux近年来在嵌入式领域得到了广泛的应用,嵌入式Linux具有内核小、效率高、源代码开放、性能稳定等优点,但启动过程稍显繁琐。信息家电等领域要求系统能够即开即用,简化嵌入式Linux的启动引导过程、缩短启动时间对嵌入式Linux的流行和发展将具有十分重要的意义。 01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压缩!) 02-.gz格式 解压1:[*******]$ gunzip FileName.gz 解压2:[*******]$ gzip -d FileName.gz 压 缩:[*******]$ gzip FileName 03-.tar.gz格式 解压:[*******]$ tar zxvf FileName.tar.gz 压缩:[*******]$ tar zcvf FileName.tar.gz DirName 04-.bz2格式 解压1:[*******]$ bzip2 -d FileName.bz2 解压2:[*******]$ bunzip2 FileName.bz2 压 缩: [*******]$ bzip2 -z FileName 05-.tar.bz2格式 解压:[*******]$ tar jxvf FileName.tar.bz2 压缩:[*******]$ tar jcvf FileName.tar.bz2 DirName 06-.bz格式 解压1:[*******]$ bzip2 -d FileName.bz 解压2:[*******]$ bunzip2 FileName.bz 07-.tar.bz格式 解压:[*******]$ tar jxvf FileName.tar.bz 08-.Z格式 解压:[*******]$ uncompress FileName.Z 压缩:[*******]$ compress FileName 09-.tar.Z格式 解压:[*******]$ tar Zxvf FileName.tar.Z 压缩:[*******]$ tar Zcvf FileName.tar.Z DirName 10-.tgz格式 解压:[*******]$ tar zxvf FileName.tgz 11-.tar.tgz格式 解压:[*******]$ tar zxvf FileName.tar.tgz 压缩:[*******]$ tar zcvf FileName.tar.tgz FileName 12-.zip格式 解压:[*******]$ unzip FileName.zip 压缩:[*******]$ zip FileName.zip DirName 13-.lha格式 解压:[*******]$ lha -e FileName.lha 压缩:[*******]$ lha -a FileName.lha FileName 14-.rar格式 解压:[*******]$ rar a FileName.rar 压缩:[*******]$ rar e FileName.rar rar请到: 下载! 解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量 指定的目录也行):[*******]$ cp rar_static /usr/bin/rar
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服