基于亲和性感知的DMA缓冲区管理方法及装置制造方法及图纸

技术编号:7759066 阅读:131 留言:0更新日期:2012-09-14 00:55
本发明专利技术涉及一种基于亲和性感知的DMA缓冲区管理方法和装置,包括1)标识缓冲区的亲和性;2)对于输入过程,分配亲和性较低的缓冲区;由于缓冲区中大部分的数据位于Cache之外,避免部分软件一致性维护操作,其中包括物理地址计算和一致性维护指令的开销。3)对于输出过程,分配亲和性较高的缓冲区。由于缓冲区中大部分的数据在Cache中,当把I/O数据从用户态缓冲区拷贝到内核态缓冲区时,将数据直接写入Cache,避免Cache替换将原本属于应用的数据写回主存引入的开销,同时使得应用重用度高的数据尽量驻留在Cache中,减少Cache的污染问题。

【技术实现步骤摘要】

本专利技术涉及到计算机系统的内存管理方法,一种基于亲和性感知的DMA缓冲区管理方法及装置
技术介绍
外设的输入输出各需要经历4个步骤。输入的4个步骤是(I)将数据从外设复制到内核空间。如果没有提供DMA (direct memory access)方式,贝1J复制操作由CPU执行,数据将两次经过存储总线;(2)对数据进行校验和计算,此操作涉及到所有的传输数据,数据将再次经过存储总线;(3)将数据从内核复制到用户空间,此操作必须由CPU执行,数据跨越内核与用户空间,经过两次存储总线;(4)应用从用户空间获取数据。与接收过程相对,输出也需要类似的4个步骤。显然,在整个输入/输出过程中,数据最多会6次经过存储总线,存储总线需要提供6倍于I/O数据流的带宽。随着片上多处理器系统的普及,多个线程会共享使用片上Cache资源,包括应用程序和内核线程,其中I/O处理属于典型的内核线程。但是传统的最近最少使用(LRU)的Cache替换策略并不能区分不同线程的访问,因此一个线程的Cache失效可能会替换属于另一个线程的Cache块,该问题被称为线程间干扰。为了减少线程间的干扰,相关工作使用亲和性描述数据的分布与访存性能的关系。进程在包含其所需数据的处理器上运行,能减少数据在处理器之间的流动,提高处理器的访存效率,即数据在存储层次中的位置决定了访存的开销。特别是在近几年高速带宽和设备的出现,系统含有大量用于处理I/O的线程,其与应用程序并行执行。因此,Cache的干扰问题不仅仅局限于应用程序之间,在I/O和应用之间同样会存在Cache干扰的问题。由于I/O的数据重用度较低,并且每次外设进行I/O时,Cache中的部分数据会因替换而写回主存。一旦设备I/O的过程结束,被写回的数据需要再次被使用时,又需要从主存中读取。因此,针对处理器中各个线程间共享的存储资源,特别是对于资源受限和设计较为简单的嵌入式系统,需要借助操作系统来管理资源,更需要从软件的角度提供一种改进的内存管理方法,方法的灵活性和通用性,从而实现对系统性能的优化。
技术实现思路
本专利技术要解决的技术问题是提出一种基于亲和性感知的DMA缓冲区管理方法及装置,解决如何减少I/o处理过程引入的偏外存储访问,包含两个方面1.)降低I/O处理过程自身的访存开销;2.)缓解I/O处理过程引入的Cache污染问题。本专利技术所采用的技术方案为一种基于亲和性感知的DMA缓冲区管理方法,包括以亲和性的高低将缓冲区分为两类,并确定不同I/O处理过程对缓冲区亲和性的需求。并 使用纯软件的手段,在操作系统层来标识缓冲区的亲和性。具体的说,以输出处理过程的特点来标识低亲和性缓冲区,具体包括输出过程中,由于一致性维护操作后,处理器不再访问输出缓冲区,所以将最近释放的输出缓冲区记录为低亲和性。以输入处理过程的特点来标识高亲和性缓冲区,具体包括当输入过程中,缓冲区释放前,处理器需要将输入缓冲区中的数据拷贝到用户缓冲区,所以将最近释放的输入缓冲区标识为高亲和性。将不同亲和性的缓冲区集中管理,具体包括所有最近被释放的低亲和性缓冲区存放于低亲和性链表中,最近被释放的高亲和性缓冲区存放于高亲和性链表中。针对不同亲和性的缓冲区采用不同的管理策略,具体包括对于高亲和性的缓冲区采用先进先出的管理策略,使高亲和性的缓冲区能尽快被重用,避免高亲和性缓冲区中的数据被挤出Cache ;对于低亲和性的缓冲区采用后进先出的管理策略,使推迟低亲和性缓冲区被重用的时机,保证缓冲区中尽可能多的数据位于Cache之外。 同时,本专利技术还提供了一种基于亲和性感知的DMA缓冲区管理装置,包括缓冲区亲和性分析模块,缓冲区收集模块和缓冲区管理模块,其中缓冲区亲和性分析模块,用于分析系统中缓冲区亲和性的高低;高亲和性的缓冲区中的数据会大量占据Cache资源;而亲和性低的缓冲区中的数据会大量位于Cache之外;该模块将被释放缓冲区的亲和性信息传递给缓冲区收集模块;缓冲区收集模块,用于收集被标了亲和性的缓冲区;其中高亲和性和低亲和性的缓冲区被分开存放,分别保存于两个不同的链表中,便于后续分配缓冲区时能够快速定位不同亲和性的缓冲区;缓冲区收集模块将链表中是否含有对应缓冲区的信息传递给缓冲区分配模块,供后续的分配过程进行决策;缓冲区管理模块,用于给不同的I/O处理过程分配对应的缓冲区;其中,给输出过程分配亲和性较高的缓冲区,减少I/o处理过程的偏外存储访问;给输入过程分配亲和性较低的缓冲区,减少一致性维护操作的开销。本专利技术所述缓冲区管理模块包括低亲和性缓冲区管理单元和高亲和性缓冲区管理单元,其中输入缓冲区分配单元,用于给输入过程分配缓冲区;对于输入过程,由对应的设备驱动程序向内存管理器提出分配请求,因此所有在驱动程序中分配的DMA缓冲区可以被标识为输入缓冲区;在分配输入缓冲区时,如果LAL链表非空,直接从该链表头部获取缓冲区;否则,使用默认的分配函数获取函数;在释放输入缓冲区时,如果HAL链表非满,将缓冲区插入链表头部;否则,使用默认的函数释放缓冲区;输出缓冲区分配单元,用于给输出过程分配缓冲区;对于输出过程,在驱动程序以外的范围内申请的DMA缓冲区可以被标识为输出缓冲区;在分配输入缓冲区时,如果HAL链表非空,直接从该链表头部获取缓冲区;否则,使用默认的分配函数获取函数;在释放输入缓冲区时,如果LAL链表非满,将缓冲区插入链表尾部;否则,使用默认的函数释放缓冲区。本专利技术的有益效果是将亲和性的概念引入到DMA缓冲区的管理中,通过操作系统实时追踪缓冲区的亲和性,即明确缓冲区中的数据在存储层次中的分布状况。根据输入/输出过程的特征分配不同特性的缓冲区。对于输入过程,分配亲和性低的缓冲区,减少软件维护I/O数据一致性的开销;对于输出过程,分配亲和性高的缓冲区,在用户态缓冲区向内核态缓冲区拷贝数据时,使得处理器的访存能直接在Cache中命中,避免从主存中读回数据,同时由于没有数据被替换出Cache,因此也不需要将数据写回。本专利技术完全工作在系统软件层,直接操作系统系统提供的信息来追踪缓冲区的亲和性,既不依赖特殊的底层硬件,也不需要使用模拟器来来收集处理器的访存序列,同时避免使用LRU Stack模型引入的较大开销。附图说明下面结合附图和实施例对本专利技术进一步说明。图I为基于亲和性感知的DMA缓冲区管理方法的实施方法; 图2为本专利技术标识缓冲区亲和性方法的示意图;图3是本专利技术的输出缓冲区分配的示意图;图4是本专利技术的输入缓冲区分配的示意图;图5是本专利技术的基于亲和性感知的DMA缓冲区管理装置实施例的结构示意图。具体实施例方式现在结合附图和优选实施例对本专利技术作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本专利技术的基本结构,因此其仅显示与本专利技术有关的构成。本专利技术利用I/O处理过程中处理器访存和一致性维护操作的时机,追踪缓冲区的亲和性。通过修改操作系统的内存分配器,使用两个链表分别管理亲和性不同的缓冲区。对于不同的I/O处理过程,分别向对应的链表中申请缓冲区。本专利技术提供的基于亲和性感知的DMA缓冲区管理方法实例,其流程如图2所示,包括如下步骤110 :根据I/O处理过程中处理器访存和一致性维护操作的时机,标识最近释放的DMA缓冲区的亲和性。为了明确缓冲区本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:程旭钟祺管雪涛王晶
申请(专利权)人:北京北大众志微系统科技有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1