计算机系统和访问控制方法与流程

文档序号:14203645阅读:626来源:国知局
计算机系统和访问控制方法与流程

本发明主要涉及计算机系统的技术,特别涉及访问控制的技术。



背景技术:

固态硬盘(solidstatedrive(ssd))等基于闪存的存储设备,与硬盘驱动器(harddiskdrive(hdd))相比具有非常高的i/o性能。作为用于连接这样的i/o性能比较高的存储设备的i/f标准,已知非易失性存储器标准(non-volatilememoryexpress(nvme))(非专利文献1)。nvme在命令发布源的设备驱动程序与存储设备之间能够具有多个用于处理命令的队列(提交队列(submissionqueue)和完成队列(completionqueue))。由此,nvme实现命令发布源的设备驱动程序与存储设备之间的通信速度的提高。

专利文献1中,公开了对于遵循nvme的存储设备,使用在总线和接口标准(pciexpress(pcie))总线中存在的物理功能、和基于单根输入/输出虚拟化(singlerootinputoutputvirtualization(sr-iov))生成的虚拟功能,来使存储设备进行访问控制处理的方法。

现有技术文献

专利文献

专利文献1:美国专利第9003071号

非专利文献

非专利文献1:“nvmexpress”revision1.1bjuly2,2014

非专利文献2:intelvirtualizationtechnoogyfordirectedi/o,architecturespecification,october2014,rev2.3

非专利文献3:amdi/ovirtualizationtechnolgy(iommu)specification,rev2.62,february2015,pub#48882

非专利文献4:

http://www.synopsys.com/japan/today-tomorrow/pages/tt82_pci_express_part2.aspx



技术实现要素:

发明要解决的问题

以sr-iov为前提的专利文献1中公开的技术中,在访问控制功能中也会产生sr-iov引起的计算机上的制约。此处,只要没有特别声明,计算机就包括物理计算机和虚拟计算机双方。作为该制约的例子,有以下任意一项以上。

(制约1)pcie中能够指定的功能的数量少。pciegen2中仅准备了3bit,gen3中即使使用alternativeroutingidinterpretation(替代路由id解释,ari)也仅准备了8bit的transactionlayerpacket(事务处理层包,tlp)头的路由id字段。从而,只要存储设备不具有多个端点,就不能提供超过256个的功能。这使得专利文献1的技术中难以进行超过pcie的最大功能数的独立的访问控制的设定,即使可能也需要在1个设备中具备多个端点。

(制约2)虚拟功能与物理功能相比能够用更少的硬件资源实现。非专利文献4中,公开了虚拟功能的门实现成本是物理功能的10分之1。但是,即使如此,为了生成大量的虚拟功能,在设备中也需要大量的硬件资源。

(制约3)计算机需要支持sr-iov的基本输入输出系统(basicinput/outputsystem(bios))、可扩展固件接口(extensiblefirmwareinterface(efi))、或者nvme设备驱动程序。

本发明的目的在于提供一种带有由sr-iov引起的制约少的访问控制的nvme存储。本发明的其他目的将用实施例说明。

用于解决问题的技术方案

一个实施例的计算机系统,包括:具有存储器和多个cpu核心的至少一台计算机;和具有使用存储设备来构成的多个逻辑存储单元的存储子设备。在计算机中,在存储器构建有多个队列,对该多个队列的每一个分配多个cpu核心中的至少1个。队列是将从分配给该队列的cpu核心对逻辑存储单元发出的i/o命令入队而构成的。计算机系统具有访问控制信息,该访问控制信息包含关于是否允许从各队列对各逻辑存储单元进行访问的信息。

发明的效果

根据本发明,能够提供一种带有由sr-iov引起的制约少的访问控制的nvme存储。

附图说明

图1表示计算机系统的逻辑结构的例子。

图2表示队列组操作命令、访问权操作命令的结构例。

图3表示队列分配请求、队列分配响应、队列释放请求的结构的例子。

图4表示第一队列生成请求、第一队列生成响应、队列删除请求的结构例。

图5表示i/o请求、i/o响应的结构的例子。

图6表示实施例1的计算机系统的硬件结构的例子。

图7表示实施例1的计算机系统的逻辑结构的例子。

图8表示acl的结构的例子。

图9表示队列组表的结构例。

图10表示访问违例日志的结构例。

图11表示第二队列生成请求、第二队列生成响应的结构例。

图12表示队列分配管理画面的例子。

图13表示访问违例显示画面的例子。

图14是表示设备驱动程序装载时的动作例的流程图。

图15是表示设备驱动程序卸载时的动作例的流程图。

图16是表示队列管理机构的动作例的流程图。

图17是表示存储子控制器的动作例的流程图。

图18表示实施例2的计算机系统的硬件结构的例子。

图19表示实施例2的计算机系统的逻辑结构的例子。

图20表示gpa-hpa操作命令的结构例。

图21表示gpa-hpa变换表列表的结构例。

图22表示实施例3的计算机系统的硬件结构的例子。

图23表示实施例3的计算机系统的逻辑结构的例子。

具体实施方式

以下说明几个实施例。其中,在此后的说明中用“aaa表”、“aaa列表”、“aaa队列”等的记载来说明本发明的信息,但这些信息也可以用表、列表、队列等数据结构以外来记载。因此,为了表示不依赖于数据结构,对于“aaa表”、“aaa列表”、“aaa队列”等有时也称为“aaa信息”。另外,在说明各信息的内容时,有时使用“识别信息”、“识别符”、“名”、“名称”、“id”这样的记载,但它们相互能够置换。

此后的说明中存在用“程序”作为主语进行说明的情况,但因为程序通过被处理器执行而使用存储器和通信端口(通信控制设备)进行规定的处理,所以也可以改为用处理器作为主语的说明。另外,用程序作为主语示出的处理也可以视为管理服务器等计算机、信息处理装置进行的处理。另外,程序的一部分或全部也可以用专用硬件实现。

另外,各种程序可以通过程序发布服务器、或计算机可读取的存储介质安装在各计算机中。该情况下,程序发布服务器包括cpu和存储资源,存储资源还存储发布程序和作为发布对象的程序。然后,通过由cpu执行发布程序,程序发布服务器的cpu将发布对象的程序对其他计算机发布。

另外,管理计算机具有输入输出设备。作为输入输出设备的例子可以考虑显示器、键盘和指点设备,但也可以是除此以外的设备。另外,作为输入输出设备的替代也可以用串行接口和以太网接口作为输入输出设备,在该接口上连接具有显示器或键盘或指点设备的显示用计算机,对显示用计算机发送显示用信息、或者从显示用计算机接收输入用信息,从而用显示用计算机进行显示、或者接受输入,由此代替输入输出设备中的输入和显示。

