CN105830038B - 一种访问存储设备的方法和主机 - Google Patents
一种访问存储设备的方法和主机 Download PDFInfo
- Publication number
- CN105830038B CN105830038B CN201480002085.5A CN201480002085A CN105830038B CN 105830038 B CN105830038 B CN 105830038B CN 201480002085 A CN201480002085 A CN 201480002085A CN 105830038 B CN105830038 B CN 105830038B
- Authority
- CN
- China
- Prior art keywords
- access
- software definition
- definition module
- storage
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明实施例提供了一种访问存储设备的方法和主机,主机中运行于用户空间的软件定义模块能够截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址,避免了所述I/O操作指令陷入到内核态,从而所述软件定义模块能够根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备,接收所述操作系统内核返回的访问结果,将所述访问结果发送给所述应用程序,实现了应用程序对存储设备的访问。上述过程中,只存在一次内核陷入和一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,提升了访问速度。
Description
技术领域
本发明实施例涉及计算机技术,特别涉及一种访问存储设备的方法和主机。
背景技术
软件定义存储(Software-defined Storage,SDS)能够将所有存储相关的控制工作都放置在相对于物理存储硬件的外部软件中,该软件不作为存储设备中的固件,而通常在一个服务器上,或者作为操作系统(OS)或超级管理程序(即Hypervisor)的一部分,用户不必从特定厂商采购存储控制器硬件如硬盘、闪存等存储介质。
在基于SDS的存储系统中,通常通过软件定义层(即执行所有存储相关的控制工作的软件),实现存储的虚拟化,对上层应用提供虚拟资源池,以使应用程序能够便利、高效的访问存储设备。通常情况下,为了兼容现有的应用,基于SDS的存储系统大部分都在操作系统中提供块/文件驱动。在应用访问存储设备过程中,应用将下发输入/输出(又称I/O,或IO)操作指令到操作系统,由操作系统的块/文件驱动对该I/O操作指令进行转换处理后发送给软件定义层,由软件定义层对存储设备进行访问,并将访问结果返回给应用,完成对存储设备的访问。
然而,在上述访问存储设备的过程中,存在两次内核态和用户态的切换,即存在两次内核陷入和两次内核陷出。然而,内核陷入和内核陷出不仅会降低I/O访问速度,影响访问效率,还会降低系统的可靠性。
发明内容
本发明实施例提供了一种访问存储设备的方法和主机,能够减少应用程序访问存储设备时系统的内核陷入和内核陷出次数。
一方面,本发明实施例提供了一种访问存储设备的方法,用于基于软件定义存储SDS的存储系统,所述基于SDS的存储系统包括主机和所述存储设备,所述方法包括:
所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的输入/输出I/O操作指令,所述I/O操作指令携带访问地址;
所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务;
所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备;
所述软件定义模块接收所述操作系统内核返回的访问结果;
所述软件定义模块将所述访问结果发送给所述应用程序。
结合第一方面,在第一种可能的实现方式中,所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务包括:所述软件定义模块根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的输入/输出I/O操作指令包括:当应用程序使用动态链接库的方式链接操作系统时,所述软件定义模块采用动态链接库预加载的方式,截获所述应用程序发送的所述I/O操作指令。
结合第一方面或第一方面的第一种可能的实现方式,在第三种可能的实现方式中,所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的输入/输出I/O操作指令包括:当应用程序使用静态链接库的方式链接操作系统时,所述软件定义模块采用应用程序链接过程控制的方式,截获所述应用程序发送的所述I/O操作指令。
结合第一方面或第一方面的第一至第三任一可能的实现方式,在第四种可能的实现方式中,所述存储设备包括缓存装置和存储装置;则所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备包括:所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据;则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:所述软件定义模块接收所述操作系统内核返回的所述读访问数据;所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述读访问数据执行高级功能操作;所述软件定义模块将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序。
结合第一方面的第四种可能的实现方式,在第六种可能的实现方式中,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据;所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的高级功能服务对所述写数据执行高级功能操作;所述软件定义模块指示所述操作系统内核将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中;则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:所述软件定义模块接收所述操作系统内核返回的写数据结果;所述软件定义模块将所述写数据结果发送给所述应用程序。
结合第一方面的第四种可能的实现方式,在第七种可能的实现方式中,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述主机的操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据;则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:所述软件定义模块接收所述操作系统内核返回的所述读访问数据;所述软件定义模块将所述读访问数据发送给所述应用程序。
结合第一方面的第四种可能的实现方式,在第八种可能的实现方式中,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据;所述软件定义模块指示所述操作系统内核将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中;则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:所述软件定义模块接收所述操作系统内核返回的写数据结果;所述软件定义模块将所述写数据结果发送给所述应用程序。
第二方面,一种访问存储设备的主机,用于基于软件定义存储SDS的存储系统,所述主机包括应用程序、操作系统内核和软件定义模块;其中,所述软件定义模块运行于所述主机的用户空间;
所述软件定义模块用于截获所述应用程序发送的输入/输出I/O操作指令,所述I/O操作指令携带访问地址,根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述操作系统内核根据所述访问地址访问所述基于SDS的存储系统中的存储设备;
所述操作系统内核用于根据所述软件定义模块的指示和所述访问地址访问所述存储设备,并将访问结果返回给所述软件定义模块;
所述软件定义模块用于接收所述操作系统内核返回的所述访问结果,将所述访问结果发送给所述应用程序。
结合第二方面,在第一种可能的实现方式中,所述软件定义模块具体用于根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。
结合第二方方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述软件定义模块具体用于当应用程序使用动态链接库的方式链接操作系统时,采用动态链接库预加载的方式,截获所述应用程序发送的所述I/O操作指令。
结合第二方方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述软件定义模块具体用于当应用程序使用静态链接库的方式链接操作系统时,采用应用程序链接过程控制的方式,截获所述应用程序发送的所述I/O操作指令。
结合第二方方面或第二方面的第一种至第三种任一可能的实现方式,在第四种可能的实现方式中,所述存储设备包括缓存装置和存储装置;则所述软件定义模块具体用于根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置;所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
结合第二方面的第四种可能的实现方式,在第五种可能的实现方式中,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据;所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块;所述软件定义模块具体用于接收所述操作系统内核返回的所述读访问数据,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述读访问数据执行高级功能操作,将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序。
结合第二方面的第四种可能的实现方式,在第六种可能的实现方式中,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述I/O操作指令携带的写数据执行高级功能操作,指示所述操作系统内核将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中;所述操作系统内核具体用于根据所述软件定义模块的指示,将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块;所述软件定义模块具体用于接收所述操作系统内核返回的所述写数据结果,将所述写数据结果发送给所述应用程序。
结合第二方面的第四种可能的实现方式,在第七种可能的实现方式中,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述主机的操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据;所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块;所述软件定义模块具体用于接收所述操作系统内核返回的所述读访问数据,将所述读访问数据发送给所述应用程序。
结合第二方面的第四种可能的实现方式,在第八种可能的实现方式中,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,指示所述操作系统内核将所述访问地址和所述I/O操作指令携带的写数据写入到所述缓存装置中;所述操作系统内核具体用于根据所述软件定义模块的指示,将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块;则所述软件定义模块具体用于接收所述操作系统内核返回的写数据结果,将所述写数据结果发送给所述应用程序。
第三方面,本发明实施例提供了一种访问存储设备的主机,所述主机包括处理器、存储器、总线和通信接口;
所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述主机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述主机执行第一方面所述的访问存储设备的方法或者第一方面任一可能的实现方式所述的访问存储设备的方法。
第四方面,本发明实施例提供了一种计算机可读介质,其特征在于,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行第一方面所述的访问存储设备的方法或者第一方面任一可能的实现方式所述的访问存储设备的方法。
在本发明实施例中,所述主机中运行于用户空间的软件定义模块能够截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址,避免了所述I/O操作指令陷入到内核态,从而所述软件定义模块能够根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备,接收所述操作系统内核返回的访问结果,将所述访问结果发送给所述应用程序,实现了应用程序对存储设备的访问。由于软件定义模块运行于用户空间,上述过程中,只有软件定义模块指示所述主机的操作系统内核访问所述存储设备时存在一次内核陷入,软件定义模块接收所述操作系统内核返回的访问结果时存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对现有技术或实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是一种基于SDS的存储系统的示意图;
图2是现有技术中应用程序访问存储设备的示意图;
图3是本发明实施例提供了一种访问存储设备的方法流程图;
图4是本发明实施例提供的一种基于SDS的存储系统的示意图;
图5是本发明实施例提供了又一种访问存储设备的方法流程图;
图6是本发明实施例提供了又一种访问存储设备的方法流程图;
图7是本发明实施例提供了又一种访问存储设备的方法流程图;
图8是本发明实施例提供了又一种访问存储设备的方法流程图;
图9是本发明实施例提供了一种访问存储设备的主机的示意图;
图10是本发明实施例提供了又一种访问存储设备的主机的结构示意图。
具体实施方式
本发明实施例提供了一种访问存储设备的方法,能够减少应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。
如图1所示,基于SDS的存储系统通常可包括主机和存储设备,主机中配置有软件定义模块(即软件定义层),所述软件定义模块中集成了存储硬件中的典型的存储控制器功能,能够提供卷管理等存储的管理,并能够与存储设备配合,对上层应用提供存储服务。基于SDS的存储系统中,软件定义模块和存储设备提供的存储服务一般不仅仅包括数据读/写服务,还包括高级功能服务(该高级功能服务是指除数据读/写服务以外的功能服务),如数据快照、智能分层、去重或数据压缩等。在实际应用中,所述存储设备可以设置在所述主机的远端,也可以设置在所述主机的本地,所述存储设备具体可以是存储区域网络(SAN)、网络附加存储(NAS)、磁盘簇、或磁盘阵列等,本发明实施例在此不作限定。
现有技术中,主机中的应用程序访问存储设备时,工作流程一般为:1)应用程序下发输入/输出(又称I/O,或IO)操作指令到操作系统内核;2)操作系统内核将该I/O操作指令提供给操作系统的块/文件驱动,操作系统的块/文件驱动将该I/O操作指令进行转换后发送给软件定义模块;3)软件定义模块根据转换后的I/O操作指令,对存储设备进行相应地读/写访问;4)软件定义模块接收存储设备返回的访问结果,并发送给应用程序,完成对存储设备的访问。
通常情况下,应用程序和软件定义模块均在用户态实现,即运行于用户空间,而操作系统内核和操作系统的块/文件驱动均在内核态实现,即运行于内核空间,因此,步骤1)中需要从用户态切换到内核态,存在一次内核陷入;步骤2)中需要由内核态切换到用户态,存在一次内核陷出;而步骤3)中访问存储设备时,需要从用户态切换到内核态,存在一次内核陷入;步骤4)中接收访问结果时,需要由内核态切换到用户态,存在一次内核陷出,详见图2。显然,内核陷入和内核陷出次数越多,I/O路径就越长,因而多次的内核陷入和内核陷出不仅会降低I/O访问速度,影响访问效率,还会降低系统的可靠性。
本发明实施例提出了一种访问存储设备的方法,能够对应用程序模块进行功能增强,从而在应用程序访问存储设备时,避免不必要的内核陷入和内核陷出,即现有技术步骤1)和2)中出现的内核陷入和内核陷出,只保留必要的内核陷入和内核陷出,即访问存储设备时出现的内核陷入和内核陷出,从而提升访问速度,提高系统可靠性。
具体实施方式详见以下实施例。
实施例一
发明实施例提出了一种访问存储设备的方法,用于基于SDS的存储系统,所述基于SDS的存储系统包括主机和所述存储设备,如图3所示,所述方法包括:
S301:所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的输入/输出I/O操作指令,所述I/O操作指令携带访问地址。
运行于用户空间的所述应用程序在访问存储设备时,将向所述主机中的操作系统发送I/O操作指令。所述软件定义模块可以在所述I/O操作指令到达所述操作系统内核之前,截获所述I/O操作指令,由于所述软件定义模块运行于用户空间,避免所述I/O操作指令陷入到内核态中。
S302:所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务。
由于应用程序访问所述存储设备,相当于应用程序需要软件定义模块和存储设备提供数据读/写服务,甚至还需要软件定义模块和存储设备提供数据压缩等高级功能服务。因此,所述软件定义模块需要确定所述I/O操作指令对应的存储服务,以便后续提供所述I/O操作指令对应的存储服务,实现应用程序对存储设备的访问。其中,所述存储服务不仅仅包括数据读/写服务,还包括高级功能服务(该高级功能服务是指除数据读/写服务以外的服务),如数据快照、智能分层、去重或数据压缩等。
由于,在搭建所述基于SDS的存储系统时,可以定义对存储设备的哪些地址进行访问时,对应需要哪些存储服务,例如可以定义访问存储设备的哪些卷时,对应需要哪些存储服务,或者可以定义访问哪段逻辑地址时,对应需要哪些存储服务,因而所述软件定义模块可以根据所述访问地址,确定所述I/O操作指令对应的存储服务。由于所述软件定义模块运行于用户空间,则上述确定所述I/O操作指令对应的存储服务的过程在用户空间实现,避免了内核的陷入/陷出。
具体地,所述软件定义模块可以根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务;所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系;例如,在建立基于SDS的存储系统时,可以通过操作维护系统将地址服务映射表配置在所述软件定义模块中,从而所述软件定义模块可以根据所述访问地址,查询预先配置的地址服务映射表,确定所述I/O操作指令对应的存储服务。
值得注意的是,所述存储设备的地址可以是所述存储设备中所有存储单元的地址,也可以是所述存储设备中部分存储单元的地址;所述存储设备的地址即可以以逻辑地址的形式呈现,也可以以其它形式呈现,本发明实施例在此不作限定。
S303:所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备。
在对所述存储设备进行访问时,可以利用操作系统的内核,则所述软件定义模块可以根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备。由于操作系统内核运行于内核空间,并且访问所述存储设备时需要在内核空间进行,因此存储系统将从用户态切换到内核态,出现一次内核的陷入。
具体地,所述I/O操作指令可以为读操作指令,还可以为写操作指令,如果所述I/O操作指令对应的存储服务不包括高级功能服务,则所述软件定义模块只需根据所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址对所述存储设备进行读/写访问;如果所述I/O操作指令对应的存储服务包括高级功能服务,则所述软件定义模块可以根据所述I/O操作指令对应的存储服务,对需要写入所述存储设备的数据执行相应地高级功能操作后,再指示操作系统内核根据所述访问地址将所述操作后的数据写入所述存储设备,或者所述软件定义模块可以指示所述操作系统内核根据所述访问地址从所述存储设备中读取数据,还后续再对从所述存储设备中读取到的数据执行相应地高级功能操作。例如,如果所述I/O操作指令对应的存储服务中包括的高级功能服务为数据压缩,则所述软件定义模块可以对需要写入所述存储设备的数据执行数据压缩操作后,再将压缩后的数据写入所述存储设备。
S304:所述软件定义模块接收所述操作系统内核返回的访问结果。
所述软件定义模块可以接收所述操作系统内核返回的访问结果,由于所述软件定义模块运行于用户空间,所述操作系统内核运行于内核空间,此时存储系统将从内核态切换到用户态,出现一次内核的陷出。
S305:所述软件定义模块将所述访问结果发送给所述应用程序。
所述软件定义模块将所述访问结果发送给所述应用程序是指:如果所述I/O操作指令对应的存储服务不包括高级功能操作时,所述软件定义模块直接将所述操作系统内核返回的所述访问结果发送给所述应用程序,以完成对所述存储设备的访问;如果所述I/O操作指令对应的存储服务包括高级功能服务时,所述软件定义模块可能需要对所述访问结果(例如从所述存储设备中读取到的数据)进行相应地高级功能操作之后再发送给所述应用程序,以完成对所述存储设备的访问。例如,如果所述I/O操作指令对应的存储服务中包括的高级功能服务为数据压缩,则所述软件定义模块可以对从所述存储设备中读取到的数据执行数据压缩操作后,发送给所述应用程序。
所述软件定义模块和所述应用程序都运行于用户空间,避免了内核的陷入/陷出。
在本发明实施例中,所述主机中运行于用户空间的软件定义模块能够截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址,避免了所述I/O操作指令陷入到内核态,从而所述软件定义模块能够根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备,接收所述操作系统内核返回的访问结果,将所述访问结果发送给所述应用程序,实现了应用程序对存储设备的访问。由于软件定义模块运行于用户空间,上述过程中,只有软件定义模块指示所述主机的操作系统内核访问所述存储设备时存在一次内核陷入,软件定义模块接收所述操作系统内核返回的访问结果时存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。
实施例一所述的主机和存储设备分别可以是图1所示基于SDS的存储系统中的11和12。
为了进一步提升访问速度,还可以在图1所示的存储设备12中增加缓存装置411,从而得到存储设备40,存储设备40中包括缓存装置411和存储装置12(即图1中的存储设备12)。当所述存储装置设置在所述主机的远端时,所述缓存装置可以设置在所述主机的本地,此时所述缓存装置可以为高速缓存设备(例如非易失性内存芯片NVDIMM、非易失性随机访问存储器NVRAM),还可以为磁盘设备等;当所述存储装置设置在所述主机的本地时,所述缓存装置可以设置在所述主机的本地,此时所述缓存装置可以为高速缓存设备。
所述软件定义模块可以指示操作系统内核访问所述缓存装置,以通过所述缓存装置访问所述存储装置,从而提高访问速度。例如,如果需要写数据到所述存储设备中,所述软件定义模块可以指示操作系统内核将写数据写入到所述缓存装置,后续由所述缓存装置将写数据写入到存储设备,提升了访问速度;如果需要从所述存储设备中读数据,所述软件定义模块可以指示操作系统内核从所述缓存装置中读取数据,如果所述缓存装置中已经保存了需要读取的数据,则所述缓存装置可以直接提供所述需要读取的数据,提升了访问速度,如果所述缓存装置中没有保存该需要读取的数据,所述缓存装置可以从所述存储设备中获取所述需要读取的数据给操作系统内核。因此,实施例一的步骤S303可以替换为:
S303’:所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
实施例二
本发明实施例提出了一种访问存储设备的方法,用于基于SDS的存储系统,所述基于SDS的存储系统包括主机和存储设备,当所述主机中的应用程序下发的I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块可以通过本发明实施例所述的方法,访问所述存储设备,如图5所示,所述方法包括:
S501:所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址。
所述软件定义模块可以在所述I/O操作指令到达所述操作系统内核之前,截获所述I/O操作指令,由于所述软件定义模块运行于用户空间,避免了所述I/O操作指令陷入到内核态中。
所述软件定义模块截获所述I/O操作指令的方式可以有多种,具体地可以采用如下方式。
方式一:当应用程序使用动态链接库的方式链接操作系统的操作系统库时,可以采用动态链接库预加载的方式,截获应用程序的I/O操作指令,其原理如下:一般的应用程序运行环境中,都提供接口用于指定程序运行时优先加载的动态连接库。默认情况下,应用程序的I/O操作优先加载操作系统的动态链接库。因而,可以利用提供的接口,将软件定义模块发布的动态链接库设置为优先加载,从而当应用程序进行I/O操作时,将加载软件定义模块所提供的接口,从而实现了应用程序发送的IO操作指令的截获。例如,在Linux系统中,可以通过环境变量LD_PRELOAD指定程序运行时优先加载的动态连接库,从而可以通过利用LD_PRELOAD,将软件定义模块发布的动态链接库的加载顺序高于操作系统的动态链接库。
方式二:当应用程序使用静态链接库的方式链接操作系统的操作系统库时,可以采用应用程序链接过程控制的方式,设置优先解析的符号,截获应用程序的I/O操作指令,其原理如下:默认情况下,应用程序进行I/O操作时将优先解析操作系统的符号(symbol)。由于在应用程序编译和链接过程中,常规编译器都会提供符号优先解析控制参数,因此可以对符号优先解析控制参数进行设置,从而当应用程序的I/O操作需要查找某个符号时,将优先先解析软件定义模块的symbol,而不是优先解析操作系统的symbol,实现了应用程序的I/O操作指令的截获。
方式三:
默认情形,应用程序进行I/O操作时,将调用操作系统的标准库。可以用软件定义模块发布的私有标准库替换操作系统的标准库,该私有标准库与操作系统的标准库是二进制级别(ABI)兼容的。当应用程序进行I/O操作时,将调用软件定义模块发布的私有标准库,实现了应用程序的I/O操作指令的截获。
此外,还可以采用其他的方式,实现软件定义模块截获所述I/O操作指令,本发明实施例在此不作限制。
S502:所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务。
具体地,所述软件定义模块根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。在建立基于SDS的存储系统时,可以通过操作维护系统将地址服务映射表配置在所述软件定义模块中,从而所述软件定义模块可以根据所述访问地址,查询预先配置的地址服务映射表,确定所述I/O操作指令对应的存储服务。
值得注意的是,所述存储设备的地址可以是所述存储设备中所有存储单元的地址,也可以是所述存储设备中部分存储单元的地址;所述存储设备的地址即可以以逻辑地址的形式呈现,也可以以其它形式呈现,本发明实施例在此不作限定。
S503:当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述操作系统内核根据所述访问地址从所述存储设备中读取读访问数据。
可选地,如果所述存储设备中包括缓存装置和存储装置,则S503还可以替换为S503’:所述软件定义模块指示所述操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据。
如果所述缓存装置中保存了所述读访问数据,则所述缓存装置将自身缓存的读访问数据返回给所述操作系统内核,提升了访问速度;如果所述缓存装置中没有保存所述访问地址对应的所述读访问数据,则所述缓存装置将根据所述访问地址从所述存储装置中读取所述读访问数据,返回给所述操作系统内核。
S504:所述软件定义模块接收所述操作系统内核返回的所述读访问数据。
S505:所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述读访问数据执行高级功能操作。
S506:所述软件定义模块将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序。
在本发明实施例中,主机中的软件定义模块能够当所述主机中的应用程序下发的I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,实现应用程序对存储设备的访问。并且只有在所述软件定义模块指示所述主机的操作系统内核根据所述访问地址从所述存储设备中读取访问数据时,存在一次内核陷入,软件定义模块接收所述操作系统内核返回的读访问数据时,存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。进一步,所述存储设备中还可以包括缓存装置和存储装置,从而所述软件定义模块可以指示所述主机的操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据,进一步提升了访问速度。
实施例三
本发明实施例提出了一种访问存储设备的方法,用于基于SDS的存储系统,所述基于SDS的存储系统包括主机和存储设备,当所述主机中的应用程序下发的I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,所述软件定义模块可以通过本发明实施例所述的方法,访问所述存储设备,所述方法包括:
S601:所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址。
S602:所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务。
步骤S601和S602的具体实现方式详见S301和S302或者S501和S502,本发明实施例在此不再赘述。
S603:当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据,所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述写数据执行高级功能操作。
例如,如果所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的高级功能服务为数据加密,则所述软件定义模块对所述写数据执行数据加密操作。
S604:所述软件定义模块指示所述操作系统内核根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储设备中。
可选地,如果所述存储设备中包括缓存装置和存储装置,则S604还可以替换为S604’:所述软件定义模块指示所述操作系统内核将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中。所述软件定义模块指示所述操作系统内核将所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,提升了访问速度。
S605:所述软件定义模块接收所述操作系统内核返回的写数据结果。
S606:所述软件定义模块将所述写数据结果发送给所述应用程序。
在本发明实施例中,主机中的软件定义模块能够当所述主机中的应用程序下发的I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,实现应用程序对存储设备的访问。并且只有在所述软件定义模块指示所述主机的操作系统内核将所述执行高级功能操作之后的写数据写入到所述存储设备中时,存在一次内核陷入,软件定义模块接收所述操作系统内核返回的写数据结果时,存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。进一步,所述存储设备中还可以包括缓存装置和存储装置,从而所述软件定义模块可以指示所述操作系统内核将所述执行高级功能操作之后的写数据写入到缓存装置中,以使所述缓存装置将所述执行高级功能操作之后的写数据写入到所述存储装置中,进一步提升了访问速度。
实施例四
本发明实施例提出了一种访问存储设备的方法,用于基于SDS的存储系统,所述基于SDS的存储系统包括主机和存储设备,当所述主机中的应用程序下发的I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块可以通过本发明实施例所述的方法,访问所述存储设备,所述方法包括:
S701:所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址。
S702:所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务。
步骤S701和S702的具体实现方式详见S301和S302或者S501和S502,本发明实施例在此不再赘述。
S703:当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述主机的操作系统内核根据所述访问地址从所述存储设备中读取读访问数据。
如果所述存储设备中包括缓存装置和存储装置,则S703还可以替换为S703’:所述软件定义模块指示所述操作系统内核根据所述访问地址,从所述缓存装置中读取读访问数据。
如果所述缓存装置中保存了所述读访问数据,则所述缓存装置将自身缓存的读访问数据返回给所述操作系统内核,提升了访问速度;如果所述缓存装置中没有保存所述访问地址对应的所述读访问数据,则所述缓存装置将根据所述访问地址从所述存储装置中读取所述读访问数据,返回给所述操作系统内核。
S704:所述软件定义模块接收所述操作系统内核返回的所述读访问数据。
S705:所述软件定义模块将所述读访问数据发送给所述应用程序。
在本发明实施例中,主机中的软件定义模块能够当所述主机中的应用程序下发的I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,实现应用程序对存储设备的访问。并且只有在所述软件定义模块指示所述主机的操作系统内核根据所述访问地址从所述存储设备中读取读访问数据时,存在一次内核陷入,软件定义模块接收所述操作系统内核返回的读访问数据时,存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。进一步,所述存储设备中还可以包括缓存装置和存储装置,从而所述软件定义模块可以指示所述主机的操作系统内核根据所述访问地址从所述缓存装置读取所述读访问数据,进一步提升了访问速度。
实施例五
本发明实施例提出了一种访问存储设备的方法,用于基于SDS的存储系统,所述基于SDS的存储系统包括主机和存储设备,当所述主机中的应用程序下发的I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,所述软件定义模块可以通过本发明实施例所述的方法,访问所述存储设备,所述方法包括:
S801:所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址。
S802:所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务。
步骤S801和S802的具体实现方式详见S301和S302或者S501和S502,本发明实施例在此不再赘述。
S803:当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据,所述软件定义模块指示所述操作系统内核根据所述访问地址将所述写数据写入到所述存储设备中。
可选地,如果所述存储设备中包括缓存装置和存储装置,则S804还可以替换为S804’:所述软件定义模块指示所述操作系统内核将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中。所述软件定义模块指示所述操作系统内核将所述写数据写入到所述缓存装置中,提升了访问速度。
S804:所述软件定义模块接收所述操作系统内核返回的写数据结果。
S805:所述软件定义模块将所述写数据结果发送给所述应用程序。
在本发明实施例中,主机中的软件定义模块能够当所述主机中的应用程序下发的I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,实现所述应用程序对所述存储设备的访问。并且只有在所述软件定义模块指示所述主机的操作系统内核根据所述访问地址将所述写数据写入到所述存储设备中,存在一次内核陷入,软件定义模块接收所述操作系统内核返回的写数据结果时,存在一次内核陷出,减少了应用程序访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。进一步,所述存储设备中还可以包括缓存装置和存储装置,从而所述软件定义模块可以指示所述主机的操作系统内核将所述访问地址和所述写数据写入所述缓存装置,以使所述缓存装置根据所述访问地址将所述写数据写入所述存储装置,进一步提升了访问速度。
实施例六
本发明实施例提供了一种访问存储设备的主机,用于基于软件定义存储SDS的存储系统,如图9所示,所述主机90包括软件定义模块901、应用程序902和操作系统内核903,所述软件定义模块901运行于所述主机90的用户空间;
所述软件定义模块901用于截获所述应用程序902发送的输入/输出I/O操作指令,所述I/O操作指令携带访问地址,根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述操作系统内核903根据所述访问地址访问所述基于SDS的存储系统中的存储设备。其中,所述I/O操作指令对应的存储服务可能包括数据读/写服务,还可能包括高级功能服务(该高级功能服务是指除数据读/写服务以外的服务),如数据快照、智能分层、去重或数据压缩等。所述软件定义模块901可以在所述I/O操作指令到达所述操作系统内核903之前,截获所述I/O操作指令,由于所述软件定义模块901运行于用户空间,避免所述I/O操作指令陷入到内核态中。
所述操作系统内核903用于根据所述软件定义模块901的指示和所述访问地址访问所述存储设备,并将访问结果返回给所述软件定义模块901;
所述软件定义模块901用于接收所述操作系统内核903返回的所述访问结果,将所述访问结果发送给所述应用程序902。
上述应用程序902访问存储设备的过程中只存在一次内核陷入和一次内核陷出,减少了应用程序902访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。
具体地,所述软件定义模块901截获所述I/O操作指令的方式可以有多种;例如,所述软件定义模块901可以当应用程序902使用静态链接库的方式链接操作系统时,采用应用程序902链接过程控制的方式,截获所述应用程序902发送的所述I/O操作指令;其原理如下:一般的应用程序902运行环境中,都提供接口用于指定程序运行时优先加载的动态连接库。默认情况下,应用程序902的I/O操作优先加载操作系统的动态链接库。因而,可以利用提供的接口,将所述软件定义模块901发布的动态链接库设置为优先加载,从而当应用程序902进行I/O操作时,将加载所述软件定义模块901所提供的动态链接库,从而实现了应用程序902发送的IO操作指令的截获;又例如,所述软件定义模块901可以当应用程序902使用动态链接库的方式链接操作系统时,采用动态链接库预加载的方式,截获所述应用程序902发送的所述I/O操作指令;其原理如下:默认情况下,应用程序902进行I/O操作时将优先解析操作系统的符号(symbol)。由于在应用程序902编译和链接过程中,常规编译器都会提供符号优先解析控制参数,因此可以对符号优先解析控制参数进行设置,从而当应用程序902的I/O操作需要查找某个符号时,将优先先解析所述软件定义模块901的symbol,而不是优先解析操作系统的symbol,实现了应用程序902的I/O操作指令的截获;又例如,默认情形,应用程序902进行I/O操作时,将调用操作系统的标准库。可以用所述软件定义模块901发布的私有标准库替换操作系统的标准库,该私有标准库与操作系统的标准库是二进制级别(ABI)兼容的。当应用程序902进行I/O操作时,将调用所述软件定义模块901发布的私有标准库,实现了应用程序902的I/O操作指令的截获。
所述软件定义模块901具体可以根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。所述存储设备的地址可以是所述存储设备中所有存储单元的地址,也可以是所述存储设备中部分存储单元的地址;所述存储设备的地址即可以以逻辑地址的形式呈现,也可以以其它形式呈现,本发明实施例在此不作限定。
所述软件定义模块901可以当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述操作系统内核903根据所述访问地址从所述存储设备中读取读访问数据;则所述所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址,从所述存储设备中读取读访问数据,并将所述读访问数据返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的所述读访问数据,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述读访问数据执行高级功能操作,将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序902;
所述软件定义模块901可以当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述I/O操作指令携带的写数据执行高级功能操作,指示所述操作系统内核903根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储设备中;则所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址将所述写数据写入到所述存储设备中,接收所述存储设备返回的写数据结果,将所述写数据结果返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的写数据结果,将所述写数据结果发送给所述应用程序902;
所述软件定义模块901可以当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述主机的操作系统内核903根据所述访问地址从所述存储设备中读取读访问数据;则所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址,从所述存储设备中读取读访问数据,并将所述读访问数据返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的所述读访问数据,将所述读访问数据发送给所述应用程序902;
所述软件定义模块901可以当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,指示所述操作系统内核903根据所述访问地址将所述写数据写入到所述存储设备中;则所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址将所述写数据写入到所述存储设备中,接收所述存储设备返回的写数据结果,将所述写数据结果返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的写数据结果,将所述写数据结果发送给所述应用程序902,以完成所述对所述存储设备的访问。
可选地,为了进一步提高访问速度,所述存储设备可以包括缓存装置和存储装置;则所述软件定义模块901可以用于根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核903根据所述访问地址访问所述缓存装置;所述操作系统内核903可以用于根据所述软件定义模块901的指示和所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
例如,所述软件定义模块901可以当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述操作系统内核903根据所述访问地址从所述缓存装置中读取读访问数据;则所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的所述读访问数据,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述读访问数据执行高级功能操作,将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序902。
例如,所述软件定义模块901可以当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,根据所述I/O操作指令对应的存储服务中包括的高级功能服务,对所述I/O操作指令携带的写数据执行高级功能操作,指示所述操作系统内核903将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中;则所述操作系统内核903可以根据所述软件定义模块901的指示,将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的所述写数据结果,将所述写数据结果发送给所述应用程序902。
例如,所述软件定义模块901可以当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述主机的操作系统内核903根据所述访问地址从所述缓存装置中读取读访问数据;则所述操作系统内核903可以根据所述软件定义模块901的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的所述读访问数据,将所述读访问数据发送给所述应用程序902。
例如,所述软件定义模块901可以当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,指示所述操作系统内核903将所述访问地址和所述I/O操作指令携带的写数据写入到所述缓存装置中;则所述操作系统内核903可以根据所述软件定义模块901的指示,将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块901;所述软件定义模块901可以接收所述操作系统内核903返回的写数据结果,将所述写数据结果发送给所述应用程序902。
在本发明实施例中,所述主机中运行于用户空间的软件定义模块901能够截获所述主机的应用程序902发送的I/O操作指令,所述I/O操作指令携带访问地址,避免了所述I/O操作指令陷入到内核态,从而所述软件定义模块901能够根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核903根据所述访问地址访问所述存储设备,接收所述操作系统内核903返回的访问结果,将所述访问结果发送给所述应用程序902,实现了应用程序902对存储设备的访问。由于软件定义模块901运行于用户空间,上述过程中,只有软件定义模块901指示所述主机的操作系统内核903访问所述存储设备时存在一次内核陷入,软件定义模块901接收所述操作系统内核903返回的访问结果时存在一次内核陷出,减少了应用程序902访问存储设备时系统的内核陷入和内核陷出次数,从而提升访问速度,提高系统可靠性。
进一步,所述存储设备中还可以包括缓存装置和存储装置,从而所述软件定义模块901可以根据所述I/O操作指令对应的存储服务,指示所述主机的操作系统内核903所述访问地址访问所述缓存装置,以通过所述缓存装置访问所述存储装置,进一步提升了访问速度。
如图10,为本发明实施例提供的一种访问存储设备的主机,所述主机可以包括:
处理器1001、存储器1002、系统总线1004和通信接口1005。处理器1001、存储器1002和通信接口1005之间通过系统总线1004连接并完成相互间的通信。
处理器1001可能为单核或多核中央处理单元,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成电路。
存储器1002可以为高速RAM存储器,也可以为非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
存储器1002用于计算机执行指令1003。具体的,计算机执行指令1003中可以包括程序代码。
当所述主机运行时,处理器1001运行计算机执行指令1003,可以执行实施例一至实施例五任一所述的访问存储设备的方法的方法流程。
本发明实施例还提供了一种计算机可读介质,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行实施例一至实施例五任一所述的访问存储设备的方法的方法流程。
本领域普通技术人员将会理解,本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此外,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。
计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包含但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合,如随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者快闪存储器)、光纤、便携式只读存储器(CD-ROM)。
计算机中的处理器读取存储在计算机可读介质中的计算机可读程序代码,使得处理器能够执行在流程图中每个步骤、或各步骤的组合中规定的功能动作;生成实施在框图的每一块、或各块的组合中规定的功能动作的装置。
计算机可读程序代码可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为单独的软件包、部分在用户的计算机上并且部分在远程计算机上,或者完全在远程计算机或者计算机上执行。也应该注意,在某些替代实施方案中,在流程图中各步骤、或框图中各块所注明的功能可能不按图中注明的顺序发生。例如,依赖于所涉及的功能,接连示出的两个步骤、或两个块实际上可能被大致同时执行,或者这些块有时候可能被以相反顺序执行。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (20)
1.一种访问存储设备的方法,其特征在于,用于基于软件定义存储SDS的存储系统,所述基于软件定义存储SDS的存储系统包括主机和所述存储设备,所述方法包括:
所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的出I/O操作指令,所述I/O操作指令携带访问地址;
所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务;
所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备;
所述软件定义模块接收所述操作系统内核返回的访问结果;
所述软件定义模块将所述访问结果发送给所述应用程序。
2.根据权利要求1所述的方法,其特征在于,所述软件定义模块根据所述访问地址,确定所述I/O操作指令对应的存储服务包括:
所述软件定义模块根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。
3.根据权利要求1或2所述的方法,其特征在于,所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令包括:当应用程序使用动态链接库的方式链接操作系统时,所述软件定义模块采用动态链接库预加载的方式,截获所述应用程序发送的所述I/O操作指令。
4.根据权利要求1或2所述的方法,其特征在于,所述主机中运行于用户空间的软件定义模块截获所述主机的应用程序发送的I/O操作指令包括:当应用程序使用静态链接库的方式链接操作系统时,所述软件定义模块采用应用程序链接过程控制的方式,截获所述应用程序发送的所述I/O操作指令。
5.根据权利要求1-2任一项所述的方法,其特征在于,所述存储设备包括缓存装置和存储装置;
则所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述存储设备包括:
所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
6.根据权利要求5所述的方法,其特征在于,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:
所述软件定义模块接收所述操作系统内核返回的所述读访问数据;
所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的所述高级功能服务,对所述读访问数据执行高级功能操作,所述高级功能操作为针对所述高级功能服务的操作;
所述软件定义模块将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序。
7.根据权利要求5所述的方法,其特征在于,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
所述软件定义模块根据所述I/O操作指令对应的存储服务中包括的所述高级功能服务对所述写数据执行高级功能操作,所述高级功能操作为针对所述高级功能服务的操作;
所述软件定义模块指示所述操作系统内核将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中;
则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:
所述软件定义模块接收所述操作系统内核返回的写数据结果;
所述软件定义模块将所述写数据结果发送给所述应用程序。
8.根据权利要求5所述的方法,其特征在于,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,所述软件定义模块指示所述主机的操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:
所述软件定义模块接收所述操作系统内核返回的所述读访问数据;
所述软件定义模块将所述读访问数据发送给所述应用程序。
9.根据权利要求5所述的方法,其特征在于,所述软件定义模块根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置包括:
当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,所述I/O操作指令还携带写数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
所述软件定义模块指示所述操作系统内核将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中;
则所述软件定义模块接收所述操作系统内核返回的访问结果;所述软件定义模块将所述访问结果发送给所述应用程序包括:
所述软件定义模块接收所述操作系统内核返回的写数据结果;
所述软件定义模块将所述写数据结果发送给所述应用程序。
10.一种访问存储设备的主机,其特征在于,用于基于软件定义存储SDS的存储系统,所述主机包括应用程序、操作系统内核和软件定义模块;其中,所述软件定义模块运行于所述主机的用户空间;
所述软件定义模块用于截获所述应用程序发送的I/O操作指令,所述I/O操作指令携带访问地址,根据所述访问地址,确定所述I/O操作指令对应的存储服务,根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述操作系统内核根据所述访问地址访问所述基于软件定义存储SDS的存储系统中的存储设备;
所述操作系统内核用于根据所述软件定义模块的指示和所述访问地址访问所述存储设备,并将访问结果返回给所述软件定义模块;
所述软件定义模块用于接收所述操作系统内核返回的所述访问结果,将所述访问结果发送给所述应用程序。
11.根据权利要求10所述的主机,其特征在于,所述软件定义模块具体用于根据所述访问地址,查询预先配置的地址服务映射表,以确定所述I/O操作指令对应的存储服务,所述地址服务映射表用于记录所述存储设备的地址与存储服务的对应关系。
12.根据权利要求10或11所述的主机,其特征在于,所述软件定义模块具体用于当应用程序使用动态链接库的方式链接操作系统时,采用动态链接库预加载的方式,截获所述应用程序发送的所述I/O操作指令。
13.根据权利要求10或11所述的主机,其特征在于,所述软件定义模块具体用于当应用程序使用静态链接库的方式链接操作系统时,采用应用程序链接过程控制的方式,截获所述应用程序发送的所述I/O操作指令。
14.根据权利要求10-11任一项所述的主机,其特征在于,所述存储设备包括缓存装置和存储装置;
则所述软件定义模块具体用于根据所述I/O操作指令对应的存储服务和所述I/O操作指令,指示所述主机的操作系统内核根据所述访问地址访问所述缓存装置;
所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,访问所述缓存装置,以通过所述缓存装置访问所述存储装置。
15.根据权利要求14所述的主机,其特征在于,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块;
所述软件定义模块具体用于接收所述操作系统内核返回的所述读访问数据,根据所述I/O操作指令对应的存储服务中包括的所述高级功能服务,对所述读访问数据执行高级功能操作,将所述执行高级功能操作之后的所述读访问数据发送给所述应用程序,所述高级功能操作为针对所述高级功能服务的操作。
16.根据权利要求14所述的主机,其特征在于,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中包括高级功能服务,所述高级功能服务为除数据读及数据写服务以外的功能服务,且所述I/O操作指令为写操作指令时,根据所述I/O操作指令对应的存储服务中包括的所述高级功能服务,对所述I/O操作指令携带的写数据执行高级功能操作,指示所述操作系统内核将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,所述高级功能操作为针对所述高级功能服务的操作;
所述操作系统内核具体用于根据所述软件定义模块的指示,将所述访问地址和所述执行高级功能操作之后的所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述执行高级功能操作之后的所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块;
所述软件定义模块具体用于接收所述操作系统内核返回的所述写数据结果,将所述写数据结果发送给所述应用程序。
17.根据权利要求14所述的主机,其特征在于,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为读操作指令时,指示所述主机的操作系统内核根据所述访问地址从所述缓存装置中读取读访问数据,所述高级功能服务为除数据读及数据写服务以外的功能服务;
所述操作系统内核具体用于根据所述软件定义模块的指示和所述访问地址,从所述缓存装置中读取读访问数据,并将所述读访问数据返回给所述软件定义模块;
所述软件定义模块具体用于接收所述操作系统内核返回的所述读访问数据,将所述读访问数据发送给所述应用程序。
18.根据权利要求14所述的主机,其特征在于,所述软件定义模块具体用于当所述I/O操作指令对应的存储服务中不包括高级功能服务,且所述I/O操作指令为写操作指令时,指示所述操作系统内核将所述访问地址和所述I/O操作指令携带的写数据写入到所述缓存装置中,所述高级功能服务为除数据读及数据写服务以外的功能服务;
所述操作系统内核具体用于根据所述软件定义模块的指示,将所述访问地址和所述写数据写入到所述缓存装置中,以使得所述缓存装置根据所述访问地址将所述写数据写入到所述存储装置中,接收所述缓存装置返回的写数据结果,将所述写数据结果返回给所述软件定义模块;
则所述软件定义模块具体用于接收所述操作系统内核返回的写数据结果,将所述写数据结果发送给所述应用程序。
19.一种访问存储设备的主机,其特征在于,所述主机包括处理器、存储器、总线和通信接口;
所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述主机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述主机执行如权利要求1-9中任一项所述的访问存储设备的方法。
20.一种计算机可读介质,其特征在于,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行如权利要求1-9中任一项所述的访问存储设备的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/081214 WO2016000147A1 (zh) | 2014-06-30 | 2014-06-30 | 一种访问存储设备的方法和主机 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105830038A CN105830038A (zh) | 2016-08-03 |
CN105830038B true CN105830038B (zh) | 2019-03-05 |
Family
ID=55018241
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480002085.5A Active CN105830038B (zh) | 2014-06-30 | 2014-06-30 | 一种访问存储设备的方法和主机 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105830038B (zh) |
WO (1) | WO2016000147A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116107764B (zh) * | 2023-04-03 | 2023-09-26 | 阿里云计算有限公司 | 数据处理方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103246542A (zh) * | 2012-02-01 | 2013-08-14 | 中兴通讯股份有限公司 | 智能缓存及智能终端 |
CN103391256A (zh) * | 2013-07-25 | 2013-11-13 | 武汉邮电科学研究院 | 一种基于Linux系统的基站用户面数据处理优化方法 |
CN103647658A (zh) * | 2013-11-27 | 2014-03-19 | 华为技术有限公司 | 一种软件定义网络系统中网络设备的管理方法和控制器 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6438671B1 (en) * | 1999-07-01 | 2002-08-20 | International Business Machines Corporation | Generating partition corresponding real address in partitioned mode supporting system |
CN1322427C (zh) * | 2005-02-25 | 2007-06-20 | 清华大学 | Windows平台下动态管理存储资源的通用方法 |
US8825685B2 (en) * | 2009-11-16 | 2014-09-02 | Symantec Corporation | Selective file system caching based upon a configurable cache map |
US9069553B2 (en) * | 2011-09-06 | 2015-06-30 | Marvell World Trade Ltd. | Switching tasks between heterogeneous cores |
-
2014
- 2014-06-30 CN CN201480002085.5A patent/CN105830038B/zh active Active
- 2014-06-30 WO PCT/CN2014/081214 patent/WO2016000147A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103246542A (zh) * | 2012-02-01 | 2013-08-14 | 中兴通讯股份有限公司 | 智能缓存及智能终端 |
CN103391256A (zh) * | 2013-07-25 | 2013-11-13 | 武汉邮电科学研究院 | 一种基于Linux系统的基站用户面数据处理优化方法 |
CN103647658A (zh) * | 2013-11-27 | 2014-03-19 | 华为技术有限公司 | 一种软件定义网络系统中网络设备的管理方法和控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN105830038A (zh) | 2016-08-03 |
WO2016000147A1 (zh) | 2016-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101993915B1 (ko) | 원격으로 액세스되는 데이터의 효율적인 라이브-이송 | |
US9639459B2 (en) | I/O latency and IOPs performance in thin provisioned volumes | |
US11640247B2 (en) | Providing service address space for diagnostics collection | |
US9852161B2 (en) | Autonomic data partition placement in an in-memory data grid | |
US9213500B2 (en) | Data processing method and device | |
CN107229415A (zh) | 一种数据写方法、数据读方法及相关设备、系统 | |
US11513977B2 (en) | Pipelined data processing in fabric-enabled computational storage | |
TW201908968A (zh) | 近記憶體運算架構 | |
US9229891B2 (en) | Determining a direct memory access data transfer mode | |
KR20210000268A (ko) | 경량 브릿지, 이를 포함하는 물품 및 이를 이용한 방법 | |
JP2023538938A (ja) | 共用可能なアプリケーションスナップショットの為のコンパイル化戦略 | |
CN104951243A (zh) | 虚拟化存储系统中的存储扩展方法和装置 | |
US20210124510A1 (en) | Using telemetry data from different storage systems to predict response time | |
CN115964093A (zh) | 用于访问存储设备上的设备程序的系统、方法和设备 | |
US20170039140A1 (en) | Network storage device for use in flash memory and processing method therefor | |
CN105830038B (zh) | 一种访问存储设备的方法和主机 | |
US20200125280A1 (en) | Leveraging snapshot for time series pattern analysis prediction | |
US9253276B2 (en) | Multi-protocol bridge with integrated performance accelerating cache | |
US11687443B2 (en) | Tiered persistent memory allocation | |
US10318326B1 (en) | Internal deduplication engine leveraging embedded virtual guest operating system | |
US20140289478A1 (en) | Control device, and storage system | |
US10713171B2 (en) | Computer system | |
CN107851062A (zh) | 一种主机集群中缓存管理方法及主机 | |
CN118159956A (zh) | 数据中心存储中用于安全、高性能地执行用户代码的存储服务器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |