[发明专利]一种将对象存储系统实现为本地文件系统的方法有效
申请号: | 201710040491.6 | 申请日: | 2017-01-20 |
公开(公告)号: | CN107045530B | 公开(公告)日: | 2019-07-26 |
发明(设计)人: | 阮培源;王同洋;路松峰;黄炎;刘儒君;廖卫国 | 申请(专利权)人: | 华中科技大学 |
主分类号: | G06F16/172 | 分类号: | G06F16/172 |
代理公司: | 武汉东喻专利代理事务所(普通合伙) 42224 | 代理人: | 方可 |
地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种将对象存储系统实现为本地文件系统的方法,采用文件系统元数据缓存算法和内存描述结构,减少了应用程序与swift存储系统后台的交互次数,提高了应用程序访问swift存储系统的性能;采用预分配内存池和延迟批量回收空闲内存块的策略,提高了遍历一个包含大量子目录和文件的目录时的效率;采用打开文件句柄内存描述结构,使得应用程序能高效的进行文件读写操作;采取预读策略,有效减少应用服务器和swift存储后端之间的网络交互次数,提供文件系统的读性能;采用零次拷贝,分块写入的策略,在写文件的过程中没有任何的数据拷贝和缓存,每次write系统调用都是一个完整的块写入操作,提高了文件写入的效率。 | ||
搜索关键词: | 一种 对象 存储系统 实现 本地 文件系统 方法 | ||
【主权项】:
1.一种将对象存储系统实现为本地文件系统的方法,其特征在于,包括:(1)文件系统元数据缓存:将本地文件系统文件的绝对路径名作为缓存项的关键字,计算得到一个哈希值,以哈希值作为元数据缓存项的关键字,将缓存项散列到哈希表中,其中,缓存项结构包括类型、修改时间、缓存时间、是否目录、状态、互斥锁、反向指针、哈希冲突双向链表以及最近最少使用双向链表;(2)文件系统目录遍历:当应用程序通过可移植操作系统接口POSIX兼容的C库接口readdir访问本地文件系统的特定目录时,实现readdir接口所采用算法核心是:预先分配内存池,初始化池中描述目录结构的描述体dir_info,在每次遍历文件系统目录时,都向池中请求dir_info描述体,当池中的dir_info描述体耗尽或达到某个阀值时,启动回收算法,释放未被占用的dir_info描述体,归还到内存池中,应用程序重新从内存池中获取请求dir_info描述体;(3)文件的打开:当应用程序读或者写文件时,都会执行打开文件操作,对于每个打开文件操作,给所打开的文件分配一个描述打开操作的打开文件句柄内存结构,其中,该打开文件句柄记录了:(a)描述打开文件的标记,打开文件标记分为读、写、读和写三种情况;(b)以字节为单位的文件对象的大小;(c)读缓存区的内存描述体,但实际的读缓存区滞后到具体第一次读操作请求时才分配;(d)描述从swift对象存储系统下载对象的下载上下文结构,该结构体是在打开文件时预分配的,与之关联的读缓存区是滞后分配的;(e)描述将文件作为对象上传到swift对象存储系统的上传上下文结构,该结构体是在打开文件时预分配的,但与之关联的上传缓存区无需额外分配,复用应用程序写操作的write调用缓存区即可;(f)描述在写文件操作时,实际上传文件到swift对象存储系统过程的内存描述符上传任务描述结构,该描述结构体中记录了上传状态、线程ID、互斥访问锁、下载计数器、能写信号量、写完成信号量、能上传信号量以及任务结束信号量;整个上传过程中,用户的write系统调用与上传用户数据到swift对象存储系统之间的同步逻辑,由这四个信号量进行控制;(4)读文件:对于应用程序读文件的操作,采用的是预读策略,所谓预读是指从当前请求偏移处开始,读出比当前请求数据量更大的一块到内存缓存起来,每次读操作时,首先检查所请求的数据是否在缓存区,如果在,则直接从缓存区中读出,无需向后端的swift对象存储系统请求数据,如果不在缓存区,则向后端的swift对象存储系统请求比当前请求更大的一段数据到内存缓存起来;当应用程序读文件之前,必须先以读或者读和写方式打开文件,并建立打开文件句柄的内存结构,当应用程序第一次调用read系统调用读文件时,首先分配一个缓存区,缓存区的大小通过配置文件进行调节,但最小为1Mbytes,然后,采取“预读”策略,预先从swift对象存储后端将文件对象的内容一次读满缓存区,应用程序后续的读文件系统调用,将先检查所读数据是否已经在缓存区中,如果不在,则再触发一次对swift对象存储后端的读操作,如此反复进行,直到应用程序关闭文件,当文件被关闭时,释放打开文件句柄所占用的内存和信号量资源;(5)文件写入:对于应用程序的写文件操作,采用的是零次拷贝,分块写入的策略,当应用程序打开文件准备写入数据时,建立打开文件句柄的内存结构,每次应用程序写文件操作的write系统调用的用户数据缓存区将被复用为“上传缓存区”,上传线程直接从该缓存区中读取数据上传到swift对象存储后端,当该缓存区中的所有数据都上传完毕时,视该次write系统调用成功执行,下一次write系统调用都重复该过程,直到该文件被关闭,当文件被关闭时,释放打开文件句柄所占用的内存和信号量资源;在整个写文件过程中,应用程序的write系统调用与上传数据到swift对象存储后端这两个动作之间的同步,由打开文件句柄所引用的上传任务描述结构中的四个信号量进行精确控制,而且在用户态空间没有任何的数据拷贝操作。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201710040491.6/,转载请声明来源钻瓜专利网。