此后,有时将管理信息处理系统、显示本申请发明的显示用信息的一台以上计算机的集合称为管理系统。管理计算机对显示用信息进行显示的情况下管理计算机是管理系统,并且管理计算机与显示用计算机的组合也是管理系统。另外,为了管理处理的高速化和高可靠化可以用多台计算机实现与管理计算机等同的处理,该情况下该多台计算机(显示用计算机进行显示的情况下也包括显示用计算机)是管理系统。

图1表示计算机系统1的逻辑结构例。

计算机系统1包括1个以上服务器装置200和存储子设备300。

存储子设备300具有存储介质、存储子控制器310和访问控制器400。存储介质由能够进行数据的读/写的非易失性存储介质构成,例如是闪存芯片。存储子控制器310控制存储子设备300整体,实现该存储子设备300具有的各种功能。存储子控制器310也可以将存储介质的存储区域分割为1个以上逻辑单元(称为“lu”)320进行管理。对各lu320也可以赋予id。

访问控制器400管理和控制对各lu320的访问权。存储子设备300支持nvme的情况下,对于访问目标的lu320的指定也可以使用命名空间(namespace(ns))。访问控制器400可以是由存储子控制器310执行的程序,也可以是在存储子设备300中搭载的专用电路。关于访问控制器400的功能的详情在后文中叙述。

服务器装置200具有1个以上cpu核心210、和存储器220。在存储器220中,可以构建能够从存储子控制器310访问的i/o队列500。另外,在存储器220中,可以保存作为一种程序的设备驱动程序230。设备驱动程序230可以由cpu核心210执行,进行i/o队列500的生成和删除等。

计算机系统1具有队列管理机构110。队列管理机构110将对各服务器装置200分配的多个i/o队列500作为队列组来进行管理。关于队列管理机构110的功能的详情在后文中叙述。队列管理机构110可以是用某个服务器装置200执行的程序或者在该服务器装置200中搭载的专用电路。或者,队列管理机构110也可以是用能够与各服务器装置200和存储子设备300双向通信的规定的管理计算机执行的程序或者在该管理计算机中搭载的专用电路。或者,队列管理机构110也可以是用在将服务器装置200与存储子设备300连接的网络中存在的交换机装置执行的程序或者在该交换机装置中搭载的专用电路。

服务器装置200的cpu核心210在对该cpu核心210静态(固定)地分配的i/o队列500中,将作为一种i/o命令的i/o请求700入队,由此能够对存储子设备300请求i/o。未分配i/o队列500的cpu核心210不能对存储子设备300请求i/o。此处,“静态”指的是cpu核心210与i/o队列500的分配关系在中途不动态变更。

存储子设备300具有与多个i/o队列500分别对应的多个队列资源311。i/o队列500和与其对应的队列资源311的集合也可以分别赋予队列id。

存储子设备300能够将入队至i/o队列500的i/o请求700对于与该i/o队列500对应的队列资源311出队,确定对该i/o队列500赋予的队列id。

访问控制器400可以使用包含各队列id对各luid的访问权的设定(例如是否允许访问的设定)的acl410,以队列id510的单位控制对各luid的访问权。或者,访问控制器400也可以使用包含属于各队列组id的队列id的信息的队列组表420和上述acl410,以队列组id为单位控制对各luid的访问权。

队列管理机构110和服务器装置200的设备驱动程序230发送接收关于队列的分配的管理命令620、630、640。另外,队列管理机构110和设备驱动程序230发送接收关于队列的生成的管理命令650、660、670。关于这些管理命令620、630、640、650、660、670的详情在后文中叙述。队列管理机构110和存储子设备300的访问控制器400发送接收关于队列组的操作的管理命令600、610。关于这些管理命令600、610的详情在后文中叙述。

接着,叙述确定对服务器装置200分配的队列的数量的处理的一例(步骤s11至s13)。

(s11)服务器装置200的设备驱动程序230将队列分配请求620(参考图3)对队列管理机构110发送。队列分配请求620中可以包含服务器装置200请求的队列的数量。该请求队列数可以是服务器装置200中搭载的cpu核心210的数量。

(s12)队列管理机构110接受队列分配请求620,确定对该队列分配请求620的发布源的服务器装置200分配的队列的数量。队列管理机构110预先管理存储子设备300的空白队列数,该空白队列数在请求队列数以上的情况下,可以确定对该服务器装置200分配请求队列数的队列。队列管理机构110在空白队列数不足请求队列数的情况下,可以确定对该服务器装置200分配该空白队列数的队列。然后,队列管理机构110将包含该确定了的分配队列数和这些分配了的队列的id的队列分配响应630(参考图3)对设备驱动程序230发送。

(s13)设备驱动程序230接受队列分配响应630时,将该队列分配响应630中包含的队列id的队列分别对cpu核心210分配。设备驱动程序230在分配队列数在服务器装置200具有的cpu核心210的数量以上的情况下,可以将1个队列id对1个cpu核心210分配。设备驱动程序230在分配队列数不足服务器装置200具有的cpu核心210的数量的情况下,可以将1个队列id对2个以上cpu核心210分配。该情况下,该2个以上cpu核心210共享该1个队列id。

通过以上处理,确定对各服务器装置200分配的队列的数量。

接着,叙述在服务器装置200与存储子设备300之间生成队列的集合的处理的一例(步骤s21至s25)。服务器装置200生成通过上述步骤s11至s13而对自身分配的数量的队列。以下是生成其中1个队列的处理。

(s21)设备驱动程序230选择上述步骤s13中接受的队列分配响应630中包含的队列id中的1个。然后,设备驱动程序230将包含该选择的队列id的队列生成请求650(参考图4)对队列管理机构110发送。

(s22)队列管理机构110接受该队列生成请求650,对存储子设备300转发。

(s23)存储子设备300接受该队列生成请求650,生成与该队列生成请求650中包含的队列id651对应的队列500和队列资源311的集合。然后,存储子设备300将队列生成响应660(参考图4)对队列管理机构110发送。

(s24)队列管理机构110接受该队列生成响应660,对设备驱动程序230转发。

(s25)设备驱动程序230接受该队列生成响应660。

通过以上处理,在服务器装置200与存储子设备300之间生成队列的集合。

接着,叙述使队列新归属于队列组的处理的一例(步骤s31至s32)。

(s31)队列管理机构110将作为一种管理命令的队列组操作命令600(参考图2)对存储子设备300发送。在队列组操作命令600中,可以包含队列组id601、表示队列的“追加”的操作类型602、和要归属于该队列组id601的1个以上队列id604。

(s32)接受了该队列组操作命令600的访问控制器400,以队列id604归属于队列组id601的方式,变更队列组表420。

通过以上处理,队列组id与队列id的归属关系被反映至队列组表420。

接着,叙述变更对lu320的访问权的处理的一例。

(s41)队列管理机构110将作为一种管理命令的访问权操作命令610(参考图2)对存储子设备300发送。在访问权操作命令610中,可以包含变更对象的队列组id611、表示变更后的访问权(例如“允许”或“拒绝”访问)的操作类型612、和变更对象的1个以上luid614。

(s42)接受了该访问权操作命令610的访问控制器400操作acl410,将从属于变更对象的队列组id611的各队列id对变更对象的luid614的访问权变更为变更后的访问权。

通过以上处理,能够以队列组为单位设定和变更访问权。

图2表示队列组操作命令600、访问权操作命令610的结构例。

队列组操作命令600是队列管理机构110用于操作队列组的管理命令。队列组操作命令600可以包含队列组id601、操作类型602、和包含1个以上队列id604的队列id列表603作为项目值(字段值)。队列组id601是作为操作对象的队列组的id。

操作类型602是表示对id601的队列组进行怎样的操作的信息。操作类型602“追加”可以表示对队列组id601追加队列id列表603中包含的队列id604的操作。操作类型602“删除”可以表示从队列组id601中删除队列id列表603中包含的队列id604的操作。

访问权操作命令610是队列管理机构110用于操作从队列组对各lu320的访问权的管理命令。访问权操作命令610可以包含队列组id611、操作类型612、和包含1个以上luid614的luid列表613作为项目值(字段值)。队列组id611是该访问权操作命令610作为操作对象的队列组的id。

操作类型612是表示对id611的队列组设定怎样的访问权的信息。操作类型612“允许”可以表示将从属于队列组id611的队列id对luid列表613中包含的luid614的访问设定为允许的操作。操作类型612“拒绝”可以表示将从属于队列组id611的队列id对luid列表613中包含的luid614的访问设定为拒绝的操作。

图3表示队列分配请求620、队列分配响应630、队列释放请求640的结构例。

队列分配请求620是设备驱动程序230用于对队列管理机构110请求分配队列的管理命令。队列分配请求620可以包含请求队列数621作为项目值(字段值)。

请求队列数621是设备驱动程序230(服务器装置200)请求的队列的数量。典型而言,请求队列数621可以是包括数据驱动程序230的服务器装置200中搭载的cpu核心210的数量或该数以上。这是为了防止多个cpu核心210争用1个队列500、发生竞争。但是,请求队列数621也可以比服务器装置200中搭载的cpu核心210的数量少。该情况下,多个cpu核心210也可以共享1个队列500。

队列分配响应630是队列管理机构110用于对设备驱动程序230响应队列分配请求620的执行结果的管理命令。队列分配响应630可以包含分配队列数631、存储子设备信息632、队列id列表633来作为项目值(字段值)。

分配队列数631是对设备驱动程序230分配的队列的数量。队列管理机构110在空白(未分配的)队列数为请求队列数621以上的情况下,可以使分配队列数631与请求队列数621相等。队列管理机构110在空白队列数不足请求队列数621的情况下,可以使分配队列数631比请求队列数621小(例如设为空白队列数)。

存储子设备信息632是访问存储子设备300所需的信息。存储子设备信息632的例子,是存储子设备300的ip地址。队列id列表633中包含的队列id634是对设备驱动程序230分配的队列的id。

队列释放请求640是设备驱动程序230用于对队列管理机构110请求释放对自身的服务器装置200分配的队列的管理命令。

图4表示第一队列生成请求650、第一队列生成响应660、队列删除请求670的结构例。

第一队列生成请求650是队列管理机构110用于对存储子设备300请求生成队列的管理命令。队列管理机构110在从设备驱动程序230接受了例如如图11所示的第二队列生成请求680的情况下,可以基于该第二队列生成请求680生成第一队列生成请求650,将其对存储子设备300发送。

第一队列生成请求650可以包含队列id651、基地址652、条目数653作为项目值(字段值)。队列id651是请求生成的队列的id。基地址652是服务器装置200的存储器220中的、生成id651的队列的地址。条目数653是id651的队列中能够添加条目的数量。

送出第一队列生成请求650的设备驱动器230,可以在该请求650中包含的存储器220的基地址652,在存储器220中获取根据条目数651计算出的长度的存储器区域,生成与队列id651对应的i/o队列500。

接受了第一队列生成请求650的内容的存储控制器310,可以生成与该请求650中包含的队列id651对应的队列资源311。

第一队列生成响应660是设备驱动程序230用于对队列管理机构110响应第一队列生成请求650的执行结果的管理命令。存储控制器310可以生成包含第一队列生成请求650的执行结果的第一队列生成响应660,将其对队列管理机构110发送。接受了第一队列生成响应660的队列管理机构110,可以基于该第一队列生成响应660,生成例如如图11所示的第二队列生成响应690,将其对设备驱动程序230发送。

第一队列生成响应660可以包含状态661作为项目值(字段值)。状态661是表示队列生成请求650的执行结果的信息。状态661的例子是队列生成的“成功”、“失败”等。

队列删除请求670是设备驱动程序230用于对队列管理机构110请求删除队列的管理命令。接受了队列生成删除670的队列管理机构110对于该队列删除请求670,可以保持原样地对存储子设备300转发,也可以变换为规定的方式后转发。

队列删除请求可以包含队列id671作为项目值(字段值)。队列id671是请求删除的队列的id。

接受了队列删除请求670的存储控制器310,删除与该请求670中包含的队列id671对应的队列资源311。另外,设备驱动程序230删除与队列id671对应的i/o队列500,释放主存储器220中的存储器区域。

图5表示i/o请求700、i/o响应710的结构例。

i/o请求700是服务器装置200的cpu核心210用于对存储子设备300的lu320请求数据的写/读等的i/o命令。cpu核心210在与对自身静态地分配的队列id对应的i/o队列500中,将i/o请求700入队,由此能够对存储子设备300发送i/o请求700。i/o请求700可以包含luid705、操作类型701、逻辑块地址702、长度703、缓冲地址704作为项目值(字段值)。

luid705是访问目标的lu320的id。

操作类型701是表示对id705的lu320进行怎样的i/o操作的信息。操作类型701的例子是“写”、“读”、“删除”等。

逻辑块地址702是id705的lu320中的、访问目标的逻辑块的地址。

长度703在操作类型701是“写”的情况下,是写入数据的长度。在操作类型701是“读”的情况下,是读取数据的长度。

缓冲地址704在操作类型701是“写”的情况下,是保存了写入数据的存储器220的地址。缓冲地址704在操作类型701是“读”的情况下,是用于保存读取数据的存储器220的地址。

i/o响应710是用于使存储子控制器310对服务器装置200的cpu核心210响应i/o请求700的执行结果的i/o命令。存储子控制器310在与对发送目标的cpu核心210静态地分配的队列id对应的i/o队列500中,将i/o响应710入队,由此能够对cpu核心210发送i/o响应710。i/o响应710可以包含状态711、和(如果需要)错误信息712作为项目值(字段值)。

