嵌入式系统的高速缓存管理

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:strongstrongqiang
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:本文针对嵌入式文件系统提出了一套基于最久未使用页面替换算法的高速缓存管理方案。该高速缓存管理模块的使用,较好地提高文件系统的读写性能。以NorFlash操作为例,使用高速缓存以后,可以使多数量、小文件的写入速度提升20%左右,读出速度提升30%-40%。对于大容量数据传输,适当地调整缓存的容量,也可使得写入速度提升2%,读出速度提升10%左右。
  关键词:高速缓存管理方案;回写;最久未使用页面替换算法;块设备
  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)14-20000-00
  
  Embedded System Cache Management
  ZHONG Rui1,FANG Wen-kai2
  (1.School of Electronics Science and Engeering, Southeast University, Nanjing 210096,China;2.School of Integrated Circuit, Southeast University,Nanjing 210096,China)
  Abstract: A new file cache management based on Least Recently Used (LRU) was bring forward and realized in this paper. The impact of this cache management on embedded system files is proved to be positive. NorFlash as an example, after the use of this cache management, the write speed of mass and little files upgrade 20%, and read speed upgrade from 30% to 40%. To large-capacity data transmission, proper adjustment of cache capacity, we can also makes writing speed upgrade 2% and read rate increase of around 10%.
  Key words: Cache Management; Write-back; Least Recently Used; Block device
  
  1 论文研究背景
  
  嵌入式系统的运行环境远不同于PC机;嵌入式系统的存储介质多为块设备,其存储原理与磁盘设备差异很大;桌面文件系统为提高读写性能尽可能使用较大的文件缓存,嵌入式系统必须针对资源限制设计特定的缓存管理单元,并尽量适应于块设备的操作特点。
  目前,嵌入式领域有多种文件系统可供选择:RomFS是只读文件系统,可以放在ROM空间,也可以放在系统RAM中,通常用作嵌入式Linux的根文件系统;JFFS/JFFS2是专为Flash设计的日志文件系统,它们提供了很好的掉电保护措施,并能平衡读写Flash设备,但是它们需要占用大量RAM空间,在文件系统接近满时,它们速度会变得很慢,同时启动的时候需要扫描日志节点,不太适合大容量存储应用;Yaffs是专为NandFlash设计的日志文件系统,其针对NandFlash访问的特点进行优化(如块的读写、坏块管理等),但欠缺通用性;Ext2是Linux下使用的文件系统,具有支持存储容量大,访问速度快等优点,但是对Flash存储设备支持不好;FAT文件系统是目前桌面系统中使用最广泛的文件系统,其文件管理方便、通用性好,但是同样不能直接用于嵌入式应用,它的缓存管理单元主要针对pc机的磁盘管理,运用于块存储设备并不能有效提升文件的读写速度。我们由此进行了专项开发。东南大学国家专用集成电路工程技术中心针对这一需求进行了将FAT文件系统运用到嵌入式系统的研究工作。
  
  2 高速缓存管理原理
  
  高速缓冲存储器(Cache),是一种加速内存或磁盘存取的技术,主要用来提升系统响应的速度。其作用的原理在于使用较快速的存储装置保留一份从慢速存储装置中所读取的数据,当需要再从较慢的存储体中读写数据时,Cache能够使读写的动作先在快速的装置上完成。这样可以使得系统的响应较为快速。
  这种技术如果仅仅使用在读数据这一方面,则没有任何问题。如果还要用在写上,即写入Cache中的数据不立即回写真正的存储体,则一旦电源中断或出现其它意外会导致数据的流失。而每次都将数据写入真正的存储体,会使Cache只能发挥加速读取的功能,而不能加速写入。这样的情况使Cache的写入方式分为两类:
  (1)直写式(Write-through):每次遇到写入Cache的同时,也把数据写入真正的存储设备,以保证Cache和真正的存储设备中的单元数据的一致性。直写式系统简单可靠,但每次更新Cache时都要对真正的存储设备写入,因此速度受到了影响。
  (2)回写式(Write-back):数据一般只写到Cache,这样可能出现Cache中的数据得到更新而存储体中的数据不变的情况。但此时可在Cache中设一标志表示数据是否需要回写,等系统有空或这部分Cache需要存储其它数据或等到一定的时间后,再将数据写回存储设备,这种做法是用承担一点风险来换取效率的。
  在嵌入式文件系统中,同样需要使用高速缓冲技术来提升文件系统的性能。由于嵌入式系统的资源有限,同时针对嵌入式系统块设备的存储特点(块读、块写),需要设计针对嵌入式应用特点的高速缓存管理。本论文设计了一种针对嵌入式应用特点的高速缓存管理单元,其具有如下特点:(1)软件模块化设计,提供统一接口,便于移植到不同平台;(2)采用回写方式提升写入效率,同时具有一定的掉电保护措施;(3)设计最久未使用页面替换算法(LRU)提升Cache系统的命中率;(4)以块设备的块大小为缓冲单元,实现对块设备读写的优化;下面将具体介绍本论文设计的高速缓存管理模块的实现方法。
  
  3 实现代码
  
  3.1 文件系统Cache的主数据结构
  本论文的Cache管理系统将Cache设计成保存在内存中的一个结构体数组。数组的每一个元素缓冲了存储设备的一个簇的数据,同时还保存了为便于操作的其他必要信息。Cache结构定义的代码清单如List 3.1所示:
  List 3.1 文件系统Cache的主要数据结构
  typedef struct _Disk_Cache{
  U8DriveNo;//设备号,
  U8 Flag;//状态
  U16RW_ID;//读/写标志
  U32CluNo; //缓冲的簇号
  U8 buf[DISK_CACHE_SIZE]; //缓冲//数据区
  }DISK_CACHE;
  Cache的大小可以采用静态分配的方法,其代码见List 3.2。
  List 3.2 Cache存储大小分配
  DISK_CACHE DiskCache[MAX_DISK_CACHE] //Cache大小
  其中MAX_DISK_CACHE的值,如果太小则Cache性能提升不明显,太大则占据大量系统内存资源。在实际应用中,需要根据系统资源和性能要求作出合理的折衷。
  3.2 Cache管理的主要操作
  本论文设计的Cache管理可以作为一个独立的Cache管理模块,与文件系统本身有一定的独立性。Cache管理模块对文件系统提供了统一的API接口。表1为所使用API的列表,本节将介绍这些函数的实现过程。
  
  3.2.5 置写标志函数
  根据前面对于Cache数据结构的介绍,需要回写的Cache块的Flag元素需标记为已被修改。函数WriteClu()就是完成这样的功能。它有两个参数,设备号和要操作的设备簇号,该函数首先根据设备号和簇号查找Cache数组DiskCache[],找到设备簇在Cache中的缓存数组元素,然后将该元素的Flag标志置为CACHE_WRITE(或操作)。
  3.2.6 回写存储设备
  函数CacheWriteBack()实现改动数据的回写。该函数只有一个参数index,为Cache数组的下标号,即根据下标号,读取指定Cache项的设局结构,根据DriveNo成员决定的设备号,读取设备的DROBJ结构(在其它文件系统中可能不同)以获取操作设备的信息,然后将Cache的Flag标记置回无需回写状态并调用设备驱动完成回写操作。
  3.3 Cache管理的掉电处理
  本论文采用回写式的Cache管理。前面提到这种方法为提升性能而承担了一定的风险,即有可能在Cache中数据尚未回写时发生了掉电等异常情况导致系统失去响应,这样新写入的数据将丢失,之前的写入操作失败。为了在一定程度上解决此问题,本论文采用如下规则:(1)在设备关闭时Cache中所有与之相关的项必须回写;(2)在系统空闲的时候,可以运行一个优先级较低的回写任务,该任务完成查找Cache数组中所有成员标志为已改写的元素,将其回写。
  另外,文件系统掉电保护还包括FAT表与文件数据一致性的问题,即在文件数据操作和FAT表更新操作之间发生掉电等异常,导致文件数据与FAT表数据不一致。对于此问题的处理,本论文采用如下的规则:
  (1)有修改完FAT表后,才允许删除对应簇的无效数据;(2)应用程序调用了一个文件操作接口之后返回之前,必须完成FAT表的更新以及FAT表的备份;(3)文件的新数据在写入物理存储设备之后,才允许修改FAT表。
  采用上述措施后,即使写入某簇的时候发生错误,也可以采取错误处理进行补救,或者直接返回给上层的应用,或者重新申请一个新的簇。总之,不至于在FAT表上出现不合事实的错误。
  3.4 Cache管理在文件系统中的应用
  上述Cache管理操作是以文件簇为单位的,而文件系统最终通过设备驱动以簇为单位操作设备上的数据的,因此只需对设备驱动作一定的修改,在驱动中调用表3.1中的Cache管理API函数就可以实现用上述Cache管理方法管理设备上的数据了。
  以NorFlash驱动为例,介绍Cache管理的添加。根据2.5.1节关于驱动的介绍可知NorFlash驱动中与存储介质进行数据交互的函数是nor_rd_io(),需要对此函数进行改写。为便于说明,将此函数的原型列如下:
  int nor_rd_io(U16 driveno, U32 page, void *buffer, U16 count, int do_read)
  函数中driveno为操作扇区号,page为操作的簇号,buffer为读写数据的缓冲区,count为操作的次数,do_read为读写的标志(1为读,0为写)。
  首先根据函数的读写标志确定操作类型。如果是读操作,则先调用函数CluinCache()判断要读取的文件簇是否在Cache中已经缓存,如已经缓存,则根据缓存的数组下标,直接读Cache项buf[]中存储的数据到buffer中;若不在缓存中,则通过替换算法在Cache中找到一项用于替换,调用NorFlash驱动,将设备上的数据同时写入buffer和Cache项的buf[]元素中,以便于下次访问使用方便。对于写操作,可以首先判断所写的簇是否在Cache中,如在,则更新Cache项中buf[]内容;如不在,则根据替换算法找到新的Cache项,并将buffer写入新Cache项中buf[]。写操作采用的是Cache回写策略,此时并没有回写物理设备,回写物理设备的操作是在Cache回写函数中完成的。
  上述高速缓存的使用,有效地减少了设备的存取次数,提高了系统的通过能力并降低平均响应时间,特别是在做数据传输时,数据停留在高速缓存中,直到系统认为适当的时候才进行数据传输。另外,最久未使用页面替换算法(LRU)的使用大大提高了Cache系统的命中率,提高了文件系统的读写性能。
  
  4 测试与评估
  
  4.1 测试平台
  本调试平台由基于SEP3203的实验开发板,JTAG仿真器和运行于主机上的集成开发环境(IDE)组成。将开发板通过JTAG仿真器连接到PC机上的集成调试环境(IDE)软件平台,在IDE中统一完成汇编/C 语言的编辑、编译、连接。IDE选择ARM 公司的开发软件(SDT2.5、ADS1.2),利用处理机的Embedded-ICE 性能,通过JTAG 接口实现实时的仿真调试。使用ARM ADS,并通过JTAG仿真器,就可以实现针对ARM处理器开发板的板极调试。目前ARM ADS的最新版本为1.2。本论文使用ADS的集成开发环境CodeWarrior IDE作为代码编译的工具,运用ARM扩展调试器AXD进行代码的调试和结果观察。
  为了全面测试加上Cache管理模块后文件系统性能的提升,现以NorFlash的读写为例,将测试过程分为如下三步骤:
  4.1.1 小文件写入测试
  将Cache数组的元素参数MAX_DISK_CACHE设为20,根据第三章介绍的文件系统API函数,在设备上建立10个文件,每个文件中写入512字节的任意数据,写完之后关闭上述文件。测试整个过程的完成时间。将文件数目增加到20,文件大小增加到1024字节,重复测试得下表所示结果。
  
  通过比较两次测试的结果可知,采用回写式Cache管理的文件系统在写入操作时减少了对存储设备的访问次数,大大提升了对多次、小文件的写入速度。上述两表中对于写入相同文件数目而文件大小不同情况下,写入速度差别并不大。这是因为文件大小都没有超过NorFlash操作的基本单位——块。
  4.1.2 小文件读出测试
  对于上面创建的文件再调用文件系统API函数,测试文件的读出速度。测试分两种情况。首先,在写入后立即读出,此时数据仍在Cache中,可以作为使用Cache情况下读出速度的测试;然后,将设备掉电,Cache中数据清除,再测量读出时间,此时可以作为未使用Cache下的读速度。按照这样的测试过程,得到如下两表。
  
  根据上面两表结果可以看出在使用Cache和未使用Cache的情况下,小文件的读出速度提高明显,约有30%-40%的提升。
  4.1.3 大容量数据的读写测试
  在Flash上只建立一个文件,向文件中分别写入大小不等的数据,测试文件的写入速度如下表所示。
  
  可见读出与Cache容量相差越大的数据,读速度差别越小。从理论上分析可知,Cache中不能够为大容量的数据缓存,每次读取数据时Cache的命中率很低,均须访问实际物理设备,因而读速度提升不明显。
  实际应用中,应该首先知道系统可供文件系统使用的内存大小,根据可用内存情况设置高速缓存的大小。同时还应该知道,应用中需要经常传输文件的大小,如容量较小,则缓存单元可选用块的大小,如需要传输的文件都很大,也可将数块作为基本缓冲单元。总之,实际应用中,可以根据需要合理定制缓存参数,最终达到性能和资源消耗的较好折衷。
  
  5 结束语
  
  本文介绍了一种针对嵌入式应用的高速缓存管理方案。该高速缓存管理具有模块化、易于移植的特点,且采用了最久未使用页面替换算法(LRU)作为缓存替换策略,方法简洁、资源占有率低且具有较高的缓存命中率,同时该缓存管理还具有一定的掉电保护措施。经实践测试本方案能有效的提升嵌入式系统的读写速度。
  
  参考文献:
  [1] 卓越. FAT文件系统在嵌入式块设备系统中的优化[D].东南大学,2007.
  [2] 硬盘FAT文件系统原理的详细分析[DB/OL]. http://www.vshj.com/.
  [3] Microsoft Crop. FAT32 File System Specification, 2000.
  [4] 汤铮.基于嵌入式技术的电力装置文件系统及逻辑组态的研究[D].南京 东南大学电力系统及其自动化系,2005.
  [5] 孙涛. 基于ARM的嵌入式闪存文件系统的研究与实践[D].湖北工业大学计算机系,2005.
  [6] 赵俊才.DOS文件系统在Flash存储介质上的实现[D].中国科学院计算机计数研究所,1999.
  [7] 张延虎.嵌入式设备中文件系统的研究与实现[D].北京科技大学控制理论与控制工程系,2001.
  [8] 冯福香.LINUX文件系统的性能、可扩展性和缓冲技术研究[D].南京大学软工程系,2004.
  [9] Bart Broekman,Edwin Notenboom(美) .嵌入式软件测试[M].电子工业出版社,2004.
  [10] Patton(美) .软件测试(原书第2版) [M].机械工业出版社.2001.
  
  收稿日期:2007-12-17
