[发明专利]一种外存储器的直接内存储器访问方法和装置有效
申请号: | 202010819404.9 | 申请日: | 2020-08-14 |
公开(公告)号: | CN111966608B | 公开(公告)日: | 2023-06-06 |
发明(设计)人: | 赵帅 | 申请(专利权)人: | 苏州浪潮智能科技有限公司 |
主分类号: | G06F12/0868 | 分类号: | G06F12/0868;G06F12/0871;G06F12/0873;G06F13/28 |
代理公司: | 北京连和连知识产权代理有限公司 11278 | 代理人: | 张涛;宋薇薇 |
地址: | 215100 江苏省苏州市吴*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 外存 直接 内存储器 访问 方法 装置 | ||
本发明公开了一种外存储器的直接内存储器访问方法和装置,方法包括:在内存储器管理模块中划分输入缓冲区和输出缓冲区,并生成输入缓冲区和输出缓冲区的物理地址;响应于感知到外存储器尝试写入数据,而由相应进程基于物理地址将数据写入输入缓冲区,并执行内存屏障指令以将数据从输入缓冲区更新到内存储器;响应于感知到外存储器首次尝试读取数据,而执行失效缓存指令以将数据从输出缓冲区移除。本发明能够维护CPU访问缓存获取数据时的数据一致性和性能,提高缓存利用率。
技术领域
本发明涉及内存领域,更具体地,特别是指一种外存储器的直接内存储器访问方法和装置。
背景技术
在驱动中通常需要将提供给IO(输入输出)卡DMA(直接内存储器访问)使用的空间配置为non cache(非缓存的),原因是由于IO卡与CPU交互时同时把数据和控制消息分开传输。在控制消息到达时,IO卡会通过CPU的片上网络把数据直接写入内存(不经过缓存),但armv8的CPU并不监听总线变化,因此不会因为内存数据的变化而刷新缓存内容。传统驱动架构中,申请内存空间给DMA访问时,通常需要配置虚拟地址的页属性为non cache,但该属性会改变MMU(内存管理单元)的寻址策略。CPU在访问这部分地址时,会跳过cache直接从内存中获取。在特殊场景下,该策略会保证CPU获取数据的准确性,但同时会降低其他场景下CPU访问这部分空间的性能。
针对现有技术中跳过缓存导致数据一致性受损和CPU利用缓存受限的问题,目前尚无有效的解决方案。
发明内容
有鉴于此,本发明实施例的目的在于提出一种外存储器的直接内存储器访问方法和装置,能够维护CPU访问缓存获取数据时的数据一致性和性能,提高缓存利用率。
基于上述目的,本发明实施例的第一方面提供了一种外存储器的直接内存储器访问方法,包括执行以下步骤:
在内存储器管理模块中划分输入缓冲区和输出缓冲区,并生成输入缓冲区和输出缓冲区的物理地址;
响应于感知到外存储器尝试写入数据,而由相应进程基于物理地址将数据写入输入缓冲区,并执行内存屏障指令以将数据从输入缓冲区更新到内存储器;
响应于感知到外存储器首次尝试读取数据,而执行失效缓存指令以将数据从输出缓冲区移除。
在一些实施方式中,输入缓冲区和输出缓冲区各自具有连续的物理地址,并且输入缓冲区和输出缓冲区的大小和起始地址均以与直接内存储器访问相适应的方式基于缓存线而对齐。
在一些实施方式中,由相应进程基于物理地址将数据写入输入缓冲区包括:使用文件内存映射方法将物理地址映射到进程的地址空间以建立链接,并基于链接将数据写入输入缓冲区。
在一些实施方式中,输入缓冲区和输出缓冲区以不经过缓存的方式映射到进程的地址空间。
在一些实施方式中,将物理地址映射到进程的地址空间包括:分别将输入缓冲区的每个页的起始物理地址和结束物理地址映射到进程的地址空间。
在一些实施方式中,方法还包括:在执行失效缓存指令将数据从输出缓冲区移除后,还访问内存储器以从内存储器获取更新过的数据。
在一些实施方式中,方法还包括:在获取更新过的数据后,还由进程基于物理地址从输出缓冲区获取数据。
本发明实施例的第二方面提供了一种外存储器的直接内存储器访问装置,包括:
处理器;和
存储器,存储有处理器可运行的程序代码,程序代码在被运行时依次执行以下步骤:
在内存储器管理模块中划分输入缓冲区和输出缓冲区,并生成输入缓冲区和输出缓冲区的物理地址;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于苏州浪潮智能科技有限公司,未经苏州浪潮智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010819404.9/2.html,转载请声明来源钻瓜专利网。