公开/公告号CN105095353A
专利类型发明专利
公开/公告日2015-11-25
原文格式PDF
申请/专利权人 中国科学院计算技术研究所;天津中科蓝鲸信息技术有限公司;
申请/专利号CN201510345279.1
申请日2015-06-19
分类号G06F17/30;
代理机构北京律诚同业知识产权代理有限公司;
代理人祁建国
地址 100190 北京市海淀区中关村科学院南路6号
入库时间 2023-12-18 12:21:18
法律状态公告日
法律状态信息
法律状态
2023-07-07
未缴年费专利权终止 IPC(主分类):G06F17/30 专利号:ZL2015103452791 申请日:20150619 授权公告日:20181204
专利权的终止
2018-12-04
授权
授权
2015-12-23
实质审查的生效 IPC(主分类):G06F17/30 申请日:20150619
实质审查的生效
2015-11-25
公开
公开
技术领域
本发明涉及并行网络文件系统中文件间数据预读取后的缓存命中机制,特 别涉及一种并行网络文件系统中预读小文件后忙等的系统及方法。
背景技术
随着大数据时代的来临,全球数据信息量迅猛增长。在电子商务、社交网 络、科学计算等领域中存在越来越多的小尺寸的文件。创下纽约交易所最大规 模IPO的阿里巴巴集团,其旗下重要电商交易平台——淘宝,在2010年就已 保存了约286亿张图片,平均大小仅为17.45KB,8KB以下图片占总量的61%。 从某种意义上来说,当前并不存在纯粹的大文件应用。人类逐步迈入“海量小 文件的时代”。
并行网络文件系统(pNFS)采用元数据与数据服务分离结构,客户端通 过带外访问模式直接访问存储设备,在大文件访问过程中性能极佳,同时,又 因其广泛的兼容性和扩展性,得到工业界和学术界的支持,逐渐成为事实上的 分布式文件系统标准。在文件“小而多”的发展趋势下,并行网络文件系统越 来越多地承担了小文件管理的重任。然而,由于缺乏针对小文件的访问优化, 小文件的性能较差。
小文件数据访问时,数据访问随机性强、IO粒度小、磁盘吞吐量低。图1 测试了在单线程随机访问时,IO粒度对磁盘吞吐量的影响。对于4KB粒度的 随机IO访问,其磁盘吞吐量仅为6.56MBps;对于1MB粒度的随机IO访问, 其磁盘吞吐量可达到75.09MBps。4KB和1MB数据访问的磁盘吞吐量相差达 11倍以上。对于大于1MB粒度的随机IO访问,磁盘吞吐量保持高量稳定。 磁盘“善于顺序读,不善于随机读”、“善于大粒度IO,不善于小粒度IO” 的特性,与小文件访问过程中“大量的随机、小粒度IO”的特点形成了难以 逾越的鸿沟,磁盘吞吐量低的问题暴露无遗。
在先前的技术研究中,提出一种基于分布式文件系统的数据预读装置及其 方法(张军伟、杨洪章、邵冰清等,申请号201410108037.6),该种方法同步 地预读文件间的数据,在数据页面尚未从磁盘返回之前,数据页面处于加锁状 态,即使后续的数据页面已在缓存中,应用程序也需要等待当前数据页面解锁 后才能读取内容,这对于系统性能产生了很大的影响。
针对现实需求以及当前相关研究的不足有必要提出一种并行网络文件系 统中预读文件间数据后读取忙等的系统及方法,以有效隐藏加锁页面的等待时 延,能够从根本上克服原有技术“闲等”的弊端,对于系统性能会有十分显著 的正面影响。
发明内容
本发明的目的在于提供一种并行网络文件系统中预读小文件后忙等的系 统及方法,用于有效隐藏加锁页面的等待时延,以从根本上克服“闲等”的弊 端。
为了实现上述目的,本发明提供一种并行网络文件系统中预读小文件后忙 等的系统,包括:
客户端,用于根据当前访问文件的文件布局确定当前访问文件的数据页面 数量,并访问磁盘中当前访问文件的数据页面;
服务器端,用于获取当前访问文件的文件布局并发送给客户端;
客户端当上层应用在缓存中查找到被加锁的当前数据页面时,将该当前数 据页面标记为“未访问”,跳过该当前数据页面,访问下一个数据页面,待全 部数据页面访问完成后,对该当前数据页面进行再次访问。
所述的系统,其中,客户端在匿名页缓存中通过双向链表的方式组织匿名 页,该双向链表的组织方式为二级索引,通过检查该双向链表中是否有相应页 面的方式判断匿名页缓存中是否有该当前数据页面。
所述的系统,其中,客户端根据该文件布局判定页面缓存中是否有该当前 数据页面,当页面缓存中有该当前数据页面时,进一步判定该当前数据页面是 否为最后一个数据页面;当页面缓存中无该当前数据页面时,则进一步判定匿 名页缓存中是否有该当前数据页面;
客户端当判定该当前数据页面为最后一个数据页面时,进一步判定当前访 问文件的加锁页面数量是否为0,若为0,则进一步判断当前访问文件是否为 最后一个文件,若不为0,则判断当前数据页面是否标记为“未访问”:若是, 则等待被解锁,并在解锁后删除标记,将文件的加锁页面数量减1并将数据页 面返回给上层应用,若否,将数据页面返回给上层应用;
客户端当判定匿名页缓存中有该当前数据页面时,在匿名页缓存中将数据 页面返回给上层应用;当判定匿名页缓存中无该当前数据页面时,向磁盘发出 读盘请求,将读盘访问所涉及的数据页面加锁,并将当前数据页面设置为“未 访问”,将该当前访问文件的加锁页面数量加1,并判定该当前数据页面是否 为最后一个数据页面。
所述的系统,其中,客户端向磁盘发出读盘请求后,扩展该文件布局,并 根据扩展后的文件布局向磁盘发送大粒度读盘请求;
磁盘处理该大粒度读盘请求,并根据扩展后的文件布局,将被请求大粒度 数据发送给客户端;
客户端将大粒度数据的数据页面拷贝到所创建的匿名页链表中的空白匿 名页中。
所述的系统,其中,所述扩展后的文件布局中扩展部分的文件布局大小等 于一次大粒度请求页面数减去原始文件布局。
为了实现上述目的,本发明提供一种并行网络文件系统中预读小文件后忙 等的方法,包括:
步骤一,服务器端获取当前访问文件的文件布局并发送给客户端;
步骤二,客户端根据当前访问文件的文件布局确定当前访问文件的数据页 面数量,并访问磁盘中当前访问文件的数据页面;
步骤三,客户端当上层应用在缓存中查找到被加锁的当前数据页面时,将 该当前数据页面标记为“未访问”,跳过该当前数据页面,访问下一个数据页 面,待全部数据页面访问完成后,对该当前数据页面进行再次访问。
所述的方法,其中,所述步骤三中,包括:
客户端在匿名页缓存中通过双向链表的方式组织匿名页,该双向链表的组 织方式为二级索引,通过检查该双向链表中是否有相应页面的方式判断匿名页 缓存中是否有该当前数据页面。
所述的方法,其中,所述步骤三中,包括:
客户端根据该文件布局判定页面缓存中是否有该当前数据页面,当页面缓 存中有该当前数据页面时,进一步判定该当前数据页面是否为最后一个数据页 面;当页面缓存中无该当前数据页面时,则进一步判定匿名页缓存中是否有该 当前数据页面;
客户端当判定该当前数据页面为最后一个数据页面时,进一步判定当前访 问文件的加锁页面数量是否为0,若为0,则进一步判断当前访问文件是否为 最后一个文件,若不为0,则判断当前数据页面是否标记为“未访问”:若是, 则等待被解锁,并在解锁后删除标记,将文件的加锁页面数量减1并将数据页 面返回给上层应用,若否,将数据页面返回给上层应用;
客户端当判定匿名页缓存中有该当前数据页面时,在匿名页缓存中将数据 页面返回给上层应用;当判定匿名页缓存中无该当前数据页面时,向磁盘发出 读盘请求,将读盘访问所涉及的数据页面加锁,并将当前数据页面设置为“未 访问”,将该当前访问文件的加锁页面数量加1,并判定该当前数据页面是否 为最后一个数据页面。
所述的方法,其中,所述步骤三中,包括:
客户端向磁盘发出读盘请求后,扩展该文件布局,并根据扩展后的文件布 局向磁盘发送大粒度读盘请求;
磁盘处理该大粒度读盘请求,并根据扩展后的文件布局,将被请求大粒度 数据发送给客户端;
客户端将大粒度数据的数据页面拷贝到所创建的匿名页链表中的空白匿 名页中。
所述的方法,其中,所述步骤三中,包括:
所述扩展后的文件布局中扩展部分的文件布局大小等于一次大粒度请求 页面数减去原始文件布局。
与现有技术相比,本发明的有益技术效果是:
本发明提出了一种并行网络文件系统中预读文件间数据后读取忙等的系 统及方法,以提高海量小文件读访问性能。本发明提出的读取忙等的系统及方 法是基于先前发明——数据预读装置及其方法的改进。
附图说明
图1是不同IO粒度的磁盘吞吐量。
图2是读取忙等的方法流程图。
图3是本发明并行网络文件系统中预读小文件后忙等的系统结构图;
图4是双向链表的组织方式示意图;
图5是本发明并行网络文件系统中预读小文件后忙等的方法流程图。
图6是具体而形象的优化效果。
具体实施方式
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的 限定。
如图2所示,是读取忙等的方法流程图。
速度再快的存储介质,其访问时延也是存在的。在海量小文件高并发访问 过程中,会出现“页面被请求但结果暂未返回”的情况。如图2所示,传统的 解决办法是闲等策略,即等待读盘延迟。这对于后续页面已在缓存中的场景, 无疑是一种策略失误。本发明采用忙等策略:当应用程序在缓存中命中被加锁 的页面时,先将该页面标记“未访问”,然后跳过该页,访问下一个页面,待 全部页面访问完毕后,再对“未访问”页面进行二次访问。通过忙等策略可有 效降低访问时延,同时可以避免将空白页面返回上层应用。
如图3所示,是本发明并行网络文件系统中预读小文件后忙等的系统结构 图,该系统100包括以下模块:客户端模块1、服务器端模块2、磁盘模块3。
上述模块中,进一步地,客户端模块1包括如下6个子模块:
操作行为触发子模块11,用于触发目录内的随机访问操作,并按照随机 序列访问该目录下的文件。
在本发明中,客户端顺序访问同一目录下的若干文件。
文件布局子模块12,用于确定当前访问文件的数据页面数量以及页面存 储在磁盘的具体位置等。
客户端访问文件时需持有文件布局,即该文件含有几个页面,页面存储在 磁盘的具体位置等。
文件信息管理子模块13,用于记录客户端访问当前文件的加锁页面数量, 以及数据页面加锁控制、数据页面“未访问”标记。
页面缓存子模块14,用于将已与具体的文件相关联的页面可放入页面缓 存中。
匿名页缓存子模块15,用于负责匿名页的管理、合并(如需要时)、检 索、清除等工作,全部是围绕匿名页进行,也可以笼统地称为用于缓存匿名页。
匿名页是未关联到任何文件的数据页。磁盘大粒度读取访问返回的页面 中,将原始请求的页面放置在页面缓存中,剩余的页面被称为匿名页。客户端 在页面缓存中将匿名页通过双向链表的方式组织在匿名页缓存子模块15中, 如图4所示。
在图4中,匿名页链表中记录该链表中页面的起始文件布局、总页面数、 剩余页面数、使用情况等信息,其组织方式为二级索引。磁盘中位置连续的数 据页面合并到同一匿名页链表中。
当操作行为触发子模块11(即上层应用)所需的页面没有在页面缓存中 命中时,检查匿名页链表中是否有相应页面。若命中,则将其返回给操作行为 触发子模块11,并保留在页面缓存中,同时摘除该匿名页,并将剩余页面数 减少;若不命中,则发起同步读盘操作。
访问磁盘子模块16,用于通过读盘请求,访问磁盘上的数据。
在上述模块中,进一步地,服务器端模块2包括如下1个子模块:
文件布局子模块21,用于管理服务器端的文件系统内全部文件的文件布 局。
在上述模块中,进一步地,磁盘模块3包括如下2个子模块:
处理磁盘访问请求模块31,用于通过磁盘排队处理客户端发送来的读盘 请求。
将被请求数据返回模块32,用于根据磁盘的文件布局,将被请求数据发 送给客户端。
如图5所示,是本发明并行网络文件系统中预读小文件后忙等的方法流程 图,结合图2、3、4,该流程包括以下操作步骤:
步骤(1),客户端触发随机访问操作,按照随机序列访问该目录下的文 件。
步骤(2),客户端确定当前访问文件的数据页面数量,将该文件的加锁 页面数量置0,顺序访问该文件的所有数据页面。
步骤(3),客户端访问当前数据页面,检查页面缓存是否命中。如果命 中,则进入步骤(6);如果未命中,则检查是否命中匿名页缓存。如果未命 中,则进入步骤(4)。如果命中,则进入步骤(5)。
步骤(4),客户端触发读盘操作,同时发起同步预读,将该读盘访问时 涉及的数据页面加锁,将当前数据页面设置为“未访问”,将该文件的加锁页 面数量加1。进入步骤(6)。
步骤(5),客户端在匿名页缓存中将数据页面返回给操作行为触发子模 块11。
步骤(6),客户端检查当前数据页面是否是最后一个数据页面。如果否, 则访问下一个数据页面,进入步骤(3)。如果是,则进入步骤(7)。
步骤(7),客户端检查该文件的加锁页面数量是否等于0。如果是,则 进入步骤(11)。如果否,客户端再次遍历该文件的所有数据页面,进入步骤 (8)。
步骤(8),客户端检查当前数据页面是否标记“未访问”。如果否,则 进入步骤(9)。如果是,则检查当前数据页面是否仍然被加锁。如果是,则 等待,直至被解锁。将“未访问”标记删除,将该文件的加锁页面数量减1, 进入步骤(9)。
步骤(9),客户端将该数据页面返回给操作行为触发子模块11。
步骤(10),客户端检查当前数据页面是否是最后一个数据页面。如果否, 则访问下一个数据页面,进入步骤(8)。如果是,则进入步骤(11)。
步骤(11),客户端检查当前访问文件是否是最后一个文件。如果否,则 访问下一个文件,进入步骤(2)。如果是,则结束。
在本发明中,一个文件的各数据页面(假设有正整数N个),需要遍历 两次;第一次对应步骤(6),其中有A个页面返回,有B个页面加锁;第二 次对应步骤(10),其中有B个页面被返回,这些页面是第一次遍历中被加 锁的页面;在上述过程中,A+B=N。
在上述步骤中,进一步地,所述步骤(1)包括如下步骤:
(1-1)客户端的操作行为触发子模块11触发目录内的随机访问操作。
(1-2)客户端的操作行为触发子模块11按照随机序列访问该目录下的文 件。
在上述步骤中,进一步地,所述步骤(2)包括如下步骤:
(2-1)客户端的文件布局子模块12向服务器发送RPC请求,获取当前 访问文件的文件布局。
(2-2)服务器端的文件布局子模块21接收RPC请求,处理该请求,将 文件布局发送给客户端。
(2-3)客户端的文件布局子模块12接收服务器端发来的文件布局。
(2-4)客户端的文件布局子模块12确定当前访问文件的数据页面数量。
(2-5)客户端的文件信息管理子模块13将该文件的加锁页面数量置0。
(2-6)客户端的操作行为触发子模块11顺序访问该文件的所有数据页面。
在上述步骤中,进一步地,所述步骤(3)包括如下步骤:
(3-1)客户端的操作行为触发子模块11访问当前数据页面。
(3-2)客户端的页面缓存子模块14根据文件布局,查找页面缓存中是否 有该数据页面。如果命中,则进入步骤(6);如果未命中,则进入步骤(3-3)。
(3-3)客户端的匿名页缓存子模块15检查匿名页缓存中是否有该数据页 面。如果未命中,则进入步骤(4)。如果命中,则进入步骤(5)。
在上述步骤中,进一步地,所述步骤(4)包括如下步骤:
(4-1)客户端的访问磁盘子模块16根据该文件布局,扩展为大粒度文件 布局,扩展部分的文件布局大小等于一次大粒度请求页面数减去原始文件布 局,位置为以原始文件布局为中心。
(4-2)客户端的匿名页缓存子模块15针对扩展后的文件布局,创建新的 匿名页链表,在链表头部设置该匿名页链表的起始文件布局、总页面数、剩余 页面数等信息。并增添相应的空白匿名页,同时加锁。
(4-3)客户端的匿名页缓存子模块15遍历各匿名页链表,检查所有表头 的起始地址与页面总数,通过与该新链表的起始地址与页面总数相比较,判断 是否可以合并链表。如果可以合并,则将两链表合并,同时,将页面总数、剩 余页面数相加。
(4-4)客户端的访问磁盘子模块16根据大粒度文件布局,向磁盘发送大 粒度读盘请求。
(4-5)磁盘的处理磁盘访问请求模块31排队处理客户端发送来的读盘请 求。
(4-6)客户端的文件信息管理子模块13将当前数据页面设置为“未访问”, 将该文件的加锁页面数量加1。
(4-7)进入步骤(6)。与此同时,磁盘的将被请求数据返回模块32根 据文件布局,将被请求大粒度数据发送给客户端。客户端的访问磁盘子模块 16将数据页面拷贝到客户端的页面缓存子模块14相应空白匿名页中,之后对 该匿名页解锁。
在上述步骤中,进一步地,所述步骤(5)包括如下步骤:
(5-1)客户端的匿名页缓存子模块15在匿名页缓存中将数据页面返回给 操作行为触发子模块11。
在上述步骤中,进一步地,所述步骤(6)包括如下步骤:
(6-1)客户端的文件布局子模块12检查当前数据页面是否是最后一个数 据页面。
(6-2)如果否,客户端的操作行为触发子模块11访问下一个数据页面, 进入步骤(3)。如果是,则进入步骤(7)。
在上述步骤中,进一步地,所述步骤(7)包括如下步骤:
(7-1)客户端的文件信息管理子模块13检查该文件的加锁页面数量是否 等于0。
(7-2)如果是,则进入步骤(11)。如果否,客户端的文件信息管理子 模块13再次遍历该文件的所有数据页面,进入步骤(8)。
在上述步骤中,进一步地,所述步骤(8)包括如下步骤:
(8-1)客户端的文件信息管理子模块13检查当前数据页面是否标记“未 访问”。
(8-2)如果否,则进入步骤(9)。如果是,则检查当前数据页面是否仍 然被加锁。
(8-3)如果是,则等待,直至被解锁。
(8-4)客户端的文件信息管理子模块13将“未访问”标记删除,将该文 件的加锁页面数量减1,进入步骤(9)。
在上述步骤中,进一步地,所述步骤(9)包括如下步骤:
(9-1)客户端的匿名页缓存子模块15将该数据页面返回给操作行为触发 子模块11。
在上述步骤中,进一步地,所述步骤(10)包括如下步骤:
(10-1)客户端的文件信息管理子模块13检查当前数据页面是否是最后 一个数据页面。
(10-2)如果否,则访问下一个数据页面,进入步骤(8)。如果是,则 进入步骤(11)。
在上述步骤中,进一步地,所述步骤(11)包括如下步骤:
(11-1)客户端的操作行为触发子模块11检查当前访问文件是否是最后 一个文件。
(11-2)如果否,则访问下一个文件,进入步骤(2)。如果是,则结束。
本发明提出一种并行网络文件系统中预读文件间数据后读取忙等的系统 及方法。相较于“闲等”技术,“忙等”技术有效隐藏了同步IO等待的延时。
在图6中,是以随机访问同一目录下5个16K小文件为例,展示了具体 而形象的优化效果,假设一次读请求粒度为32KB,F_1至F_5在物理位置上 连续。首先访问F_4,之后访问F_2,在访问F_3时,F_3的前2个页面的数 据内容暂未返回,后2个页面的数据内容已返回。按照通常的做法,需要先等 待F_3的页面1返回后,才能访问页面2至页面4。此次读访问由于同步等待 IO而造成了时间延迟。按照本发明提出的方法,遇到页面1和页面2加锁的 情况,先访问页面3和页面4,与此同时,页面1和页面2继续同步读取中。 部分时间延迟被隐藏掉,系统性能有明显的提升。
当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情 况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但 这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
机译: 并行访问网络文件系统中访问数据的带外方法和系统以及使用此类访问数据的方法
机译: 在近性能并行存储中访问大量小文件的方法和系统
机译: 一种无内容并行访问系统和一组存储库中的无内容并行访问方法