状态711是表示i/o请求700的执行结果的信息。状态711的例子是i/o的“成功”、“失败”等。

错误信息712在状态711是“失败”的情况下,是表示该失败的理由的信息。

上述这些命令可以在该命令的数据结构中直接包含项目值。或者,也可以在能够从服务器装置200、队列管理机构110、和存储子设备300访问的规定的存储区域中保存上述项目值,在命令中仅包含指向该存储区域的地址(指针)。命令可以还包含用于将请求与响应关联的id等、存储子设备300动作所需的信息。

实施例1

图6表示实施例1的计算机系统1a的硬件结构例。图7表示实施例1的计算机系统1a的逻辑结构例。

计算机系统1a具有第一服务器装置200a、和1个以上第二服务器装置200b。第一服务器装置200a可以具有cpu210a、存储器220a、nic、和存储子设备300。这些要素例如可以经由pcie总线240可双向通信地连接。第二服务器装置200b可以具有cpu210b、存储器220b、nic。这些要素例如可以经由pcie总线可双向通信地连接。第一服务器装置200a与第二服务器装置200b可以经由网络250可双向通信地连接。网络250的例子是ethernet(注册商标)、光纤信道(fibrechannel)、和无限带宽技术(infiniban)。

在第一服务器装置200a的存储器220a中,可以保存用于实现队列管理机构110a的程序、和用于实现设备驱动程序230a的程序。在存储器220a中,可以设置用于保存在第一服务器装置200a的cpu核心210a与存储子设备300之间交换的i/o命令700、710的i/o队列500a。在存储器220a中,可以设置用于保存在第二服务器装置200b的cpu核心210b与存储子设备300之间交换的i/o命令700、710的i/o队列500b。该情况下,第二服务器装置200b的cpu核心210b可以对第一服务器装置220a的存储器220a的i/o队列500b用远程直接数据存取(remotedirectmemoryaccess(rdma))发送i/o命令。

在存储器220a中,可以设置用于保存在队列管理机构110a与存储子设备300之间交换的管理命令600、610、640、650、660的管理队列501。

在存储器220a中,可以保存将第一服务器装置200a的cpu核心210a与i/o队列500a关联的设备驱动程序230a。该情况下,设备驱动程序230a和队列管理机构110a存在于同一第一服务器装置220a中,所以可以用本地回环发送接收管理命令。

在第二服务器装置200b的存储器220b中,可以保存将第二服务器装置200b的cpu核心210b与i/o队列500b关联的设备驱动程序230b。该情况下,设备驱动程序230b与队列管理机构110a可以经由网络250发送接收管理命令。

存储子设备300具有存储介质、存储子控制器310a、和访问控制器400。这些要素具有的功能如以上说明所述。访问控制器400管理acl410、队列组表420、访问违例日志430。

图8是acl410的结构例。

acl410是各队列id对于各luid的访问权(是否允许访问)的设定信息。acl410如图8所示,可以是由多个队列id和多个luid构成的二维比特图(bitmap)。

访问控制器400可以用以下(a1)至(a3)的处理判断是否允许队列id对于luid的访问。

(a1)访问控制器400确定将i/o请求700出队的队列的id、和该i/o请求700内的luid705。

(a2)访问管理程序400从acl410中取得由该识别的luid和队列id确定的比特(称为“访问控制比特”)。

(a3)访问控制器400在该取得的访问控制比特是“0”的情况下,可以将从上述(a1)中确定了的队列id的队列出队的i/o请求的、对于上述(a1)中识别的luid的lu320的访问判断为“拒绝”。访问控制器400在该取得的访问控制比特是“1”的情况下,可以将从上述(a1)中确定了的队列id的队列出队的i/o请求的、对于上述(a1)中确定了的luid的lu320的访问判断为“允许”。

通过以上处理,访问控制器400能够判断是否允许i/o请求700对于lu320的访问。另外,也可以与上述相反地,将访问控制比特“1”设为“拒绝”,将访问控制比特“0”设为“允许”。或者,也可以使访问控制比特成为多值的,使其具有“拒绝”、“允许”以外的含义。acl410(比特图)的长度可以基于存储子设备300可取的最大队列数与最大lu数的积确定。

访问控制器400可以用以下(b1)至(b4)的处理变更acl410。

(b1)访问控制器400基于从队列管理机构110a接受的访问权操作命令610,确定作为变更对象的队列组id和luid、和变更后的访问控制比特(“1”(允许)或“0”(拒绝))。

(b2)访问控制器400基于队列组表420(参考图9),取得与变更对象的队列组id对应的队列id比特串。队列id比特串可以是属于该队列组id的队列id的比特是“1”、不属于该队列组id的队列id的比特是“0”。

(b3)访问控制器400对于上述(b2)中取得的队列id比特串的各比特,变更为与变更后的访问控制比特“1”(允许)或“0”(拒绝)的逻辑与。即,变更为允许访问“1”的情况下,队列id比特串的“1”的部分保持原样。变更为拒绝访问“0”的情况下,队列id比特串的“1”的部分成为“0”。

(b4)访问控制器400在acl410中,将与变更对象的luid对应的全部队列id的访问控制比特置换为上述(b3)中变更为逻辑与的队列id比特串。此时,访问控制器400可以为了不输出访问控制比特而进行互斥控制。

图9是队列组表420的结构例。

队列组表420是用于管理属于队列组id的队列id的表。队列组表420如图9所示,可以是由多个队列id和多个队列组id构成的二维比特图。

上述(b2)的取得队列id比特串,可以是从队列组表420按列取得与变更对象的队列组id对应的各队列id的比特。

访问控制器400可以用以下处理变更队列组表420。

访问控制器400在对队列组id追加队列id的情况下,将队列组表420中的、由该队列组id和该队列id确定的比特变更为“1”。

访问控制器400在从队列组id删除队列id的情况下,将队列组表420中的、由该队列组id和该队列id确定的比特变更为“0”。

访问控制器400通过使用图8和图9说明的上述处理,能够将acl410中的、属于队列组id的多个队列id的对于变更对象的luid的访问权一并变更。如果对于acl410的luid逐个变更属于队列组id的各队列id的访问控制比特,则在该变更途中,该队列组中同时存在允许访问的队列、和拒绝访问的队列。这样,可能发生在1个服务器装置200中运行的os使用某一个cpu核心210时能够访问lu320,但是用其他cpu核心210时不能访问同一个lu320的现象。即,可能发生os不能正常运行的问题。但是,根据使用图8和图9说明的上述处理,能够以对1个服务器装置200搭载的cpu核心230分配的队列id所属于的队列组为单位,将对于lu320的访问权一并变更,所以能够防止这样的问题。

