一种并行网络文件系统中预读小文件后忙等的系统及方法_2

文档序号:9375739阅读:来源:国知局
的存储介质,其访问时延也是存在的。在海量小文件高并发访问过程中,会出现“页面被请求但结果暂未返回”的情况。如图2所示,传统的解决办法是闲等策略,即等待读盘延迟。这对于后续页面已在缓存中的场景,无疑是一种策略失误。本发明采用忙等策略:当应用程序在缓存中命中被加锁的页面时,先将该页面标记“未访问”,然后跳过该页,访问下一个页面,待全部页面访问完毕后,再对“未访问”页面进行二次访问。通过忙等策略可有效降低访问时延,同时可以避免将空白页面返回上层应用。
[0047]如图3所示,是本发明并行网络文件系统中预读小文件后忙等的系统结构图,该系统100包括以下模块:客户端模块1、服务器端模块2、磁盘模块3。
[0048]上述模块中,进一步地,客户端模块i包括如下6个子模块:
[0049]操作行为触发子模块11,用于触发目录内的随机访问操作,并按照随机序列访问该目录下的文件。
[0050]在本发明中,客户端顺序访问同一目录下的若干文件。
[0051]文件布局子模块12,用于确定当前访问文件的数据页面数量以及页面存储在磁盘的具体位置等。
[0052]客户端访问文件时需持有文件布局,即该文件含有几个页面,页面存储在磁盘的具体位置等。
[0053]文件信息管理子模块13,用于记录客户端访问当前文件的加锁页面数量,以及数据页面加锁控制、数据页面“未访问”标记。
[0054]页面缓存子模块14,用于将已与具体的文件相关联的页面可放入页面缓存中。
[0055]匿名页缓存子模块15,用于负责匿名页的管理、合并(如需要时)、检索、清除等工作,全部是围绕匿名页进行,也可以笼统地称为用于缓存匿名页。
[0056]匿名页是未关联到任何文件的数据页。磁盘大粒度读取访问返回的页面中,将原始请求的页面放置在页面缓存中,剩余的页面被称为匿名页。客户端在页面缓存中将匿名页通过双向链表的方式组织在匿名页缓存子模块15中,如图4所示。
[0057]在图4中,匿名页链表中记录该链表中页面的起始文件布局、总页面数、剩余页面数、使用情况等信息,其组织方式为二级索引。磁盘中位置连续的数据页面合并到同一匿名页链表中。
[0058]当操作行为触发子模块11 (即上层应用)所需的页面没有在页面缓存中命中时,检查匿名页链表中是否有相应页面。若命中,则将其返回给操作行为触发子模块11,并保留在页面缓存中,同时摘除该匿名页,并将剩余页面数减少;若不命中,则发起同步读盘操作。
[0059]访问磁盘子模块16,用于通过读盘请求,访问磁盘上的数据。
[0060]在上述模块中,进一步地,服务器端模块2包括如下I个子模块:
[0061]文件布局子模块21,用于管理服务器端的文件系统内全部文件的文件布局。
[0062]在上述模块中,进一步地,磁盘模块3包括如下2个子模块:
[0063]处理磁盘访问请求模块31,用于通过磁盘排队处理客户端发送来的读盘请求。
[0064]将被请求数据返回模块32,用于根据磁盘的文件布局,将被请求数据发送给客户端。
[0065]如图5所示,是本发明并行网络文件系统中预读小文件后忙等的方法流程图,结合图2、3、4,该流程包括以下操作步骤:
[0066]步骤(I),客户端触发随机访问操作,按照随机序列访问该目录下的文件。
[0067]步骤(2),客户端确定当前访问文件的数据页面数量,将该文件的加锁页面数量置O,顺序访问该文件的所有数据页面。
[0068]步骤(3),客户端访问当前数据页面,检查页面缓存是否命中。如果命中,则进入步骤(6);如果未命中,则检查是否命中匿名页缓存。如果未命中,则进入步骤(4)。如果命中,则进入步骤(5)。
[0069]步骤(4),客户端触发读盘操作,同时发起同步预读,将该读盘访问时涉及的数据页面加锁,将当前数据页面设置为“未访问”,将该文件的加锁页面数量加I。进入步骤(6)。
[0070]步骤(5),客户端在匿名页缓存中将数据页面返回给操作行为触发子模块11。
[0071]步骤(6),客户端检查当前数据页面是否是最后一个数据页面。如果否,则访问下一个数据页面,进入步骤(3)。如果是,则进入步骤(7)。
[0072]步骤(7),客户端检查该文件的加锁页面数量是否等于O。如果是,则进入步骤
(11)。如果否,客户端再次遍历该文件的所有数据页面,进入步骤(8)。
[0073]步骤(8),客户端检查当前数据页面是否标记“未访问”。如果否,则进入步骤(9)。如果是,则检查当前数据页面是否仍然被加锁。如果是,则等待,直至被解锁。将“未访问”标记删除,将该文件的加锁页面数量减1,进入步骤(9)。
[0074]步骤(9),客户端将该数据页面返回给操作行为触发子模块11。
[0075]步骤(10),客户端检查当前数据页面是否是最后一个数据页面。如果否,则访问下一个数据页面,进入步骤(8)。如果是,则进入步骤(11)。
[0076]步骤(11),客户端检查当前访问文件是否是最后一个文件。如果否,则访问下一个文件,进入步骤(2)。如果是,则结束。
[0077]在本发明中,一个文件的各数据页面(假设有正整数N个),需要遍历两次;第一次对应步骤出),其中有A个页面返回,有B个页面加锁;第二次对应步骤(10),其中有B个页面被返回,这些页面是第一次遍历中被加锁的页面;在上述过程中,A+B = No
[0078]在上述步骤中,进一步地,所述步骤(I)包括如下步骤:
[0079](1-1)客户端的操作行为触发子模块11触发目录内的随机访问操作。
[0080](1-2)客户端的操作行为触发子模块11按照随机序列访问该目录下的文件。
[0081]在上述步骤中,进一步地,所述步骤(2)包括如下步骤:
[0082](2-1)客户端的文件布局子模块12向服务器发送RPC请求,获取当前访问文件的文件布局。
[0083](2-2)服务器端的文件布局子模块21接收RPC请求,处理该请求,将文件布局发送给客户端。
[0084](2-3)客户端的文件布局子模块12接收服务器端发来的文件布局。
[0085](2-4)客户端的文件布局子模块12确定当前访问文件的数据页面数量。
[0086](2-5)客户端的文件信息管理子模块13将该文件的加锁页面数量置O。
[0087](2-6)客户端的操作行为触发子模块11顺序访问该文件的所有数据页面。
[0088]在上述步骤中,进一步地,所述步骤(3)包括如下步骤:
[0089](3-1)客户端的操作行为触发子模块11访问当前数据页面。
[0090](3-2)客户端的页面缓存子模块14根据文件布局,查找页面缓存中是否有该数据页面。如果命中,则进入步骤(6);如果未命中,则进入步骤(3-3)。
[0091](3-3)客户端的匿名页缓存子模块15检查匿名页缓存中是否有该数据页面。如果未命中,则进入步骤(4)。如果命中,则进入步骤(5)。
[0092]在上述步骤中,进一步地,所述步骤(4)包括如下步骤:
[0093](4-1)客户端的访问磁盘子模块16根据该文件布局,扩展为大粒度文件布局,扩展部分的文件布局大小等于一次大粒度请求页面数减去原始文件布局,位置为以原始文件布局为中心。
[0094](4-2)客户端的匿名页缓存子模块15针对扩展后的文件布局,创建新的匿名页链表,在链表头部设置该匿名页链表的起始文件布局、总页面数、剩余页面数等信息。并增添相应的空白匿名页,同时加锁。
[0095](4-3)客户端的匿名页缓存子模块15遍历各匿名页链表,检查所有表头的起始地址与页面总数,通过与该新链表的起始地址与页面总数相比较,判断是否可以合并链表。如果可以合并,则将两链表合并,同时,将页面总数、剩余页面数相加。
[0096](4-4)客户端的访问磁盘子模块16根据大粒度文件布局,向磁盘发送大粒度读盘请求。
[0097](4-5)磁盘的处理磁盘访问请求模块31排队处理客户端发送来的读盘请求。
[0098](4-6)客户端的文件信息管理子模块13将当前数据页面设置为“未访问”,将该文件的加锁页面数量加I。
[0099](4-7)进入步骤(6)。与此同时,磁盘的将被请求数据返回模块32根据文件布局,将被请求大粒度数据发送给客户端。客户端的访问磁盘子模块16将数据页面拷贝到客户端的页面缓存子模块14相应空白匿名页中,之后对该匿名页解锁。
[0100]在上述步骤中,进一步地,所述步骤(5)包括如下步骤:
[0101](5-1)客户端的匿名页缓存子模块15在匿名页缓存中将数据页面返回给操作行为触发
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1