数据存储方法和装置的制造方法_2

文档序号:8905066阅读:来源:国知局
029]具体地,模拟设备将封装后的数据通过网络通信协议栈发送给上述存储服务器进行存储可以为:模拟设备将上述封装后的数据发送给存储服务器的代理服务器,由上述代理服务器将封装后的数据通过网络通信协议栈发送给存储服务器进行存储。其中,上述网络通信协议栈可以为传输控制协议(Transmiss1n Control Protocol ;以下简称:TCP)/因特网协议(Internet Protocol ;以下简称:IP)协议栈,当然本发明实施例并不仅限于此,网络通信协议栈还可以为其他的网络通信协议栈,只要可以实现模拟设备与存储服务器之间的网络通信即可。
[0030]在生产环境上,频繁升级Qemu的代价和风险都是比较大的,因此,本发明在模拟设备和远端存储服务器之间实现了一个存储服务器的代理服务器,将业务逻辑分离到代理服务器中来。而代理服务器与Qemu中的模拟设备之间只是进行简单的数据通信,不受具体通信协议细节变更的影响,无论是协议升级,或者是修复缺陷,Qemu均无需变更。
[0031]为了提高10吞吐,本发明将控制平面和数据通道分开实现,使用一个独立的专用的线程负责数据通道,从而避免控制命令占用。本发明图1所示实施例中,上述代理服务器采用可扩展的架构,上述模拟设备中的每个模拟设备对应一个进程,这样,对于同一个宿主机上有多个客户操作系统或者多个模拟设备的情形,可以充分利用宿主系统的多颗CPU,提尚并彳丁性,提尚整体的10吞吐。
[0032]因为代理服务器可能需要根据存储协议的升级进行必要的升级,或者因为缺陷可能发生意外的重启。但是无论哪种情况,如果不加处理,那么反映到客户操作系统中的表现就是10错误。为了提高可靠性,本发明设计实现了容错机制,模拟设备实时感知代理服务器的状态,无论代理服务器是因为升级还是因为意外,在代理服务器重启之后,模拟设备将重传尚未完成的10请求;也就是说,在上述代理服务器重启之后,模拟设备重传在上述代理服务器重启之前未完成传输的数据。
[0033]因为对于后端存储服务器,不同的块可能存储在不同的机器上,因此,为了提高总体的并行性,本发明为客户操作系统和模拟设备设计了一种10调度算法,除了合并同一个块中的相邻请求外,也可以向存储服务器发送位于不同块的请求,这样后端可以调度到不同存储服务器,提高整体的并发,从而提高整体的10吞吐。这个优化因为涉及到客户操作系统的改动,是可选的,如果不改动客户操作系统,不会影响本发明图1所示实施例提供的数据存储方法其他部分的实现。
[0034]上述数据存储方法中,模拟设备接收来自客户操作系统的数据之后,将上述数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装,然后将封装后的数据发送给上述存储服务器进行存储,从而可以实现将数据存储在存储服务器上,缩短了 1路径,提高了系统的1吞吐,减轻了 CPU的负载,优化了系统性能。
[0035]图3为本发明数据存储装置一个实施例的结构示意图,本实施例中的数据存储装置实现为虚拟机监控器中的一个模拟设备,可以实现本发明图1所示实施例的流程。如图3所示,上述数据存储装置可以包括:接收模块31、封装模块32和发送模块33 ;
[0036]其中,接收模块31,用于接收来自客户操作系统的数据;
[0037]封装模块32,用于将接收模块31接收的数据在宿主系统的用户空间中按照存储服务器使用的协议进行封装;
[0038]发送模块33,用于将封装模块32封装后的数据发送给上述存储服务器进行存储。
[0039]本实施例中,上述模拟设备是在宿主系统上基于虚拟机监控器,例如=Qemu实现的,上述模拟设备为PCI接口的块设备;上述客户操作系统使用块设备驱动来驱动上述模拟设备,上述客户操作系统运行于上述虚拟机监控器之上。
[0040]参见图2,本发明基于虚拟机监控器Qemu,设计并实现了一个模拟设备。为了避免客户操作系统的改动,减少对客户操作系统的影响,该模拟设备被模拟为一个块设备,客户操作系统中无需实现任何对该模拟设备的驱动,直接使用块设备驱动即可;为了更高效的在客户操作系统和宿主系统之间进行通信,模拟设备采用Virt1标准实现数据通信;为了避免存储服务器升级等带来的影响,模拟设备与存储服务器进行了解耦,本发明在宿主系统上设计实现了一个存储服务器的代理服务器。
[0041]为了使客户操作系统不经修改就可以使用本实施例提供的装置,这一点尤其是对于那些用户自定义的客户操作系统非常有意义,本发明将模拟设备注册为PCI接口的Virt1块设备,客户操作系统发现是PCI总线上的Virt1块设备后,将使用virt1-blk驱动来驱动该模拟设备。
[0042]本实施例中,上述模拟设备与客户操作系统之间通过Virt1的方式共享内存,模拟设备与客户操作系统之间通过传递上述数据所在内存的物理地址实现上述数据的访问,从而实现了数据的零复制。
[0043]上述数据存储装置中,发送模块33,具体用于将封装模块32封装后的数据通过网络通信协议栈发送给上述存储服务器进行存储。本实施例中,接收模块31接收到数据之后,不再经过宿主系统的内核1栈,而是由封装模块32在宿主系统的用户空间中按照存储服务器的协议进行封装后,发送模块33通过网络通信协议栈直接发送给远端的存储服务器。另外,本实施例对Qemu中的1路径进行了优化,缩短了 1路径。
[0044]更具体地,发送模块33,用于将封装模块32封装后的数据发送给上述存储服务器的代理服务器,由代理服务器将上述封装后的数据通过网络通信协议栈发送给存储服务器进行存储。其中,上述网络通信协议栈可以为TCP/IP协议栈,当然本发明实施例并不仅限于此,网络通信协议栈还可以为其他的网络通信协议栈,只要可以实现模拟设备与存储服务器之间的网络通信即可。
[0045]在生产环境上,频繁升级Qemu的代价和风险都是比较大的,因此,本发明在模拟设备和远端存储服务器之间实现了一个存储服务器的代理服务器,将业务逻辑分离到代理服务器中来。而代理服务器与Qemu中的模拟设备之间只是进行简单的数据通信,不受具体通信协议细节变更的影响,无论是协议升级,或者是修复缺陷,Qemu均无需变更。
[0046]为了提高1吞吐,本发明将控制平面和数据通道分开实现,使用一个独立的专用的线程负责数据通道,从而避免控制命令占用。本实施例中,上述代理服务器采用可扩展的架构,上述模拟设备中的每个模拟设备对应一个进程,这样,对于同一个宿主系统上有多个客户操作系统或者多个模拟设备的情形,可以充分利用宿主系统的多颗CPU,提高并行性,提高整体的1吞吐。
[0047]上述数据存储装置中,发送模块33,还用于在代理服务器重启之后,重传在代理服务器重启之前未完成传输的数据。因为代理服务器可能需要根据存储协议的升级进行必要的升级,或者因为缺陷可能发生意外的重启。但是无论哪种情况,如果不加处理,那么反映到客户操作系统中的表现就是1错误。为了提高可靠性,上述数据存储装置设计实现了容错机制,实时感知代理服务器的状态,无论代理服务器是因为升级还是因为意外,在代理服务器重启之后,发送模块33将重传尚未完成的1操作。
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1