图10是访问违例日志430的结构例。

在访问违例日志430中,记录入队到队列的i/o请求中拒绝访问(违例)的i/o请求的数量等。访问控制器400可以按每个队列组对该拒绝访问的i/o请求的数量计数,在访问违例日志中记录。

访问违例日志430可以包含队列组id1001、读违例数1002、和写违例数1003作为项目值(字段值)。队列组id1001是队列组的id。在该队列组id1001中,可以仅记载活动的队列组id。读违例数1002是入队到属于id1001的队列组的某个队列且拒绝访问的读请求的数量。写违例数1202是入队到属于id1003的队列组的某个队列且拒绝访问的写请求的数量。另外,访问违例日志430也可以还具有用于记录其他未允许的操作的项目值。

这样,通过以队列组的单位对访问违例数进行计数,能够容易地识别拒绝访问的i/o请求的发出数量极端地多的服务器装置。

图11表示第二队列生成请求680、第二队列生成响应690的结构例。

第二队列生成请求680是设备驱动程序230用于对队列管理机构110a请求生成队列的管理命令。队列管理机构110a在从设备驱动程序230接受了第二队列生成请求680的情况下,可以基于该第二队列生成请求680,生成例如如图4所示的第一队列生成请求650,将其对存储子设备300发送。

第二队列生成请求680可以包含队列id681和条目数683作为项目值(字段值)。队列id681可以与第一队列生成请求650的队列id651相同。条目数683可以与第一队列生成请求650的条目数653相同。

第二队列生成请求680也可以不包含相当于第一队列生成请求650的基地址651的项目值。这是因为如图7所示,与第二服务器装置200b相关的i/o队列500b设置在第一服务器装置200a的存储器220a中。但是,也可以将与该i/o队列500b关联的缓冲设置在第二服务器装置200b的存储器220b中。

第二队列生成响应690是用于使队列管理机构110a对设备驱动程序230响应第二队列生成请求680的执行结果的管理命令。例如从存储子设备300接受了如图4所示的第一队列生成响应660的队列管理机构110a可以基于该第一队列生成响应660生成第二队列生成响应690,将其对设备驱动程序230发送。

第二队列生成响应690可以包含状态691、基地址692、门铃地址693作为项目值(字段值)。状态691可以与第一队列生成响应660的状态661相同。基地址692是在第一服务器装置200a的存储器220a中设置的i/o队列500b的地址。门铃地址693是用于对存储控制器310通知i/o请求700入队至i/o队列500b的寄存器的地址。该寄存器的地址可以是第一服务器装置200a的存储器220a中的地址。

图12是队列分配管理画面1000的例子。

队列分配管理画面1000是用于显示和设定队列分配管理列表1010的内容的画面。队列分配管理列表1010可以由队列管理机构110a管理。队列管理机构110a可以使用队列分配管理列表1010生成和显示队列分配管理画面1000。

队列分配管理列表1010可以具有服务器id1011、最大队列数1012、队列组id1013、分配队列id1014、允许访问luid1015作为项目值(字段值)。服务器id1011是服务器装置200的id。最大队列数1012是能够对id1011的服务器装置200分配的最大的队列数。队列组id1013是与id1011的服务器装置200关联的队列组的id。分配队列id1014是属于id1013的队列组的队列的id。允许访问luid1015是允许从属于队列组id1013的队列id1014访问的lu320的id。

图12的队列分配管理画面1000的第1行的记录,表示对于服务器id1011“1”的服务器装置200关联队列组id1013“1”,队列id1014“0”至“7”属于该队列组id1013“1”,允许入队至这些队列id1014的i/o请求700访问luid1010“1”至“3”的lu320。

管理者可以操作队列分配管理画面1000的操作项目1016的按钮,删除队列分配管理列表1010的记录,或者修改记录的各项目值1012至1015。或者,存储管理部100也可以自动地设定和变更队列分配管理列表1010的各项目值1012至1015。

图13是访问违例显示画面1300的例子。

访问违例显示画面1300是用于显示访问违例日志430的内容的画面。队列管理机构110a可以将存储子设备300的访问违例日志430的内容显示在访问违例显示画面1300中。或者,队列管理机构110a可以轮询地确认各i/o队列500,同时计数对入队至i/o队列500的i/o请求700返回了包含拒绝访问的错误的i/o响应510的数量,将其结果显示在访问违例显示画面1300中。

队列管理机构110a在管理多个存储子设备300的情况下,也可以将对该多个存储子设备300的访问违例的数量的合计显示在访问违例显示画面1300中。访问违例日志430也可以直接映射至pcie的地址空间。或者,存储控制器310也可以使用专用的管理命令将访问违例日志430对队列管理机构110a发送。

在访问违例显示画面1300中,可以显示服务器id1301、队列组id1302、允许访问luid1303、违例数1304、读违例数1305、写违例数1306作为项目值。服务器id1301、队列组id1302、允许访问luid1303如以上说明所述。访问违例数1304是从属于id1032的队列组id的队列发出访问违例的i/o请求700的次数。读违例数1305是从属于id1302的队列组id的队列发出访问违例的读请求的次数。写违例数1306是从属于id1302的队列组id的队列发出访问违例的写请求的次数。

图14是表示设备驱动程序230被装载至服务器装置200之后的动作例的流程图。

(s100)设备驱动程序230与队列管理机构110a之间形成管理命令用的通信路径。然后,前进至步骤s101。

(s101)设备驱动程序230对队列管理机构110a发送队列分配请求620。然后,前进至步骤s102。

(s102)设备驱动程序230,设备驱动程序230从队列管理机构110a接受队列分配响应630时,前进至步骤s103。

(s103)设备驱动程序230从队列分配响应630中包含的队列id634中选择1个未生成的队列id,生成包含该选择的队列id和条目数682的第二队列生成请求680。然后,设备驱动程序230将该第二队列生成请求680对队列管理机构110a发送。然后,前进至步骤s104。

(s104)设备驱动程序230从队列管理机构110a接受第二队列生成响应690时,从该接受的队列生成响应690中取得基地址692和门铃地址693。然后,前进至步骤s105。

(s105)设备驱动程序230将步骤s103中选择的队列id的i/o队列500分配至1个以上cpu核心210。然后,前进至步骤s106。

(s106)设备驱动程序230中,如果对于队列分配响应630中包含的全部队列id都已结束处理(是),则前进至步骤s110,如果剩余有未处理的队列id(否),则返回步骤s103。

(s110)设备驱动程序230在从cpu核心210(或os)接受了i/o请求700的情况下(是),前进至步骤s111,并非如此的情况下(否),反复步骤s110。