其他文献
随着我国个人收入的提高和物质条件的逐步改善,人们对精神享受的追求也自然产生,对能够满足这种追求的载体艺术品的需求随之增加,这种需求不仅包括消费需求,也包括投资需求。人们
目的探讨国产大口径毛细柱火焰光度气相色谱法测定工作场所空气中有毒物质黄磷的含量。方法按GBZ 159-2004(工作场所空气中有害物质监测)中的规定进行采样,大口径毛细柱火焰
利率市场化改革是我国金融改革中的重要部分,也是经济发展的趋势所向。“十二五”发展建设期间是利率市场化改革的重要机遇期,在改革只剩存贷款利率上下限尚未放开的关键时期
军火作为国际贸易交易标的中的一种特殊商品,国际军火贸易也自然成为国际贸易的重要组成部分。军火贸易不仅受一般商品贸易规律的制约,而且由于军火贸易的特殊性,从而使得军火贸
随着社会各界对教学目标要求的不断提高,教育改革也不断深化。在自主化的学习模式中,作为教学中的重要环节——评价方式成为了教育改革中的重要内容。而会计专业的实训课程是
目的:观察速效救心丸治疗老年继发性肺动脉高压的疗效。方法:选择继发性肺动脉高压56例,随机分为观察组36例和对照组20例。两组均给予常规吸氧、利尿、强心、扩血管等对症治
本文介绍一种简单实用的抢答电路,它由按钮开关、继电器和彩色灯泡组成(见附图)。该电路由交流220V市电供电,可供四个小组使用。它具有电路元件少、故障率低、工作可靠等特
随着社会经济的不断提高,逐渐开始更加严格要求工程项目造价,对于控制总造价来说工程资料造价十分重要。本文在分析发展工程资料管理现状,并且阐述控制造价中工程造价资料的
杭州《都市快报》2010年11月28日报道《是不是果子狸咬了我弟弟?》,我们在当日阅读该报后,确定咬人动物并非果子狸,而是野生动物鼬獾,即刻联系记者告知患者积极做好狂犬病暴
环境问题日益严重,越来越多的企业政府投入到环境保护中去,环境会计的发展则成为了必然的结果。环境会计虽是一种较新颖的会计核算方式。但专业的会计人员缺失,没有具体的法