[发明专利]基于持久性内存的用户层异步IO方法与系统有效
申请号: | 202110494879.X | 申请日: | 2021-05-07 |
公开(公告)号: | CN113282407B | 公开(公告)日: | 2023-01-03 |
发明(设计)人: | 李丁丁;张妮阳;林凯欣;黄震华;汤庸 | 申请(专利权)人: | 华南师范大学 |
主分类号: | G06F9/50 | 分类号: | G06F9/50 |
代理公司: | 广州嘉权专利商标事务所有限公司 44205 | 代理人: | 黎扬鹏 |
地址: | 510631 广东省广州市*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 持久性 内存 用户 异步 io 方法 系统 | ||
1.基于持久性内存的用户层异步IO方法,其特征在于,包括:
应用程序发起读I/O请求;
通过用户级ucontext纤程对所述读I/O请求进行第一处理后,将所述读I/O请求传入内核层进行第二处理;
由所述内核层对所述读I/O请求进行第三处理后,将所述读I/O请求发送至硬件层进行第四处理;
根据所述读I/O请求,通过所述硬件层的读操作获取文件数据;
其中,所述读I/O请求包括单个I/O请求或批量I/O请求;
所述应用程序发起读I/O请求,包括:
应用程序发起读I/O请求;
在用户层中计算所述读I/O请求的优先级,并为所述读I/O请求分配I/O请求结构体;
根据I/O请求表确定所述读I/O请求的插入位置以及所述读I/O请求的待分配纤程;
根据所述读I/O请求的优先级,将所述读I/O请求插入到所述I/O请求表中;
确定所述I/O请求表的待处理纤程;
所述通过用户级ucontext纤程对所述读I/O请求进行第一处理后,将所述读I/O请求传入内核层进行第二处理,包括:
通过用户级ucontext纤程对所述读I/O请求进行处理;
将所述I/O请求结构体从aiocb结构体转换为iov结构体;
在SQ提交队列中填充所述读I/O请求,并确定地址引用机制;
等待预设时长并确定完成所有I/O请求的接收后,通过IO_uring系统调用函数io_uring_enter将所述读I/O请求传入内核层进行处理;
所述由所述内核层对所述读I/O请求进行第三处理后,将所述读I/O请求发送至硬件层进行第四处理,包括:
所述IO_uring系统通过mmap函数设置环形缓冲区,所述内核层将所述SQ提交队列中的读I/O请求提交至硬件层;所述mmap函数用于实现用户层与内核层之间的数据共享。
2.根据权利要求1所述的基于持久性内存的用户层异步IO方法,其特征在于,所述根据所述读I/O请求,通过所述硬件层的读操作获取文件数据,包括:
所述硬件层通过读操作获取文件数据;
对所述文件数据进行内存拷贝后,将所述文件数据填充至CQ队列;
根据地址引用机制,将所述CQ队列中的返回数据刷新至aiocb结构体。
3.根据权利要求2所述的基于持久性内存的用户层异步IO方法,其特征在于,所述方法还包括配置API接口的步骤,其中所述API接口包括:
aio_read(),用于请求异步I/O读操作;
aio_write(),用于请求异步I/O写操作;
aio_error(),用于检查异步I/O请求的状态;
aio_return(),用于将获得完成的异步I/O请求的返回状态;
lio_listio(),用于发起一系列I/O操作;
所述aio_read()和aio_write()用于对单个I/O请求进行处理;
所述lio_listio()用于对批量I/O请求进行处理。
4.根据权利要求3所述的基于持久性内存的用户层异步IO方法,其特征在于,所述方法还包括组织I/O请求表的步骤,该步骤包括:
在用户层设置资源池,所述资源池用于供I/O请求使用;
从所述资源池中提取多个节点,并根据双向链表将所述多个节点组成I/O请求表;
计算每个I/O请求的优先级;
在所述I/O请求表中查询目标插入列,通过I/O请求的文件描述符来判断I/O请求是否被执行,对于未被执行的I/O请求,在所述I/O请求表中新建待处理列来处理所述文件描述符对应的I/O请求。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华南师范大学,未经华南师范大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110494879.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:数据处理方法及装置
- 下一篇:定位工装以及变速箱与发动机的合装结构