(s111)设备驱动程序230将从cpu核心210接受的i/o请求700入队至对该cpu核心210分配的队列500。之后,设备驱动程序230在门铃地址693中写入有i/o请求700入队至该队列500的信息。存储子控制器310能够通过该门铃地址693的变更,检测出有i/o请求700入队至i/o队列500。i/o请求700对i/o队列500的入队,在通信手段是无限带宽(infiniband)的情况下,可以用“rdmawrite(远程直接内存写入)”进行。然后,前进至步骤s112。

(s112)设备驱动程序230接受i/o响应710。设备驱动程序230可以通过使用轮询的i/o队列500的返回侧的状态监视、或者来自存储管理部100的通知等,检测出从存储子设备300发送了该i/o响应710。上述状态监视或通知在通信手段是无限带宽(infiniband)的情况下,可以用“rdmaread(远程直接内存读取)”进行。然后,返回步骤s110。

通过以上处理,存储装置200的各cpu核心210能够对存储子设备300发送i/o请求700。

图15是表示从服务器装置200卸载设备驱动程序230的动作例的流程图。

(s201)设备驱动程序230对于对cpu核心210分配中的1个队列id解除分配。然后,前进至步骤s202。

(s202)设备驱动程序230将包含解除了分配的队列id671的队列删除请求670对队列管理机构110a发送。然后,前进至步骤s203。

(s203)设备驱动程序230在对于分配中的全部队列id解除分配结束的情况下(是),前进至步骤s204,并非如此的情况下(否),返回步骤s201。

(s204)设备驱动程序230将队列释放请求640对队列管理机构110a发送。然后,前进至步骤s205。

(s205)设备驱动程序230删除与队列管理机构110a之间的管理命令用的通信路径。

通过以上处理,能够将对存储装置200分配的i/o队列500全部释放。

图16是表示队列管理机构110a的动作例的流程图。

(s300)队列管理机构110a判断是否接受了队列分配请求620、队列释放请求640、第二队列生成请求680、队列删除请求670中的某一者。

<接受了队列分配请求620的情况>

(s311)队列管理机构110a从事先设定的队列分配管理列表中,确定具有该队列分配请求620的发送源的服务器id1011的记录。然后,队列管理机构110a对该确定的记录的最大队列数1012、与该队列分配请求620的请求队列数621进行比较,将较小的一方确定为分配队列数。然后,前进至步骤s312。

(s312)队列管理机构110a确定存储子设备300中的未使用的队列资源311的队列id。队列管理机构110a生成包含相当于分配队列数631的未使用的队列id的队列id列表。然后,前进至步骤s313。

(s313)队列管理机构110a生成在队列组id601中设定队列id的追加对象的队列组id、在操作类型602中设定“追加”、在队列id列表603中设定步骤s312中生成的队列id列表的队列组操作命令600。然后,队列管理机构110a将该生成的队列组操作命令600对存储子设备300发送。由此,对id601的队列组追加队列id列表603中包含的队列id604。即,生成队列组id601。然后,前进至步骤s314。

(s314)队列管理机构110a从步骤s311中确定的队列分配管理列表的记录中,取得允许访问luid1015。然后,队列管理机构110a生成包含该取得的允许访问luid的luid列表。然后,前进至步骤s315。

(s315)队列管理机构110a生成在队列组id611中设定访问权的操作对象的队列组id、在操作类型612中设定“允许”访问、在luid列表613中设定步骤s314中生成的luid列表的访问权操作命令610。然后,队列管理机构110a将该生成的访问权操作命令600对存储子设备300发送。由此,允许从队列组id611对luid列表613中包含的luid614的访问。然后,前进至步骤s316。

(s316)队列管理机构110a将关于对队列组id追加队列id、和允许从队列组id对luid访问的变更内容反映至队列分配管理列表。然后,前进至步骤s317。

(s317)队列管理机构110a生成在分配队列数631中设定步骤s311中确定的分配队列数、在队列id列表633中设定步骤s312中生成的队列id列表的队列分配响应630。然后,队列管理机构110a将该生成的队列分配响应630对设备驱动程序230发送。然后,返回步骤s300。

通过以上处理,设备驱动程序230能够得知能够对自身分配的队列数。

<接受了队列释放请求640的情况>

(s321)队列管理机构110a从队列分配管理列表中确定具有该队列释放请求640的发送源的服务器id1011的记录。然后,队列管理机构110a生成在队列组id601中设定该确定的记录的队列组id1013、在操作类型602中设定“删除”的队列组操作命令600。然后,队列管理机构110a将该生成的队列组操作命令600对存储子设备300发送。然后,前进至步骤s322。

(s322)队列管理机构110a从队列分配管理列表中确定具有该队列释放请求640的发送源的服务器id1011的记录。然后,队列管理机构110a将该确定的记录中的已分配队列id1014全部删除。然后,返回步骤s300。

通过以上处理,能够将不需要的队列释放,重新利用。

<接受了第二队列生成请求680的情况>

(s331)队列管理机构110a基于第二队列生成请求680的条目数683,计算出队列id682的队列的长度。然后,队列管理机构110a在第一服务器装置200a的存储器220a中,获取该计算出的长度的存储区域。然后,前进至步骤s322。

(s332)队列管理机构110a生成在队列id654中设定第二队列生成请求680的队列id681、在基地址651中设定在上述存储器220a中获取的存储区域的地址、在条目数652中设定第二队列生成请求680的条目数652的第一队列生成请求650。然后,存储管理部100将该生成的第一队列生成请求650对存储子设备300发送。

(s333)队列管理机构110a从存储子设备300接受第一队列生成响应660时(是),前进至步骤s334。

(s334)队列管理机构110a生成在状态691中设定第一队列生成响应660的状态661、在基地址691中设定为了队列获取的基地址651、在门铃地址692中设定门铃用的存储区域的地址的第二队列生成响应690。然后,队列管理机构110a将该生成的第二队列生成响应690对设备驱动程序230发送。然后,返回步骤s300。

通过以上处理,生成队列。

<接受了队列删除请求670的情况>

(s341)队列管理机构110a将该队列删除请求670对存储子设备300转发。

(s342)队列管理机构110a从存储子设备300接受队列删除响应660时(是),前进至步骤s343。

(s343)队列管理机构110a将该接收的队列删除响应660对设备驱动程序230转发。然后,前进至步骤s344。

(s344)队列管理机构110a释放为了队列删除请求670的队列id654的队列获取的存储区域。然后,返回步骤s300。

通过以上处理,删除队列。

图17是表示存储子控制器310的动作例的流程图。

(s401)存储子控制器310从队列管理机构110a接受了管理命令的情况下(是),前进至步骤s402,并非如此的情况下(否),前进至步骤s440。

(s402)存储子设备300中,如果步骤s401中接受的管理命令是“访问权操作命令”则前进至步骤s410,如果是“队列组操作命令”则前进至步骤s420。

