对块设备进行异步请求的数据访问方法

文档序号:6480288阅读:97来源:国知局
专利名称:对块设备进行异步请求的数据访问方法
技术领域
本发明涉及一种数据访问方法,尤其涉及一种对块设备进行异步请求的数据访问
方法。
背景技术
在Li皿x作业系统中包括有字符设备与块设备两种。这两种设备的访问方式迥然 不同。字符设备是以字符传递,用以对设备进行访问。反之,块设备以块为单位,对块设备 进行数据的访问。字符设备不需要缓冲而且不以固定块尺寸进行操作。而块设备对于访问 请求有对应的缓冲区,所以可以选择以特定的顺序进行操作。字符设备没有设置缓冲空间, 因此,可以直接的被访问。而且,字符设备只能被依序的读入,而块设备可以被随机的访问。 虽然块设备可以被随机的访问,但是对于磁盘这类的机械设备来说,随机访问会使得磁头 必须被四处移动,进而降低磁盘的访问性能。 所以当大量的数据访问请求发生时,块设备容易因为不连续的访问地址使得数据 的访问性能大大的降低。

发明内容
本发明所要解决的技术问题在于提供一种对块设备进行异步请求的数据访问方 法,根据多笔数据访问请求进行相应的访问处理。 为实现上述目的,本发明所揭露的一种对块设备进行异步请求的数据访问方法包 括以下步骤接获来自客户端的当前请求;调用块设备的虚拟设备;将当前请求与存放有 多数笔待处理请求的请求队列进行比较;根据当前请求的访问地址,从请求队列中选择出 相应的待处理请求;将具有相邻的待处理请求与当前请求进行请求合并程序,并产生合并 请求;提交合并请求至请求队列。 本发明提供一种对数据访问请求的异步处理方法,用以对块设备的访问的数据访 问请求进行合并处理。将具有连续访问地址的数据访问请求进行合并,使之成为单一笔的 数据访问请求,借以提高块设备的访问效率。 有关本发明的特征与实作,兹配合图示作最佳实施例详细说明如下。


图1为本发明的结构示意图; 图2为本发明的运作流程序意图; 图3为选择待处理请求的运作流程序意图; 图4为提交合并请求至请求队列的运作流程序意图。 其中,附图标记 110:客户端 120 :服务端
130 :块设备
具体实施例方式
请参考图1所示,其为本发明的结构示意图。本发明中包括有客户端110与服务
端120。服务端120电性连接于多数个块设备130 (block device),服务端120分别电性连
接于客户端110与块设备130之间。在服务端120被引导后,服务端120会创建块设备130
与虚拟设备(virtual device)的连结关系。服务端120在接收来自客户端110的数据访问
请求时,会根据数据访问请求的访问地址向块设备130提取相应的数据。服务端120为依序
的处理数据访问请求,因此会将所接收到的数据访问请求存放至请求队列(queue)中。为
改善服务端120对数据访问效率,本发明提出以下数据访问请求的处理方法。请图2所示,
其为本发明的运作流程序意图。 步骤S210 :接获来自客户端的当前请求; 步骤S220 :调用块设备的虚拟设备; 步骤S230 :将当前请求与存放有多数笔待处理请求的虚拟设备的请求队列进行 比较; 步骤S240 :根据当前请求的访问地址,从该请求队列中选择出相应的待处理请 求; 步骤S250 :将具有相邻的待处理请求与当前请求进行请求合并程序,并产生合并 请求;以及 步骤S260 :提交合并请求至虚拟设备的请求队列。
步骤S270 :将虚拟设备的请求提交给真实块设备。 首先,由客户端110发送当前请求至服务端120,用以向相应的块设备130访问数 据。接着,服务端120获取当前请求后,服务端120会与存放在请求队列中的待处理请求进 行访问地址的比较。在本发明中,选择访问地址的方式根据访问地址的连续性与数据访问 请求的时序性作为依据。请图3所示,其为选择待处理请求的运作流程序意图。
步骤S241 :从请求队列中选择出至少待处理请求; 步骤S242 :判断所选择出的已接收数据访问的访问地址与当前请求的访问地址 是否为连续地址; 步骤S243 :将当前请求与待处理请求进行合并后,判断合并请求的访问容量是否 超过块设备的块尺寸;以及 步骤S244 :若合并请求的访问容量大于块设备的块尺寸时,该请求不再合并。
在此一选择过程中,是以数据访问请求的时序性与访问地址的连续性作为依据。 换句话说,当前请求与待处理请求的写入顺序作为选择的条件之一 ;另外,再以当前请求的 访问地址与待处理请求的访问地址视为另一组选择条件。这是因为客户端iio所发送的数 据访问请求并非是对块设备130的连续地址进行访问。若是每一笔的数据访问请求非连续 的访问地址时,块设备130会因为跳着访问这些访问地址的数据,使得块设备130的访问效 率降低。除此之外,为避免合并后访问的数据量大于块设备130的块大小。因此,更在步骤 S243中判断每一次合并请求的访问量是否超过块设备130的块尺寸(block size)。
请配合图4所示,其为虚拟设备的请求提交给真实块设备的运作流程示意图。在完成上述各项访问的动作后,接着就是将虚拟设备的请求提交给真实设备。
步骤S271 :从虚拟块设备请求队列中获取一个请求; 步骤S272 :将请求提交给真实设备; 步骤S273 :判断提交过程是否成功;
步骤S274 :若请求提交失败时,判断此项请求是否为合并过的请求; 步骤S275 :若此项请求为合并过的情求时,则返回错误;
步骤S276 :若此项请求不是合并过的情求时,将请求拆分成原请求并依次返回错



误;以及

解说。



















result)






