云存储客户端多路恒定速率io缓存的构建方法及装置的制造方法_2

文档序号:9667078阅读:来源:国知局
行并发控制和缓存。
[0049] 参见图1,本发明实施例提供的一种云存储客户端多路恒定速率10缓存的构建方 法,包括:
[0050] S101、将多个文件并行写入相应的目标缓存节点中;
[0051] S102、判断每个文件的缓存值是否大于第一缓存阈值;其中,所述第一缓存阈值为 动态获得的每个节点的缓存阈值;
[0052] 具体的,在本实施例中,将多路文件同时进行写入时,每路分配固定大小的缓存, 当单个文件所占用的缓存超过第一缓存阈值时,会触发文件的缓存替换。
[0053] 若是,则执行S103、确定缓存值大于所述第一缓存阈值的文件所对应的第一缓存 节点,并按照第一预定替换规则释放所述第一缓存节点中的第一预存文件;
[0054] 优选的,所述确定缓存值大于所述第一缓存阈值的文件所对应的第一缓存节点, 并按照第一预定替换规则释放所述第一缓存节点中的第一预存文件,包括:
[0055] 根据LRU算法,确定所述第一缓存节点的双向循环链表中尾部的预存文件为所述 第一预存文件,并释放所述第一预存文件的数据块;和/或,
[0056] 计算所述第一缓存节点中预存文件的保留度,确定保留度最小的预存文件为所述 第一预存文件,并释放所述第一预存文件的数据块。
[0057] 具体的,在本实施例中组织文件内缓存时,将文件按照对象存储的方式映射为后 端的数据块结构,缓存的数据块通过双向循环链表进行组织,按照LRU算法的思想替换访 问过的块。其中需要说明的是,客户端的所有缓存块会全部挂在到一个双向循环链表上。当 某次访问某个块的时候如果未命中,则从后端加载并插入到lru链表头部,S卩加载到双向 循环链表的尾部,如果命中则将该块移动到头部,每个块内包含其所在lru循环链表的指 针,所有的块移动都是指针操作,所以不需要额外的辅助数据结构,可通过操作的节点单独 完成调整操作。其中,参见图2为本实施例提供的缓存节点的双向循环链表示意图;参见图 3为本实施例提供的客户端中缓存节点的双向循环链表示意图。
[0058] 并且在本实施例中,可以通过LRU算法和保留度来决定对哪个文件进行替换。
[0059]LRU是LeastRecentlyUsed近期最少使用算法,为内存管理的一种页面置换算 法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于 LRU而将其移出内存而腾出空间来加载另外的数据。因此通过LRU算法决定对那个文件进 行替换,则释放双向循环链表中尾部的数据块就可以,即访问频率低的。
[0060] -般来说文件的访问频率和文件的大小没有明显的相关性的,但是相同的内存容 量相对于大文件能容纳更多的小文件,也就是说在相同的缓存内放置小文件具有更高的命 中率,所以我们给小文件更高的优先级,使访问命中率更高。所以保留度应该和文件的大小 成反比。
[0061] 优选的,保留度的计算方法,包括:
[0062] 根据预存文件的最近访问时间和访问频率,计算第一参数;
[0063] 根据预存文件所占内存值,计算第二参数;其中,所述第二参数与预存文件所占内 存值成反比;
[0064] 根据所述第一参数和所述第二参数,计算所述保留度。
[0065] 具体的,在本实施例中,保留度的计算公式表示为:
[0066]S=g(FAGE)*u(FLEN);
[0067] 其中,S:代表每个文件的保留度;
[0068]g(FAGE):代表按照文件的最近访问时间和一段时间的访问频度所得的系数,即本 实施例中的第一参数。其计算方式为每个文件对应64bit的长整形(标记为K),每隔指定周 期(可配可调)统计某个文件时间是否被访问(如果访问过则置标记fig= 1否则为0)如 果访问则讲该文件所对应的K值右移1位然后最高位与fig进行或运算。具体的本实施例 中的第一参数的计算公式可以表示为:g(FAGE) = (Κ>>1) | (flag&OxFFFFFFFFFFFFFFFF);
[0069]u(FLEN):代表根据文件大小计算所得的系数,即本实施例中的第二参数。该系 数与文件大小成反比,最简单的方式为:u(FLEN) = 1/FLEN,则保留度的计算公式为:S=g(FAGE)/FLEN;
[0070] 但是IK和1M的文件相比,IK相当于g(FAGE)向右移动10位,1M相当于向右移动 20位,这种文件的老化速度太大,而且1K与1MB相差10位,差距也太大。现在将u(FLEN) 函数设计为u(FLEN;) ,则1K相当于右移了 4位,1M右移了 7位,1G向右移动了 9位,无论是数量级内部还是数量级之间比较合适。因此,本实施例中的保留度的计算公式 为:
[0071]
[0072] 因此,根据此方法计算预存文件的保留度,就可以选择保留度最小的预存文件释 放。
[0073] S104、判断所述多个文件的总缓存值是否大于第二缓存阈值;其中,所述第二缓存 阈值为云存储客户端的总缓存阈值;
[0074] 具体的,在本实施例中整个客户端的缓存容量也会设定一个上限,即第二缓存阈 值,当整个客户端缓存容量超过第二缓存阈值时,同样会触发文件替换行为。
[0075] 若是,则执行S105、按照第二预定规则释放第二缓存节点中的第二预存文件。
[0076] 优选的,所述按照第二预定规则释放第二缓存节点中的第二预存文件,包括:
[0077] 根据LRU算法,确定所有缓存节点的双向循环链表中的尾部的预存文件为所述第 二预存文件,并释放所述第二预存文件的数据块;和/或,
[0078] 计算所有缓存节点中预存文件的保留度,确定保留度最小的预存文件为所述第二 预存文件,并释放所述第二文件的数据块。
[0079] 具体的,在本实施例中,若多个缓存文件的缓存总值大于第二预存文件,则按照第 二预定规则释放第二预存文件,例如通过LRU算法释放相应的预存文件,或者根据预存文 件的保留度,释放保留度最小的预存文件。其具体如何根据LRU算法和保留度释放预存文 件在上文中以将描述,这里不再赘述。
[0080] 通过上文可以总结出,客户端对预存的数据的替换规则如下:
[0081] 1、如果文件内部到达缓存上限阀值,则选取文件内部双向循环链表的tail所指 向的块释放掉;
[0082] 2、如果整个客户端缓存容量超过上限阀值,则查找引用计数为0的文件,即释放 保留度最小的文件的所有数据块;
[0083] 3、如果客户端缓存已满,而且所有的文件都有引用,对整个客户端缓存的LRU链 表的tail节点进行释放。
[0084] 需要说明的是,本实施例是通过在文件内的块和文件之间两种维度构建缓存结构 (注意:是通过两种结构进行构建而非两份数据,数据都是数据块,而且只有一份),并且所 有的缓存节点的增加,删除,调整都是常量级。
[0085] 本发明实施例提供的一种云存储客户端多路恒定速率10缓存的构建方法,包括: 将多个文件并行写入相应的目标缓存节点中;判断每个文件的缓存值是否大于第一缓存 阈值;其中,所述第一缓存阈值为动态获得的每个节点的缓存阈值;若是,则确定缓存值大 于所述第一缓存阈值的文件所对应的第一缓存节点,并按照第一预定替换规则释放所述第 一缓存节点中的第一预存文件;判断所述多个文件的总缓存值是否大于第二缓存阈值;其 中,所述第二缓存阈值为云存储客户端的总缓存阈值;若是,则按照第二预定规则释放第二 缓存节点中的第二预存文件,可见,本实施例通过将多个文件并行写入相应的目标缓存节 点中,并通过将缓存节点中的预存文件按照预定规则进行替换,构建了高效的缓存,能对每 个文件的10进行并发控制和缓存。
[0086] 下面对本发明实施例提供的云存储客户端多路恒定速率10缓存的构建装置进行 介绍,下文描述的云存储客户端多路恒定速率10缓存的构建装置和上文描述的云存储客 户端多路恒定速率10缓存的构建方法可以相互参照。
[0087] 参见图4,本发明实施例提供的一种云存储客户端多路恒定速率10缓存的构建装 置,包括:
[0088] 写入模块100,用于将多个文件并行写入相应的目标缓存节点中;
[0089] 第一判断模块200,用于判断每个文件的缓存值是否大于第一缓存阈值;其中,所 述第一缓存阈值为动态获得的每个节点的缓存阈值;
[0090] 若是,则触发第一释放模块300 ;
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1