(s440)存储子控制器310从设备驱动程序230接收了i/o请求700的情况下(是),前进至步骤s441,并非如此的情况下(否),返回步骤s401。

<接受了访问权操作命令的情况>

(s410)存储子控制器310使用队列组表420,取得与访问权操作命令610的队列组id611对应的队列id比特串421。然后,前进至步骤s411。

(s411)存储子控制器310从访问权操作命令610的luid列表613中,选择1个尚未进行访问控制比特的变更处理的luid614。然后,存储子设备300使用该选择的luid614、访问权操作命令610的操作类型612(“允许”或“拒绝”)、和步骤s410中取得的队列id比特串421,将与该选择的luid614对应的acl410的全部访问控制比特一并变更。然后,前进至步骤s412。

(s412)存储子控制器310中,对于访问权操作命令610的luid列表613内的全部luid614,如果访问控制比特的变更处理已结束则返回步骤s401,如果剩余有尚未进行变更处理的luid614则返回步骤s411。

通过以上处理,能够将属于队列组的多个队列对于lu的访问权一并变更。由此,能够防止在访问权的变更途中、在队列组中允许访问的队列和拒绝访问的队列同时存在的问题。

<接受了队列组操作命令的情况>

(s420)存储子控制器310中,如果队列组操作命令600的操作类型602是“追加”(是),则前进至步骤s421,如果其操作类型602是“删除”(否),则前进至步骤s430。

(s421)存储子控制器310对于队列组表420,将与队列组操作命令600的队列组id601对应的全部比特初始化为“0”(拒绝)。然后,前进至步骤s422。

(s422)存储子控制器310在队列组表420中,将由队列组操作命令600的队列组id601、和队列id列表603中包含的各队列id604确定的比特变更为“1”(允许)。然后,返回步骤s401。

(s430)存储子控制器310从队列组表420中取得与队列组操作命令600的队列组id601对应的队列id比特串421。然后,前进至步骤s431。

(s431)存储子控制器310对于acl410中的全部luid的比特串,将与步骤s430中取得的队列id比特串的“1”对应的部分的比特变更为“0”(拒绝)。然后,前进至步骤s432。

(s432)存储子控制器310对于队列组表420中的、队列组操作命令600的队列组id601的比特串,将属于该队列组id601的队列id的部分的比特变更为“0”。另外,存储子控制器110从访问违例日志430中删除与队列组id601对应的记录。然后,返回步骤s401。

通过以上处理,基于来自队列管理机构110a的指示,变更队列组表420。

<接受了i/o请求的情况>

(s441)存储子控制器310从acl410中取得由i/o请求700入队的队列的id500和i/o请求700的luid705确定的访问控制比特。然后,前进至步骤s442。

(s442)存储子控制器310中,如果该取得的访问控制比特是“1”(允许)则前进至步骤s450,如果是“0”(拒绝)则前进至步骤s460。

(s450)存储子控制器310执行基于i/o请求700的操作类型701的处理(读处理、写处理等)。然后,前进至步骤s451。

(s451)存储子控制器310生成在状态711中设定“成功”的i/o响应710,将该i/o响应710对设备驱动程序230发送。然后,返回步骤s401。

(s460)存储子控制器310生成在状态711中设定“失败”、在错误信息712中设定“拒绝访问”的i/o响应710,将该i/o响应710对设备驱动程序230发送。然后,返回步骤s401。

通过以上处理,执行从设备驱动程序230发出的i/o请求。

实施例2

图18表示实施例2的计算机系统1b的硬件结构例。图19表示实施例2的计算机系统1b的逻辑结构例。

计算机系统1b具有服务器装置200c。服务器装置200c具有cpu210、存储器220和存储子设备300。这些要素经由pcie总线240可双向通信地连接。

在服务器装置200c的存储器220中,可以保存用于实现队列管理机构110b的程序、用于实现设备驱动程序230的程序。服务器装置200c可以具有用于实现vm201的虚拟化机构(例如虚拟机管理器(hypervisor))。虚拟化机构可以是程序,也可以是专用的硬件芯片。服务器装置200c能够使用虚拟化机构使1个以上vm201运行。各vm201可以具有虚拟的cpu211、虚拟的存储器221,运行客户os。

在vm201的存储器221中,可以保存设备驱动程序231。该设备驱动程序231可以具有与实施例1的设备驱动程序230同样的功能。对于各vm201,可以分配i/o队列500。

计算机系统1b能够使用与队列组520关联地将vm(客户os)的物理地址(guestphysicaladdress(gpa))对存储子设备300通知用的管理命令800。这是因为涉及vm201。

存储子设备300具有输入输出内存管理单元(input/outputmemorymanagementunit(iommu))330。iommu330可以具有参考gpa-hpa变换表列表331,将gpa与hpa相互变换的功能。

vm201的cpu211将i/o请求700入队至对该cpu211分配的队列500。vm201的cpu211在该i/o请求700的缓冲地址704中,设定vm201的存储器221的地址即gpa。gpa需要变换为服务器装置220c的存储器220的地址即主机物理地址(hostphysicaladdress(hpa))。iommu330具有将该gpa与hpa相互变换的功能。本实施例的iommu330具备在存储子设备300中,具有以队列组单位进行从gpa到hpa的变换的功能。

图20表示gpa-hpa操作命令800的结构例。

gpa-hpa操作命令800是用于支持按队列组单位从gpa到hpa的变换操作的命令。gpa-hpa操作命令800可以包含队列组id803、操作类型801、gpa-hpa变换表地址802作为项目值(字段值)。

队列组id803是该gpa-hpa操作命令800作为操作对象的队列组的id。操作类型801是表示对id803的队列组进行怎样的操作的信息。hpa-hpa变换表地址802是表示gpa-hpa变换表221的保存目标的地址。

接着,用图12说明实施例2的队列分配管理画面的例子。

实施例2的队列分配管理列表除了将服务器id1011改为vmid以外,可以具有与图12所示的队列分配管理列表相同的项目值(字段值)。vmid是vm201的id。从而,实施例2的队列分配管理画面可以是将图12的服务器id1011改为vmid的画面。

接着,用图13说明实施例2的访问违例显示画面的例子。

在实施例2的访问违例显示画面中,除了将服务器id1301改为vmid以外,可以显示与图13所示的访问违例显示画面1300相同的项目值。

图21是gpa-hpa变换表列表340的结构例。

gpa-hpa变换表列表340是将队列组与gpa-hpa变换表关联的列表。gpa-hpa变换表列表340可以具有队列组id、和保存了gpa-hpa变换表的起始地址作为项目值(字段值)。