步骤S277 :若请求提交成功时,则回复一完成信息。
为更进一步的说明本发明的运作细节,在此以下述程序结构并配合运作流程进行 首先,定义数据访问请求的结构(基于li皿x2.6内核的一种实现) struct v_request
struct list_head node ; dev_tdev ^ loff_t offset ; size_t size ; void *ori_req ;
struct mergeinfo *minfo end_req_t *end_req ;
记录合并信息的结构 struct mergeinfo
队列节点,用于添加到请求队列
请求对应的设备号
请求在设备上的初始化地址
请求尺寸
原请求
合并信息
回调函数
loff_t size_t
struct iovec
offset; 合并后的初始化地址 size; 合并后的尺寸
*i0V;合并后的数据片断
struct v_request氺mreq ;所合并的请求链表 请求回调函数原形定义
typedef void (end_req_t) (struct*v_request, unsigned int size, int
块设备定义 struct v_device
dev_t dev ; 设备号
make_request_fn *new_make_request_fn新请求提交函数 struct gendisk *ori_device ; 目的设备 make_request_fn *ori_make_request_fn原请求提交函数
5
spinlock_t queue_lock ; 队歹廿锁struct list—head req_queue ; 队列头
int queue_len ; 队列长度int queue_max_len ; 最大队列长度unsigned bd_block_size ; 块尺寸 } 接获来自客户端110的当前请求的流程 对应步骤S210 :截获一个发送给块设备130的当前请求,为其配置一个v—request 结构,将当前请求的指标保存在v—request,结构的ori—req成员中,同时将当前请求的设 备标识、初始化位置、尺寸保存在v_reqUeSt结构的相应成员中。 接着,搜索与块设备130相关联的v_deViCe设备(意即虚拟设备)。如果没有找
到,返回访问错误。若找到有相应的v_deViCe设备,则执行步骤S230。 对应步骤S230 :从v_deViCe设备中获得请求队列,并获得请求队列中最后一个待
处理请求,计算待处理请求是否能与当前请求。如果能合并则执行执行步骤S250,反之,则
执行步骤S260。 对应步骤S250 :对待处理请求与当前请求进行合并,合并后会产生合并请求,并 将合并后的初始化地址、尺寸等信息填写到v_reqUSet结构的minfo成员中,并且执行步骤 S260。 对应步骤S260 :将合并请求添加到请求队列。
当前请求提交流程 首先,从请求队列中获取第一个数据访问请求。在请求队列中第一个数据访问请 求指的是存放在请求队列中最久的数据访问请求。再将数据访问请求提交给块设备130,判 断数据访问请求的minfo成员是否为空。如果为空,证明是未合并过的请求,调用v_deViCe 的ori_make_request_fn将请求提交。如果minfo成员非空,则数据访问请求是经过合并 的请求,根据minfo中的信息,调用orijnake—request—fn成员进行提交。
当提交或请求处理失败时,如果数据访问请求不是合并过的数据访问请求,返回 错误。否则将数据访问请求拆分成原请求并依次返回错误,拆分时需使用minfo成员中的 mreq队列中保存的信息。 本发明提供一种对数据访问请求的异步处理方法,用以对块设备130的访问的数 据访问请求进行合并处理。将具有连续访问地址的数据访问请求进行合并,使之成为单一 笔的数据访问请求,借以提高块设备130的访问效率。 当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟 悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变 形都应属于本发明所附的权利要求的保护范围。
权利要求
一种对块设备进行异步请求的数据访问方法,对一服务端中的一块设备进行访问,根据多数笔数据访问请求进行相应的访问处理,其特征在于,该数据访问方法包括接获来自一客户端的一当前请求;调用该块设备的一虚拟设备;将该当前请求与一存放有多数笔待处理请求的请求队列进行比较;根据该当前请求的访问地址,从该请求队列中选择出相应的该些待处理请求;将具有相邻的该些待处理请求与该当前请求进行一请求合并程序,并产生一合并请求;以及提交该合并请求至该请求队列。
2. 根据权利要求1所述的对块设备进行异步请求的数据访问方法,其特征在于,在选 择出具有相邻的访问地址的该些待处理请求中还包括以下步骤从该请求队列中选择出至少一该待处理请求;判断所选择出的该些已接收数据访问的访问地址与该当前请求的访问地址是否为连 续地址;以及将该当前请求与该些待处理请求进行合并后,判断该合并请求的访问容量是否超过该 块设备的块尺寸。
3. 根据权利要求1所述的对块设备进行异步请求的数据访问方法,其特征在于,在提 交该合并请求至该请求队列中还包括以下步骤从该请求队列中获取该待处理请求;以及将所获取出的该待处理请求提交给相应的该虚拟设备。
4. 根据权利要求3所述的对块设备进行异步请求的数据访问方法,其特征在于,在提 交该以接收数据访问请求前还包括以下步骤判断该待处理请求是否为合并过的该当前请求;以及若该待处理请求为已合并过的该当前请求时,将该待处理请求恢复回原始的该当前请求。
全文摘要
本发明公开了一种对块设备进行异步请求的数据访问方法,对服务端中的块设备进行访问,根据多笔数据访问请求进行相应的访问处理。数据访问方法包括有接获来自客户端的当前请求;调用块设备的虚拟设备;将当前请求与存放有多数笔待处理请求的请求队列进行比较;根据当前请求的访问地址,从请求队列中选择出相应的待处理请求;将具有相邻的待处理请求与当前请求进行请求合并程序,产生合并请求;提交合并请求至请求队列。使得多笔访问量小的数据访问请求合并,提高块设备的访问效率。
文档编号G06F13/10GK101788961SQ200910002500
公开日2010年7月28日 申请日期2009年1月23日 优先权日2009年1月23日
发明者毕明浩, 陈玄同 申请人:英业达集团(天津)电子技术有限公司;英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1