与由vm201的cpu221入队至队列500的i/o请求700相关的缓冲地址704是gpa。从而,接受了该i/o请求700的存储子控制器310需要用例如以下(c1)至(c5)的处理将缓冲地址704(gpa)变换为hpa。

(c1)存储子控制器310确定取得i/o请求700的队列所属于的队列组id。

(c2)存储子控制器310从gpa-hpa变换表列表340取得与该确定的队列组id对应的gpa-hpa变换表的起始地址681。

(c3)存储子控制器310将缓冲地址704(gpa)、和该取得的gpa-hpa变换表的起始地址681对iommu330输入。

(c4)iommu330基于在该起始地址681中保存的gpa-hpa变换表,将输入的gpa变换为hpa,对存储子控制器310返回。服务器装置200c由intel公司制造的cpu和芯片组构成的情况下,可以基于非专利文献2中记载的规格进行gpa-hpa变换。服务器装置200c由amd公司制造的cpu和芯片组构成的情况下,可以基于非专利文献3中记载的规格进行gpa-hpa变换。

(c5)存储子设备300访问该取得的hpa。

接着,用图14和图15说明实施例2中的、在vm201中装载设备驱动程序231时和该设备驱动程序231卸载时的动作例。

实施例2的情况下,在图14的流程图中,省略与存储管理部100之间形成通信路径的步骤s100。另外,在图15的流程图中,省略删除该形成的通信路径的步骤s205。这是因为具有设备驱动程序231的vm201和存储管理部100实质上是在同一服务器装置200c中工作的程序,所以不需要形成通信路径。

接着,用图16说明实施例2的队列管理机构110b的动作例。此处,仅说明与图16所示的流程图不同的步骤,省略同样的步骤的说明。

<接受了队列分配请求620的情况>

代替步骤s311地,队列管理机构110b从事先设定的队列分配管理列表中,确定具有该队列分配请求620的发送源的vmid的记录。然后,队列管理机构110b对该确定的记录的最大队列数1012、与队列分配请求620的请求队列数621进行比较,将较小的一方确定为分配队列数。然后,前进至步骤s312。

在步骤s316之后,队列管理机构110b生成在队列组id803中设定访问控制对象的队列组id、在操作类型801中设定“追加”、在gpa-hpa变换表地址802中设定gpa-hpa变换表221的保存目标的起始地址的gpa-hpa操作命令800。然后,队列管理机构110b将该gpa-hpa操作命令800对存储子控制器310发送。然后,前进至步骤s317。

<接受了队列释放请求640的情况>

代替步骤s322,队列管理机构110b从队列分配管理列表中,确定该队列释放请求640的发送源的vmid的记录。然后,队列管理机构110b将该确定的记录的已分配队列id1014全部删除。然后,返回步骤s300。

<接受了第二队列生成请求680的情况>

队列管理机构110b不实施步骤s331。

<接受了队列删除请求670的情况>

队列管理机构110b不实施步骤s344。

接着,用图17说明实施例2的存储子控制器310b的动作例。此处,仅说明与图17所示的流程图不同的步骤,省略同样的步骤的说明。

在步骤s402中,存储子控制器310b中,如果步骤s401中接受的管理命令是gpa-hpa操作命令800,则前进至以下步骤s470。

<接受了gpa-hpa操作命令800的情况>

(s470)存储子控制器310b从该gpa-hpa操作命令800中,取得队列组id803、操作类型801、gpa-hpa变换表地址802。然后,存储子控制器310b在该取得的操作类型801是“追加”的情况下,将该取得的队列组id803与gpa-hap变换表地址802关联,追加至gpa-hpa变换表列表340。然后,返回步骤s401。

实施例3

图22表示实施例3的计算机系统1c的硬件结构的例子。图23表示实施例3的计算机系统1c的逻辑结构的例子。

计算机系统1c具有1个以上服务器装置200d、和存储子设备300。服务器装置200d可以具有cpu210、存储器220、主机总线适配器(hostbusadaptor(hba))340。这些要素可以经由pcie总线240可双向通信地连接。各服务器装置200d的hba340与存储子设备300可以经由网络250可双向通信地连接。网络250的例子是ethernet(注册商标)、光纤信道(fibrechannel)、和无限带宽技术(infiniban)。另外,网络250也可以是pcie总线。多个服务器装置200d能够访问1个存储子设备300。另外,在同一网络250内,可以存在多个存储子设备300。服务器装置200d能够使用虚拟化机构使1个以上vm201运行。vm201的结构可以与实施例2的情况相同。1个服务器装置200d内的多个vm201可以共享该服务器装置200d的hba340。

实施例3中,hba340可以具有访问控制器400。即,实施例3中,对于vm201的cpu211入队至队列500的i/o请求700的访问权,可以由hba340的访问控制器400判断。然后,hba340的访问控制器400判断允许该i/o请求700的访问的情况下,可以将与该i/o请求700对应的i/o请求900经由网络250对存储子设备300转发。hba340的访问控制器400判断拒绝该i/o请求的访问的情况下,可以不将与该i/o请求700对应的i/o请求900对存储子设备300转发。i/o请求700和i/o请求900可以是相同的i/o命令,也可以变换为别的方式。可以是关于i/o请求700的i/o命令遵循nvme规格,关于i/o请求900的i/o命令遵循scsi规格。

在网络250的途中,可以存在进行通路控制的交换机装置。另外,该交换机装置可以具有独立的访问控制功能。访问控制功能例如可以是对每个hba限制可用的网络带宽的功能、和限定可访问的存储子设备的功能(控制通路机构)等。

存储子设备300可以具有对于该存储子设备特有的访问控制功能。该访问控制功能可以是对每个网络连接口即targetbusadaptor(tba)350显示可访问的lu320、或者以hba340具有的id单位限制对lu320的访问的功能。

这些访问控制功能可以是与实施例2中叙述的按队列组单位的访问控制功能联动的结构。该情况下,队列管理机构110c可以对上述交换机装置和/或存储子设备发出队列组操作命令600、和访问权操作命令610。

接着,用图17说明hba340的访问控制程序400的动作例。此处,仅说明与图17所示的流程图不同的步骤,省略同样的步骤的说明。

在s450中,hba340的访问控制器400将i/o请求700变换为i/o请求900,对存储子设备300发送。

在s451中,hba340的访问控制器400从存储子设备300接受对于i/o请求900的i/o响应910之后,将该i/o响应910变换为i/o响应710。然后,将该i/o响应710对设备驱动程序231发送。

以上说明了几个实施例,但它们是用于说明本发明的举例,并不将本发明的范围限定于这些实施例。本发明也能够用其他各种方式执行。

符号说明

1:计算机系统,200:服务器装置,300:存储子设备,10:队列管理机构,230:设备驱动程序,310:存储子控制器,400:访问控制器,210:cpu核心,201:vm,320:lu。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1