著录项信息
专利名称 | 冗余存储虚拟化计算机系统 |
申请号 | CN200610003649.4 | 申请日期 | 2006-01-09 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2006-07-19 | 公开/公告号 | CN1804778 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F3/06 | IPC分类号 | G;0;6;F;3;/;0;6查看分类表>
|
申请人 | 普安科技股份有限公司 | 申请人地址 | 中国台湾台北县
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 普安科技股份有限公司 | 当前权利人 | 普安科技股份有限公司 |
发明人 | 周德成;黄威舜 |
代理机构 | 北京市柳沈律师事务所 | 代理人 | 吕晓章;李晓舒 |
摘要
本发明提供一种冗余存储虚拟化计算机系统,其包含有:一主机,用来发出输出入请求;一组冗余存储虚拟化控制器,耦接至该主机,用以执行输出入操作,以响应该主机所发出的输出入请求;以及多个实体存储装置,用来提供存储空间给该计算机系统。其中,每一个实体存储装置是耦接至该组冗余存储虚拟化控制器,该组冗余存储虚拟化控制器包含有一第一、与一第二存储虚拟化控制器,其皆耦接至主机,且第一、第二存储虚拟化控制器间是藉由PCI-Express连结进行通信,在该组冗余存储虚拟化控制器中,当其中一存储虚拟化控制器离线时,另一个存储虚拟化控制器将接替该离线存储虚拟化控制器原先所执行的功能。
技术领域\n本发明涉及一种冗余存储虚拟化计算机系统(redundant storage virtualization computer system),特别涉及一种利用本地总线(local bus) 作为二存储虚拟化控制器间连结的冗余存储虚拟化计算机系统。\n背景技术\n所谓存储虚拟化(storage virtualization)是一种将实体存储空间虚拟 化的技术,其是将实体存储装置(PSD,physical storage devices)的不同区 段结合成可供一主机系统存取使用的逻辑存储体(logical storage entity) -在此称为「逻辑媒体单元」(LMU,logical media unit)。该技术主要用于 磁盘阵列(RAID)存储虚拟化,经由此磁盘阵列的技术,可将较小实体存储装 置结合成为容量较大、可容错、高效能的逻辑媒体单元。\n存储虚拟化控制器(SVC,storage virtualization controller)的主要 目的是将实体存储媒体的各区段的组合映像(map)形成一主机系统可见的逻 辑媒体单元。由该主机系统发出的输出入(IO)请求在接收之后会先被剖析并 解译,且相关的操作及数据会被编译成实体存储装置的输出入请求。这个过 程可以是间接地,例如运用快取、延迟(如:回写(write-back))、预期 (anticipate)(如:先读(read-ahead))、群集(group)等操作来加强效能及其 它的操作特性,因而一主机输出入请求并不一定是以一对一的方式直接对应 于实体存储装置输出入请求。\n外部(或可称为独立式(stand-alone))存储虚拟化控制器是一种经由输 出入接口连接于主机系统的存储虚拟化控制器,且其可连接至位于主机系统 外部的装置,一般而言,外部存储虚拟化控制器通常是独立于主机进行运作。\n将一对存储虚拟化控制器配置成一冗余对的主要动机是为了即使是在单 一个存储虚拟化控制器发生故障或是失效的情形下,主机依旧可以连续不中 断地执行数据存取工作,此是可利用在此等存储虚拟化控制器中加入一功能 以使得其中一个控制器发生障碍或完全失能的情形下另一个控制器可接管其 工作而实现。\n冗余存储虚拟化控制器对的组态的分为两类,第一类是主动-待命模式 (active-standby),在此模式中,其中一个存储虚拟化控制器(一般称为主要 存储虚拟化控制器)对存储虚拟化子系统中的所有逻辑媒体单元的所有输出 入请求进行呈现、管理及处理,而另一存储虚拟化控制器(一般称作次要存储 虚拟化控制器)将仅是处于待命状态(stand by),而于主要存储虚拟化控制器 发生障碍或失能时,随时接替主要存储虚拟化控制器。第二种是主动-主动模 式(active-active),在此模式中,此两个存储虚拟化控制器同时对此存储虚 拟化子系统中的各种逻辑媒体单元的输出入请求进行呈现、管理及处理。在 主动-主动模式中,上述二存储虚拟化控制器一直都准备在另一个存储虚拟化 控制器因故障(malfunction)而导致发生障碍或失能的情况下接管对方。主动 -主动模式,通常提供较好的效能,因为其两个存储虚拟化控制器的资源(例 如:中央处理器(CPU,central processing unit)时间、内部总线频宽...等) 与单一存储虚拟化控制器相比可负荷较多的输出入请求服务。\n然不论是主动-被动模式或者是主动-主动模式,冗余存储虚拟化计算 机系统的一个基本功能就是在一存储虚拟化控制器发生状况时,另一个存储 虚拟化控制器得以接替(Take Over)发生状况的存储虚拟化控制器的工作, 例如:继续完成存取直接存取存储装置中的数据。因此要能建构冗余存储虚 拟化计算机系统,其存储虚拟化控制器间首先必须要能建立一个控制器间通 信信道(ICC,inter-controller communications channel),藉由此通信信 道得以传送信息;再者,每个存储虚拟化控制器亦必须得以随时知悉其同伴 的存储虚拟化控制器的目前工作信息,也就是说两控制器间其数据几乎必须 是同步且一致,如此才能于其同伴发生状况时得以接替其工作而实现冗余之 效。\n而对于建立控制器间通信信道此部分,目前一般是采用光纤信道仲裁循 环(FC-AL)或小型计算机系统接口(SCSI,parallel small computer system interface)或序列先进技术接取接口(SATA,serial advanced technology attachment)等通信连结,采用这些连结的主要因素是在于这些连结所具有的 支持长距离与可外接缆线而利于二独立装置间联机等特性。\n请参阅图1,主要显示一种现有冗余存储虚拟化系统的存储虚拟化控制 器的方块图。其中,第一存储虚拟化控制器100内是具有一冗余控制器通信 (RCC,redundant controller communication)连结控制器136,用以建立与 第二存储虚拟化控制器100’间的通信信道ICC。\n由于二控制器100,100’间的通信信道ICC是采用光纤信道仲裁循环 (FC-AL)或SCSI或SATA等通信连结,与控制器内电路所采用的本地总线 (local bus)不同,因此,在该控制器间通信信道(ICC)两端在这些控制器中 势必得设置一作为转换内部总线与该ICC外部连结接口或缓冲的RCC连接控 制器136,因此使得整体电路相形复杂,成本亦高。\n再者,对解决每个存储虚拟化控制器必须随时知悉其同伴(另一存储虚拟 化控制器)的目前工作信息以及维持两外部存储虚拟化控制器间数据同步且 一致的问题,原则上当存储虚拟化控制器的数据有所变化时,此变化就得让 其同伴知道,使二存储虚拟化控制器几乎可维持同步,进而一存储虚拟化控 制器发生状况时,另一存储虚拟化控制器得以在几乎没有数据时间差的情况 下完全成功接管。因此,在某些情况下在通信信道ICC上的数据传输系相当 频繁,无疑的将可能会加重存储虚拟化控制器内中央处理器的工作量,使得 其效能大幅受到影响,因此,如何处理通信信道ICC上的数据传输亦成为一 个很重要的课题。\n发明内容\n本发明的主要目的,在于提供一种得以简化电路、降低成本的冗余存储 虚拟化计算机系统。\n本发明是揭露一种计算机系统,包含有:一主机,用来发出输出入请求; 一组冗余存储虚拟化控制器,是用于执行输出入操作以响应主机发出的输出 入请求,其包括有耦接至主机的一第一与一第二存储虚拟化控制器,此第一 与第二存储虚拟化控制器间是利用一本地总线(local bus)进行通信;以及 一组实体存储装置,耦接于这些存储虚拟化控制器,是用来提供此计算机系 统存储空间;其中,当第一存储虚拟化控制器发生状况时,第二存储虚拟化 控制器将自动地接替发生状况的第一存储虚拟化控制器原先执行的功能。\n本发明亦揭露一种存储虚拟化子系统,包含有:一组冗余存储虚拟化控 制器,是用于执行输出入操作以响应一主机发出的输出入请求,其包括有用 来耦接至主机的一第一与一第二存储虚拟化控制器,此第一与第二存储虚拟 化控制器间是利用一本地总线(local bus)进行通信;以及一组实体存储装 置,耦接于这些存储虚拟化控制器,是用来提供计算机系统存储空间;其中, 当第一存储虚拟化控制器发生状况时,则第二存储虚拟化控制器将自动地接 替发生状况的第一存储虚拟化控制器原先执行的功能。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 第一与第二存储虚拟化控制器是位于同一电路板。依据实施例的一特色,前 述本发明的计算机系统或存储虚拟化子系统中本地总线连接二存储虚拟化控 制器的方式是为外接缆线或背板。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 本地总线是周边组件连结(PCI)总线、周边组件连结扩充(PCI-X)总线或周边 组件连结快捷(PCI-Express)总线。依据实施例的一特色,前述本发明的计 算机系统或存储虚拟化子系统中第一与第二存储虚拟化控制器各包括一本地 总线接口,用以建立第一与第二存储虚拟化控制器间的本地总线通信信道。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 前述的本地总线接口各位于一中央处理器芯片组,且利用二中央处理器芯片 组的至少一者的接脚设定来使得其中一本地总线接口去改变其操作模式,以 使二存储虚拟化控制器的本地总线接口之间得以建立联机。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 是利用软件来填写前述其中一本地总线接口的寄存器而使得该本地总线接口 去改变操作模式,以使这些存储虚拟化控制器的本地总线接口之间得以建立 联机。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 前述的本地总线接口更具有交叉连结的特征。\n依据实施例的一特色,前述本发明的计算机系统或存储虚拟化子系统中 前述其中至少一本地总线接口执行一自动转换机制,是利用交叉连结的特征 来转换接口的操作模式,以使第一与第二存储虚拟化控制器间能建立联机。\n另,本发明揭露有一种存储虚拟化控制器,包含有:一中央处理电路, 用以执行输出入操作以响应一主机的输出入请求,且可利用一本地总线耦接 于另一存储虚拟化控制器;至少一输出入装置连结控制器,耦接于中央处理 电路;至少一主机端输出入装置端口,设置在前述至少一输出入装置连结控 制器的一者中,用来耦接至主机;至少一装置端输出入装置端口,设置在前 述至少一输出入装置连结控制器的一者中,用来耦接至至少一实体存储装置; 以及一内存,是连接于中央处理电路,是用来缓冲传送于主机及实体存储装 置之间通过中央处理电路的数据。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,中央处理电路 包含有一中央处理器以及一中央处理器芯片组。此中央处理器芯片组是用以 做为该中央处理器与其它电子组件间的接口,包括有:一第一本地总线接口, 是经由该本地总线耦接于该另一存储虚拟化控制器;一内部主要总线,作为 该中央处理器芯片组内各主要电子组件间的通信连结,用以在其间通联数据 信号及控制信号;一中央处理器接口,用以耦接至该中央处理器与该内部主 要总线,作为该中央处理器与其它电子组件间的沟通接口;一内存控制器, 用以耦接至该内存与该内部主要总线,当该内存控制器接收到由该内部主要 总线传来的数据,会将这些数据存储在该内存中,该内存中的数据亦通过该 内存控制器传送至该内部主要总线;以及至少一第二本地总线接口,用以耦 接至该输出入装置连结控制器与该内部主要总线,做为该二者间的沟通接口。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,前述的中央处 理器芯片组更包括一寄存器,此寄存器归属于第一本地总线接口,且寄存器 内一存储空间是被规划定义作为该中央处理器写入与传输数据给另一存储虚 拟化控制器相关信息之用。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,前述寄存器是 位于第一本地总线接口或一位于该中央处理器芯片组的寄存器阵列之中。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,前述的第一本 地总线接口是周边组件连结快捷总线接口、周边组件连结扩充总线接口或周 边组件连结总线接口。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,是利用前述中 央处理器芯片组的接脚设定来使得前述的第一本地总线接口去改变其操作模 式,以使与另一存储虚拟化控制器相对应而得以建立彼此间的联机。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,是利用软件来 填写前述的第一本地总线接口的一寄存器而使得第一本地总线接口去改变操 作模式,以使与另一存储虚拟化控制器相对应而得以建立彼此间的联机。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,前述的第一本 地总线接口更具有交叉连结的特征。\n依据实施例的一特色,前述本发明存储虚拟化控制器中,前述的第一本 地总线接口是执行一自动转换机制,是利用交叉连结的特征来转换接口的操 作模式,以使与另一存储虚拟化控制器相对应而得以建立彼此间的联机。\n本发明进一步揭露一种建立存储虚拟化控制器之间的通信信道的方法, 包括以下步骤:存储虚拟化控制器通过作为控制器间通信信道端的本地总线 接口发送一包含其操作模式的信息的信息;存储虚拟化控制器中的至少一者 于通过本地总线接口接收到另一该存储虚拟化控制器的操作模式信息时,将 此所收到的操作模式信息与自己的操作模式进行比较以判断是否能建立联 机;若判断能建立联机,则建立二存储虚拟化控制器间的通信信道,而若判 断为无法建立联机,则存储虚拟化控制器中的至少一者将转换本地总线接口 的操作模式,以使与另一该存储虚拟化控制器的本地总线接口的操作模式相 对应,进而得以建立彼此的联机。\n依据实施例的一特色,前述本发明的方法中本地总线接口是PCI-Express 总线接口。\n依据实施例的一特色,前述本发明的方法中本地总线是具有交叉连结的 特征,且当该比较判断结果为无法建立联机,则存储虚拟化控制器是利用此 交叉连结的特征来转换通信接口的操作模式。\n依据实施例的一特色,前述本发明的方法中,比较判断结果为无法建立 联机后所执行的步骤中,包括有一撮合机制,以使这些存储虚拟化控制器间 通信信道两端的通信接口的操作模式彼此相对应,而得以建立联机。\n依据实施例的一特色,前述本发明的方法中前述撮合机制是包括以下步 骤:随机选定一计时临界参数值,接着启动计时;若在时间达到该临界值之 前,接收到对方新的操作模式信息显示其已改变操作模式,则完成撮合并建 立联机;若在时间达到该临界值时,且未收到对方操作模式已改变的信息, 则执行该转换操作模式步骤,且在转换完成后发送一含有新的操作模式状态 信息给对方;以及重新判断两者间的操作模式型态是否已不相同,若不相同 则撮合完成并建立联机,若相同,则重新执行该撮合机制,直到该撮合完成。\n依据实施例的一特色,前述本发明的方法中前述撮合机制所执行转换操 作模式的步骤中更包括以下步骤:若在执行转换操作模式时,接收到对方传 送的操作模式信息,则中止转换维持原先所设定的操作模式。\n依据实施例的一特色,前述本发明的方法中在前述中止转换前是先比较 对方的操作模式是否与转换前本身的操作模式不同,若是,才进行该中止转 换等步骤,否则则继续执行转换。\n本发明又更一步揭露一种在一计算机系统中存储虚拟化控制器间进行数 据传输的方法,包含以下步骤:A.一存储虚拟化控制器的中央处理器依据一 事先定义的数据传输协议格式(data-transfer-protocol format)对欲传输 给另一存储虚拟化控制器的离散数据(scattered data)建立至少一相对应的 离散聚集表(SG-list);B.中央处理器将存放离散聚集表的地址写入一寄存 器;以及C.一本地总线接口依据写入寄存器内的地址至一内存内读取离散聚 集表,并依据表中一离散聚集数据(scatter-gather data)所指示的地址至内 存内读取该离散数据,且通过一本地总线传送该离散数据给另一个存储虚拟 化控制器。\n依据实施例的一特色,前述本发明的方法中本地总线是周边组件连结总 线、周边组件连结扩充总线或周边组件连结快捷总线。\n依据实施例的一特色,前述本发明的方法中当中央处理器将存放离散聚 集表的地址写入寄存器后,寄存器是将地址信息传送至本地总线接口,并触 发本地总线接口执行该步骤C.。\n依据实施例的一特色,前述本发明的方法中,中央处理器是将存放离散 聚集表的地址写入寄存器中被定义作为写入存放离散聚集表地址之用的特定 地址的存储空间。\n依据实施例的一特色,前述本发明的方法中离散聚集表的数据传输协议 格式是包括以下字段:表内数据数量字段,用以指示表中内含的离散聚集数 据的数目;来源起始地址字段,用以指示每笔欲传输离散数据其所存放的内 存起始地址;数据长度字段,用以指示该每笔欲传输离散数据的长度;以及 目标起始地址字段,用以指示传输离散数据欲存放的目标地址。\n依据实施例的一特色,前述本发明的方法的步骤C.中本地总线接口执行 包括以下步骤:依据中央处理器所发送的信息至内存内将离散聚集表标头内 的控制信息读出,根据该离散聚集数据的数量依序往下读取该数量的该离散 聚集数据的控制信息;以及依据所读取到的每一笔离散数据中的来源起始地 址字段以及离散数据长度字段内容的指示,一一读取该笔离散数据,并将每 笔离散数据连同该笔离散数据的目标起始地址一起通过本地总线传输给另一 存储虚拟化控制器。\n依据实施例的一特色,前述本发明的方法中本地总线接口所读取的离散 数据是先暂存于一缓冲器,其后才连同目标起始地址一起传输出去。\n依据实施例的一特色,前述本发明的方法中本地总线接口在读取与传送 离散数据时,可因应缓冲器的实际容量将离散数据分批读取与传送。\n依据实施例的一特色,前述本发明的方法中更包括另一存储虚拟化控制 器的本地总线接口接收离散数据与目标起始地址,将离散数据存于目标地址 的内存内的步骤。\n依据实施例的一特色,前述本发明的方法中离散聚集表的数据传输协议 格式更包括一数据方向字段,用以指示执行写入或读取操作,使得本地总线 接口依据此字段内容进行相对应的存取操作。\n依据实施例的一特色,前述本发明的方法中在步骤C.的在该本地总线接 口执行完读取离散聚集表内容的步骤后,更包含有:依据数据方向字段的内 容执行相对应的写入或读取操作;若内容指示为执行写入操作,则执行前述 后续的依据离散聚集表各字段读取该离散数据与传输离散数据至该另一存储 虚拟化控制器的步骤;若内容指示执行读取操作,则将离散聚集表内至少部 分字段内容通过本地总线传输给另一存储虚拟化控制器;以及在收到另一存 储虚拟化控制器所传的该离散数据后,再依离散数据所相对应的目标起始地 址存入内存内。\n依据实施例的一特色,前述本发明的方法中的中央处理器芯片组是将整 个离散聚集表内容传输给另一存储虚拟化控制器。\n依据实施例的一特色,前述本发明的方法中更包括另一存储虚拟化控制 器的中央处理器芯片组接收离散聚集表内容后,依据来源起始地址字段以及 数据长度字段内容的指示,依序读取每笔离散数据,以及回传离散数据的步 骤。\n依据实施例的一特色,前述本发明的方法中离散聚集表的数据传输协议 格式更包括以下字段:第一中断字段,用以设定是否于完成此表内所列数据 传输后,中央处理器芯片组需产生一中断信号通知中央处理器;以及第二中 断字段,用以设定另一存储虚拟控制器在接收离散数据并完成相对应操作后, 产生一中断信号。\n依据实施例的一特色,前述本发明的方法中的步骤C.更包括有:中央处 理器芯片组将前述第二中断字段内容传送给另一存储虚拟化控制器;以及中 央处理器芯片组在完成离散聚集表内所指示的数据传输后,依第一中断字段 的指示来决定是否进行产生一中断信号至中央处理器的动作。\n依据实施例的一特色,前述本发明的方法中离散聚集表的数据传输协议 格式更包括下一个离散聚集表地址的字段,用以存放下一个离散聚集表所存 放的内存地址,以指示中央处理器芯片组在完成一离散聚集表内容所指示的 数据传输后,可依据该下一个离散聚集表地址的字段的内容,读取下一个离 散聚集表,进而连动继续处理。\n依据实施例的一特色,前述本发明的方法中包含有系统规划设定有一表 示无下一个离散聚集表存在的数值,当该下一个离散聚集表地址字段的内容 为该数值时,即显示无存在其它离散聚集表需要连动处理。\n依据实施例的一特色,前述本发明的方法中前述的表示无下一个离散聚 集表存在的数值是为0。\n依据实施例的一特色,前述本发明的方法中,在步骤A与B之间更包括 以下步骤:查核是否存在有尚未处理完的离散聚集表;若有,则进行一连动 程序,是将新建立的离散聚集表与前述尚未处理完的离散聚集表产生连动; 以及否则,执行步骤B。\n依据实施例的一特色,前述本发明的方法中,在进行连动程序之前更包 括以下步骤:中央处理器发送出一暂停请求给本地总线接口,用以请求暂停 传输数据至另一存储虚拟话控制器的相关动作;以及当本地总线接口收到该 暂停请求,是执行一暂停机制,并在完成暂停机制后,回复一暂停认可给中 央处理器;以及在进行连动程序之后更包括以下步骤:中央处理器通知本地 总线接口解除暂停状态;以及当本地总线接口收到该解除通知,是恢复所暂 停的动作,继续执行处理传送数据。\n依据实施例的一特色,前述本发明的方法中前述的暂停机制为将正在处 理的离散数据完成传送后暂停其后的各笔离散数据的读取传送动作,并纪录 暂停点以利取消暂停时可恢复接续处理。\n依据实施例的一特色,前述本发明的方法中前述的暂停机制为将正在处 理的离散数据表内的所有离散数据皆完成传送后暂停进入下一个离散聚集表 的动作。\n依据实施例的一特色,前述本发明的方法中前述的连动程序系包括:中 央处理器读取存于寄存器内的离散聚集表中下一个离散聚集表地址字段内的 地址数据;中央处理器依据所读取的寄存器内的地址,判断本地总线接口其 后是否有需接续处理的离散聚集表;若判断结果为无需接续处理的离散聚集 表,则更改寄存器内所存放下一个离散聚集表地址的字段内容为存放新建立 的第一个离散聚集表的起始地址;以及若判断结果为具有须接续处理的离散 聚集表,则更改这些尚未处理完的离散聚集表的一者的存放下一个离散聚集 表地址的字段内容,将其改为存放该新建立的第一个离散聚集表的起始地址, 且将新建立的离散聚集表中最后一者的存放下一个离散聚集表地址字段内容 设定与前述尚未处理完的离散聚集表的一者于未更改前的该存放下一个离散 聚集表地址字段内容一致。依据实施例的一特色,前述本发明的方法中前述 尚未处理完的离散聚集表的一者是指在该本地总线接口进行暂停机制时,存 储于寄存器内的离散聚集表。\n依据实施例的一特色,前述本发明的方法中前述尚未处理完的离散聚集 表的一者是指这些尚未处理完的连动离散聚集表中的最后一个离散聚集表。\n依据实施例的一特色,前述本发明的方法中包括建立一纪录有所有离散 聚集表所存放内存地址的表,用以供中央处理器查询欲更改存放下一个离散 聚集表地址的字段内容的尚未处理完的离散聚集表所存放的内存地址。依据 实施例的一特色,前述本发明的方法中中央处理器依据所读取的寄存器内的 下一个离散聚集表地址信息读取存于该地址内的离散聚集表的下一个离散聚 集表地址字段内容,依序重复之,直到读取到中央处理器欲更改存放下一个 离散聚集表地址的字段内容的尚未处理完的离散聚集表为止。\n依据实施例的一特色,前述本发明的方法中当中央处理器需对已建立的 离散聚集表进行调动时,是执行包括以下步骤:查核目前未处理完的离散聚 集表;以及判断其意欲调动的离散聚集表是否属于尚未处理完的离散聚集表 之中,若是则进行调动,否则,不进行调动。\n依据实施例的一特色,前述本发明的方法中是利用中央处理器读取存于 寄存器内的离散聚集表中下一个离散聚集表地址字段内的地址数据,以知悉 数据传输目前进度。\n依据实施例的一特色,前述本发明的方法终于进行调动之前更包括以下 步骤:中央处理器发送出一暂停请求给本地总线接口,用以请求暂停传输数 据至另一存储虚拟化控制器的相关动作;以及当本地总线接口收到该暂停请 求,是执行一暂停机制,并于完成暂停机制后,回复一暂停认可给中央处理 器;以及于进行调动之后更包括以下步骤:中央处理器通知本地总线接口解 除暂停状态;以及当本地总线接口收到该解除通知,是恢复所暂停的动作, 继续执行处理传送数据。\n本发明又再进一步揭露另一种在计算机系统中存储虚拟化控制器间进行 数据传输的方法,包含以下步骤:一存储虚拟化控制器的中央处理器是发送 一数据传输请求给一中央处理器芯片组;中央处理器芯片组内的一第一本地 总线接口是将请求转传给另一存储虚拟化控制器;以及另一存储虚拟化控制 器的中央处理器芯片组内的一第二本地总线接口接收到请求后进行相对应的 处理。\n依据实施例的一特色,前述本发明的方法中本地总线是周边组件连结总 线接口、周边组件连结扩充总线接口或周边组件连结快捷总线接口。\n依据实施例的一特色,前述本发明的方法中的中央处理器发送数据传输 请求的步骤包括:中央处理器传送数据传输请求给中央处理器芯片组中的一 中央处理器接口;中央处理器接口将数据传输请求放置在中央处理器芯片组 中的内部主要总线;以及由第一本地总线接口读取该数据传输请求。\n依据实施例的一特色,前述本发明的方法中数据传输请求是包括一写入 数据,以及一目标起始地址,该目标起始地址是为用以指示写入该写入数据 的内存地址,且该另一存储虚拟化控制器所进行的相对应的处理系包括:依 据该目标起始地址将该写入数据写入内存中。\n依据实施例的一特色,前述本发明的方法中数据传输请求内容包括有一 判别信息,使第一本地总线接口得以判别而读取该数据传输请求。\n依据实施例的一特色,前述本发明的方法中包含有:存储虚拟化控制器 是定义另一存储虚拟化控制器的实体内存地址以一虚拟内存地址形式表示, 使与其自己本身的实体内存地址不会重复,且该判别信息是为一内存地址, 该内存地址并以该虚拟化内存地址形式表示。\n依据实施例的一特色,前述本发明的方法中是采用直接接续本身实体内 存地址的方式去定义虚拟内存地址。\n依据实施例的一特色,前述本发明的方法中数据传输请求是包括一内存 地址,此内存地址是以虚拟化内存地址表示,以作为该判别信息。\n依据实施例的一特色,前述本发明的方法中包括第一或第二本地总线接 口接口是执行将前述内存地址转换为相对应的实体内存地址的步骤。\n依据实施例的一特色,前述本发明的方法中数据传输请求是包括存取指 令,用以指示进行写入或读取操作。\n依据实施例的一特色,前述本发明的方法中另一存储虚拟化控制器所进 行的相对应的处理是包括第二建立本地总线接口解读请求内的存取指令以进 行所指示相对应的操作。\n依据实施例的一特色,前述本发明的方法中数据传输请求是更包括一数 据长度,以及一数据来源起始地址,且另一存储虚拟化控制器所进行相对应 的处理是指依据此数据来源起始地址与数据长度至内存内读取数据并将数据 回传给第一本地总线接口。\n依据实施例的一特色,前述本发明的方法中更包括有:当第一本地总线 接口在收到另一存储虚拟化控制器的回传数据后是传送给中央处理器。\n附图说明\n图1为一传统冗余外部存储虚拟化控制器的方块图。\n图2为依据本发明的一存储虚拟化计算机系统的方块图。\n图3为依据本发明的一存储虚拟化控制器的方块图。\n图4为图3中所示的中央处理电路的一实施例的方块图。\n图5为图4中所示的中央处理芯片组/同位引擎的一实施例的方块图。\n图6为一存储虚拟化子系统自动转换机制的流程图。\n图7为一种单边自动转换机制的流程图。\n图8为另一种自动转换机制中存储虚拟化控制器端的流程图。\n图9为依据本发明的一种进行数据传送方法的流程图。\n图10为一种分散聚集表格式。\n图11为一进行数据传送的假设例。\n图12为另一进行数据传送的假设例。\n图13为再一进行数据传送的假设例。\n图14为又一进行数据传送的假设例。\n图15为另一种中央处理器进行数据传送的流程图。\n图16为图15中插入或接续连动程序的一实施例流程图。\n图17为图15中插入或接续连动程序的另一实施例流程图。\n图18为一本发明存储虚拟化控制器间传输小量数据的流程图。\n具体实施方式\n随着科技发展,本地总线(local bus)从周边组件连结(PCI,peripheral component interconnect)总线发展出周边组件连结扩充(PCI-X,peripheral component interconnect extended)总线,以及周边组件连结快捷 (PCI-Express)总线。\n而PCI-Express不同于其它的本地总线之处在于,其突破了以往本地总 线不能或有限制的于背板(backplane)上拉线,以及其电气特性所能传输的距 离有限等种种限制,PCI-Express接口不仅可外接揽线,以缆线方式进行联 机通信,且其电气特性亦可使传输距离达7公尺之远。\n请参阅图2,图2是为本发明的一实施例的方块示意图,此系统包含有 一主机10以及一存储虚拟化子系统20(SVS,redundant storage virtualization subsystem)。存储虚拟化子系统20包含有一组存储虚拟化 控制器(包括第一与第二存储虚拟化控制器(SVC1,SVC2)200,200’,与多个实 体存储装置420。其中存储虚拟化控制器200,200’可为一磁盘阵列控制器或 是一个JBOD仿真器。\n虽然图2中所示仅有一主机10与一存储虚拟化子系统20相互连接,实 际应用时可用多个主机10连接一个存储虚拟化子系统20,或是一主机10连 接多个存储虚拟化子系统20,或是多个主机10连接多个存储虚拟化子系统 20。主机10可为一主机计算机,如一服务器系统、工作站、个人计算机系统 或是其它相关计算机等,而且主机10也可为另一存储虚拟化控制器。\n此存储虚拟化子系统发结构,两个存储虚拟化控制器200,200’间设有 一控制器间通信信道ICC,用来互相交换信息。而此控制器间通信信道ICC 系为PCI-Express,在本实施利中采用PCI-Express的原因主要在于 PCI-Express其除可走背板外亦可外接缆线传输以及支持较远传输距离等特 征之故,因此就采用外部存储虚拟化控制器的设计来说是较为适用,使其一 存储虚拟化控制器发生问题(如:故障或失效)时,可在另一正常运作发存储 虚拟化控制器仍提供服务的状态下,对此发生问题的存储虚拟化控制器进行 维修或替换。然本发明应不受限于此,依据控制器发设计,凡控制器内电路 所采用的本地总线皆可适用,例如:就二控制器位于同一电路板的设计来说, 即可采用PCI或PCI-X等。\n在一实施方案中,在此存储虚拟化子系统20中的所有的实体存储装置 420可组合形成一实体存储装置阵列400。\n图3为本发明中连接至主机10及实体存储装置阵列400的存储虚拟化控 制器200,200’的一实施例方块图。在此处,是以第一存储虚拟化控制器 (SVC1)200为例说明,然实际上,第二存储虚拟化控制器200’亦相同之。此 实施例中,第一存储虚拟化控制器(SVC1)200包含有一主机端输出入装置连 结控制器220、一中央处理电路(CPC,central processing circuit)240、 一内存280以及一装置端输出入装置连结控制器300。此处虽以分开的功能 方块描述,但于实际应用时,部份甚至全部的功能方块(functional block) 皆可整合在一单一芯片上。\n主机端输出入装置连结控制器220连接至主机10及中央处理电路240, 用来作为第一存储虚拟化控制器(SVC1)200及主机10之间的接口及缓冲,其 可接收由主机10传来的输出入请求和相关数据,并且将其转换及/或映像至 中央处理电路240。主机端输出入装置连结控制器220可以包含有一或多个 用来耦接于主机10的主机端端口。此处所提及的端口的类型可以为:光纤信 道支持fabric连结(fibre channel supporting fabric)、点对点连结、公 用回路连结及/或专用回路连结于目标模式,操作于目标模式的并列小型计算 机系统接口(并列SCSI,parallel small computer system interface)、支 持因特网SCSI(iSCSI,internet SCSI)协议且操作于目标模式的以太网络, 操作于目标模式的序列附加SCSI(SAS,serial-attached SCSI),以及操作 于目标模式的序列先进技术接取接口(SATA,serial advancedt echnology attachment)。\n装置端输出入装置连结控制器300是为介于中央处理电路240及实体存 储装置阵列400间,用来作为存储虚拟化控制器200及实体存储装置阵列400 间的接口及缓冲。装置端输出入装置连结控制器300接收由中央处理电路240 传入的输出入请求及相关数据,并将其映像及/或传送至实体存储装置阵列 400。装置端输出入装置连结控制器300可以包含有一或多个用来耦接于实体 存储装置阵列400的装置端端口。此处所提及的端口的类型是配合系统所采 用的实体存储装置可以为:FC-AL、SCSI、序列附加SCSI(SAS, serial-attached SCSI)以及序列先进技术接取接口(SATA,serial advanced technology attachment)。\n再者,此处虽是以主机端与装置端分别设有相对应的输出入装置连结控 制器220、300为例,但在本发明的另一实施例中,可仅有一输出入装置连结 控制器,而令耦接于主机10的主机端端口与耦接于实体存储装置阵列400的 装置端端口皆设置在此输出入装置连结控制器中。当中央处理电路240接收 到来自主机端输出入装置连结控制器220的主机输出入请求时,中央处理电 路240会将此输出入请求剖析,并且执行一些操作以响应此输出入请求,以 及将所请求的数据及/或报告及/或信息,由第一存储虚拟化控制器200经由 主机端输出入装置连结控制器220传送至主机10。将主机10传入的输出入 请求剖析之后,若所收到的为一读取请求且一或多个操作被执行以为响应时, 中央处理电路240会由内部或由内存280中或藉由此二种方式取得所请求的 数据,并将这些数据传送至主机10。若所请求的数据无法于内部取得或并不 存在于内存280,该读取请求将会经由装置端输出入装置连结控制器300发 送至实体存储装置阵列400,然后这些所请求的数据将由实体存储装置阵列 400传送至内存280,之后再经由主机端输出入装置连结控制器220传送到主 机10。当由主机10传入的写入请求(write request)传达至中央处理电路240 时,在写入请求被剖析并执行一或多个操作后,中央处理电路240通过主机 端输出入装置连结控制器220接收从主机10传入的数据,将其存储在内存 280中。对于同步或异步装置操作两者,数据皆经由中央处理电路240传送 至实体存储装置阵列400。当该写入请求为一回写请求(writeback request), 输出入做完报告(IO complete report)会先被传送至主机10,而后中央处理 电路240才会执行实际的写入操作;而当该写入请求为一完全写入请求 (write through request),则输出入做完报告会在数据已实际写入实体存储 装置阵列400后才被传送至主机10。内存280是连接于中央处理电路240, 其作为一缓冲器,用来缓冲传送于主机10及实体存储装置阵列400之间通过 中央处理电路240的数据。实际应用时,内存280可以是动态随机存取内存 (DRAM,dynamic random access memory),或更特别地,该DRAM亦可为同步 动态随机存取内存(SDRAM,synchronous dynamic random access memory)。\n而在本实施例中,是将第一存储虚拟化控制器(SVC1)200的中央处理电 路240直接连接到第二存储虚拟化控制器(SVC2)200’的中央处理电路(图中 未示),即建构出第一存储虚拟化控制器(SVC1)200与第二存储虚拟化控制 器(SVC2)200’间的通信信道(ICC)。\n除此之外,装置端输出入装置连结控制器300是耦接至实体存储装置阵 列400,实体存储装置阵列400亦耦接至第二存储虚拟化控制器(SVC2)200’。\n在此一结构中,第二存储虚拟化控制器(SVC2)200’可附接于第一存储 虚拟化控制器(SVC1)200,且实体存储装置阵列400可被此两个存储虚拟化 控制器200所存取。更甚者,由主机10发出的控制/数据信号可从中央处理 电路240传送给第二存储虚拟化控制器(SVC2)200或更进一步地传送给一第 二实体存储装置阵列(图中未示)。\n请续参阅图3,在本实施例中,可在中央处理电路240上附接一箱体管 理服务电路360(EMS circuitry,enclosure management service circuitry),作为一容置实体存储装置阵列400箱体的管理电路,箱体管理 服务电路360用来控制该实体存储装置阵列的电源及进行其它的管理,以及 一液晶显示模块350(liquid crystal display module,LCD module),用 来显示子系统的操作状态。然而存储虚拟化子系统20亦有其它的配置方式, 例如可依各种不同产品的功能设计而定,而将箱体管理服务箱体管理服务电 路360或该LCD模块350省略,或是将箱体管理服务箱体管理服务电路360 整合在中央处理电路240中。\n请参阅图4,为中央处理电路240的一实施例,其中包含有CPU芯片组/ 同位引擎244(CPU chipset/parity engine),一中央处理器242(CPU),一只 读存储器246(ROM,read only memory)及一非易失性随机存取内存248 (NVRAM,non-volatile random access memory)。其中该CPU 242可为,例 如,一Power PC CPU,而ROM 246可为一闪存,用来存储基本输入/输出系 统(BIOS)及/或其它系统程序,而当开机时加以执行以控制子系统的操作。 NVRAM 248用来存储该实体存储装置阵列输出入操作执行状态的相关信息, 以备输出入操作尚未做完前发生不正常电源关闭时,作检验使用。ROM 246, NVRAM 248,LCD模块350及箱体管理服务电路360皆经由一X-总线(X-bus) 连结至CPU芯片组/同位引擎244。又,该NVRAM 248是为可选择项目,在本 发明的另一种配置中可以省略不设。且CPU芯片组/同位引擎244此处虽以整 合的功能方块描述,但于实际应用时,CPU芯片组与同位引擎可分开设置于 不同的芯片上。\n请续参阅图4,中央处理器242必须通过此CPU芯片组/同位引擎244才 得以与其它电子组件(如内存280等)相耦接。\n而图5即显示一本发明中CPU芯片组/同位引擎244的实施例。其中CPU 芯片组/同位引擎244包含有同位引擎260,CPU接口910,内存控制器920, 周边组件连结快捷(PCI Express)接口930,932,934,X-Bus接口940,传输 控制协议和互连网协议(TCP/IP,transmission control protocol/internet protocol)直接内存存取(DMA,direct memory access)980,仲裁者(Arbiter) 982,内部本地总线(IL,internal local)990及内部主要(IM,internal main) 总线950,其中IM总线950是连接至同位引擎260、CPU接口910、内存控制 器920、PCI-E接口930、932、934上,用以在其间通联数据信号及控制信号。\n由主机端输出入装置连结控制器220所发出的数据及控制信号经由 PCI-E接口930而进入CPU芯片组/同位引擎244。其中连结至主机端输出入 装置连结控制器220的PCI-E接口930的传输速率可为,举例而言, 1.5Gbit/sec。当PCI-E接口930拥有IM总线950(IM Bus)时,该数据及控 制信号将被传送至内存控制器920或是CPU接口910。\n当CPU接口910接收到由IM总线950传来的数据及控制信号,将会传送 至CPU 242进行进一步的处理,而CPU接口910及CPU 242间的沟通管道则 可为,举例而言,64-bit数据传输线及32-bit地址线来进行。\n在内存控制器920内是有一除错码产生电路(ECC circuit,error correction code circuit)(图中未示),用以产生一ECC码,而其产生的方 式可为,举例而言,将8-bit的数据以互斥或(XOR)运算后,产生一单一位的 ECC码。接下来,内存控制器920将数据及ECC码存储在内存280中。该内 存280可为,举例而言,SDRAM。而内存280中的数据亦可传送至IM总线950。 且内存控制器920可设计为,当数据从内存280传送至IM总线950时,内存 控制器920会对数据执行单一位自动修正(1-bit auto-correction)及多位检 错(multi-bit error detecting)等功能。\n同位引擎260会响应于CPU 242的指示,来执行一特定磁盘阵列型态的 同位功能。当然,在一些特定的条件下,比如说RAID0,同位引擎260可以 关掉而不执行同位功能。\nIL总线990(IL Bus)是连接于CPU接口910以及其它低速装置接口。\n寄存器阵列984(Reg.array)是用来暂存CPU芯片/同位引擎244的状 态,及控制IM Bus 950中的数据流动。此外,一对通用异步收发器 (UART,universal asynchronous receiver and transmitter,)功能方块986 则是用作CPU芯片/同位引擎244对外的接口,且该接口规格为RS232。\n而此CPU芯片组/同位引擎244则是藉由PCI-E接口932而与装置端输出 入装置连结控制器300连结。\nTCP/IPDMA980则用以执行总合检查(checksum)计算以及DMA操作的功 能。而仲裁者982则用以对IM总线950的使用权进行仲裁。\n而在本实施例中,若要从内存280传输数据至第二存储虚拟化控制器 200’时,则经由IM总线950进入PCI-E接口934后,藉由一PCI-E通信信 道,如:外部缆线(cable)或背板(backplane),即可直接与第二存储虚拟化 控制器200’中的PCI-E接口934’相耦接,其中无须像现有技术需再通过任 何中间转换缓冲接口(如:冗余通信连结控制器)。\n在实际应用时,PCI-E界面930,932可代换为周边组件连结扩充(PCI-X, peripheral component interconnect extended)接口,或者是以周边组件连 结(PCI)接口取代。\n而在子系统20启动电源时,每一存储虚拟化控制器的CPU芯片组会通过 其各PCI-E接口来进行了解外接于该控制器的装置为何以及是否正确建立联 机。而二装置间若要利用PCI-E接口建立PCI-E传输信道,则该二装置相连 的PCI-E接口的实体层模式(PHY-mode)必须分别操作于下游(down stream) 模式以及上游(up stream)模式,否则二者间将无法建立联机进行数据传输。\n一般而言,存储虚拟化控制器为主动组件,因此,其PCI-E接口的 PHY-mode是设定为down stream。\n但是,如前所述,二存储虚拟化控制器设置是为一致,也就是说,对二 存储虚拟化控制器而言,其建立二控制器间控制器间通信信道ICC的PCI-E 接口的PHY-mode皆被设定为down stream,如此一来,二控制器根本无法成 功建立联机。为解决此问题,在本实施例中,提出了一种转换机制使其中一 控制器可转为up stream,以能成功建立联机传输数据。\n请参阅图6,是为一种存储虚拟化子系统自动转换机制的流程图。其中 此自动转换机制是由存储虚拟化控制器内CPU芯片组的PCI-E接口执行。\n首先,二存储虚拟化控制器200,200’分别皆通过控制器间通信信道ICC 两端的PCI-E接口934发送一包含其PHY-mode信息的信息,因此该二存储虚 拟化控制器200,200’的PCI-E接口934可收到对方的PHY-mode信息(步骤 S810);\n比较二者的PHY-mode是否不同而能建立联机(步骤S820);\n若比较结果为另一存储虚拟化控制器的信息显示其PHY-mode与自己的 PHY-mode相同时,则将利用PCI-Express的cross link的特征改变PHY-mode, 并撮合使第一与第二存储虚拟化控制器间通信信道ICC两端的PCI-E接口的 PHY-mode,是分别操作于down stream以及up stream而得以建立联机(步骤 S830及步骤S840)。\n前述的撮合方式可藉由只允许其中一端的PCI-E接口可改变PHY-mode来 达成,也就是,当发生PCI-E接口所接收的信息显示另一端的PHY-mode与自 己相同时,只有其中一端的PCI-E会改变其PHY-mode。\n假设前述只允许单边转换是设定由第二存储虚拟化控制器来执行。当子系 统启动电源时,二存储虚拟化控制器分别皆通过控制器间通信信道ICC两端 的PCI-E接口发送一包含其PHY-mode信息的信息,因此,控制器间通信信道 ICC于第二存储虚拟化控制器的PCI-E接口将收到位于第一存储虚拟化控制 器内PCI-E接口的PHY-mode信息。请配合参阅图7,为第二存储虚拟化控制 器端的流程图。\n当第二存储虚拟化控制器的PCI-E接口收到第一存储虚拟化控制器 PCI-E的PHY-mode信息后,通过所接收的PHY-mode信息进而判断是否可建 立联机(步骤S410,S420);\n若第二存储虚拟化控制器的PCI-E接口在前述判断程序(步骤S420)中察 觉另一存储虚拟化控制器的信息显示其PHY-mode与自己的PHY-mode相同时, 则藉由PCI-Express的交叉连结(cross link)的特征改变其存储虚拟化控制 器之PHY-mode,并在转换后发送新的PHY-mode信息给第一存储虚拟化控制 器(步骤S430),进而进入建立联机程序(步骤S440)。\n而第一存储虚拟化控制器的控制器间通信信道ICC端的PCI-E接口则在 传送含有其PHY-mode为down stream等设定信息后,即等待直到接收到第二 存储虚拟化控制器的PCI-E接口通过ICC传送显示其PHY-mode为up stream 的信息,再根据这些信息内容建立二控制器间的联机。\n综前所述,此实施方案在该存储虚拟化控制器对中当发生有通信信道两 端的PHY-mode相同时,仅有一存储虚拟化控制器会利用cross-link转换其 PHY-mode,另外一存储虚拟化控制器并不会进行任何作动。即,此实施例中 该二存储虚拟化控制器的设计是不相同,故,二者所采用的CPU芯片组的IC 将会不同。\n亦即,前述的做法,该控制器必须得配对使用,以使得其间的通信信道 ICC得以正常联机。\n但是,在一些环境或状况下,会期望或要求形成该存储虚拟化控制器对 的二个存储虚拟化控制器所采用的立ICC通信接口其软硬件要一致。在此, 提出另一种自动转换机制,其中二存储虚拟化控制器的建立ICC的PCI-E接 口所执行的流程是相同,使能因应前述状况,图8即显示存储虚拟化控制器 端PCI-E接口所执行的一种实作方案流程图。\n首先,当存储虚拟化控制器的PCI-E接口接收另一连结端的信息时,将 解析以了解该连结端的状态(步骤S510),\n接着,比较该连结端PHY-mode与自身是否相同(步骤S520),若不同, 则直接进行建立联机程序(步骤S530);\n若,二者的PHY-mode相同,则进入一撮合程序S540;\n首先会随机(random)选定一参数T值(计时临界值),接着启动计时,以 了解是否达到该T值(步骤S542);\n其后,若在时间为达到该T值之前,接收到对方新的PHY-mode信息显示 其已改变PHY-mode(步骤S544),则结束撮合程序,进入建立联机程序(步骤 S530);\n而当迟迟未收到对方PHY-mode已改变的信息,且时间达到T值,如图 中所示,步骤S546判断时间t是否已达到T值,若t<T,则回去执行步骤S544, 否则,执行一转换PHY-mode程序(步骤S548),是利用cross-link将PHY-mode 由原先设定的型态转换为另一个型态,如:原先为down stream则转为up stream或将up stream转为down stream,且于转换完成后发送一含有新的 PHY-mode状态信息给对方;\n其后,回到步骤S520,确定两者间的PHY-mode型态是否已不相同而可 建立联机,若相同,则重新进到撮合程序S540,此时会再重新随机随机数选 取设定参数T。\n其中,在步骤S548执行完毕后尚须再回去进入步骤S520的原因,是在 于虽于执行转换前已判断两者PHY-mode是相同,但由于二存储虚拟化控制器 有可能发生同时执行cross-link改变PHY-mode的情况发生,在此种状况下, 二者间仍无法建立联机,因此,当转换完成后仍需判断二者间的PHY-mode是 否已不相同,确定撮合完成以确保可建立联机。而若发生二者同时执行改变 PHY-mode状况时,由于双方改变完后会发送显示新的PHY-mode状态信息给 对方,因此仍可藉此并经由步骤S520比较得知撮合未成功,因此得重新再撮 合一次。\n另外更可设计,在步骤S548执行转换过程中,加入,若接收到对方传送 的PHY-mode信息,则中止转换维持原先所设定的PHY-mode且跳至建立联机 程序(S530)的步骤。\n或者是,在步骤S548执行转换过程中,若接收到对方传送的PHY-mode 信息,则暂停转换,先了解对方的PHY-mode状态是否与本身执行转换步骤 S548前的PHY-mode不同,若是,则中止转换程序维持本身转换前的设定, 且直接跳至步骤S530建立联机程序,而若察觉对方的PHY-mode仍与自己转 换前相同,则继续完成转换。以避免在对方完成转换而与自己已不相同后, 自己又转换为与该对方一致而仍无法建立联机之情事。\n现举一实例进行说明,首先,在子系统启动电源时,二存储虚拟化控制 器其PCI-E接口皆会发送出一包含显示其PHY-mode为down stream等操作状 态的信息,其中当然包括用以建立控制器间通信信道ICC的PCI-E接口。\n而当二存储虚拟化控制器的PCI-E接口接收到对方所传送的信息时,会 解析以了解其PHY-mode,发觉其PHY-mode亦为down stream时,二者都会 进入撮合程序,各自随机选取一T值(假设第一存储虚拟化控制器选定为T1, 第二存储虚拟化控制器选定为T2),并开始计时,当达到该T值时,则进行 cross-link,由于T值是随机选取,因此绝大机率,二控制器会选定不同的 T值,即T1≠T2,而在选定较小T值的一方,则会先行进入转换程序,而将 PHY-mode转换为up stream,并且于转换后发送包含有新的PHY-mode的信息 给另一方,而由于另一方所选定的T值较大,因此当收到此对方所传送的新 PHY-mode的信息时,可能尚未达到其所选定的T值,或者是刚达到T值正在 执行转换PHY-mode程序。若为前者,则于收到对方已转换为up stream的信 息后,直接进入建立两者间的控制器间通信信道ICC的联机程序,若为后者, 则会中止转换维持原本down stream的PHY-mode,继而成功建立两者间的控 制器间通信信道ICC。例如:假设T1<T2,则第一存储虚拟化控制器会先进入 转换程序,而将PHY-mode转换为up stream,并且于转换后发送包含有新的 PHY-mode(up stream)的信息给第二存储虚拟化控制器,且由于第二存储虚拟 化控制器所选定的T2值较大,因此在第一存储虚拟化控制器完成转换程序 后,第二存储虚拟化控制器不是尚未开始转换就是转换到一半,因此第一存 储虚拟化控制器所知的第二存储虚拟化控制器仍处于down stram模式,故会 认为撮合完成而进入联机程序,另对第二存储虚拟化控制器来说,若在收到 此第一存储虚拟化控制器所传送的新PHY-mode的信息时,尚未达到其所选定 的T2值,由于第二存储虚拟化控制器是处于down stream,亦会进入联机程 序,因此,二者间可正确建立控制器间通信信道ICC,或者,第二存储虚拟 化控制器于收到第一存储虚拟化控制器新PHY-mode信息而得知其改为up stream时,是刚达到T2值正在执行转换PHY-mode程序,则第二存储虚拟化 控制器将会中止转换而维持原本down stream的PHY-mode,继而成功建立两 者间的控制器间通信信道ICC。\n而若不巧,两者所选定的T值相同,则可能发生二者同时完成转换程序 并传送新的PHY-mode信息,亦即在转换完成后双方都会收到对方PHY-mode 为up stream的信息,因此经过比较将得知双方的PHY-mode又相同,因此二 者将查觉撮合未成功,会再重新进入撮合程序,双方重新随机随机数选定T 值,只要所选定T值不同就可依前述成功建立联机。而由于每次协调撮合的 时间极短,加上由于T值是随机数选定因此二控制器持续不断皆选定相同T 值的机率几乎为零,因此,二存储虚拟化控制器在一短时间内必定可协调为 一个为down stream,另一个为up stream,成功建立控制器间通信信道ICC。\n请注意,本实施例中第一与第二存储虚拟化控制器所采用的操作流程是相 同(如图8所示),也就是说第一存储虚拟化控制器所采用的设计是与该第二 存储虚拟化控制器相同,因此本实施例是可使设计完全一致的二存储虚拟化 控制器间成功建立控制器间通信信道ICC。\n当然,二存储虚拟化控制器间要利用PCI-Express连结建立控制器间通 信信道ICC,除了前述由PCI-E接口自动转换进而建立联机的机制外,亦可 采用其它非由PCI-E接口自行完成的机制。例如:利用CPU芯片组/同位引擎 244的接脚(pin)设定来使得(选择或强迫)该PCI-E接口934变为up stream; 或者,利用软件来填写CPU芯片组/同位引擎244内的PCI-E接口934的寄存 器而使得(选择或强迫)PCI-E接口934的PHY-mode变为up stream。但此两 种方式,前者须人工到场设定,后者须软件检测来设定,可能造成时间上之 浪费,因此,较不理想。但就本发明的其它采用无cross link特征之本地总 线接口(如PCI接口)的实施例中,是较为适用。\n由于,存储虚拟化控制器在电源启动时即会利用对外的各连结接口发送 信息至外接于该控制器的各装置,并等待各装置的响应,以了解是否已顺利 建立联机以及各连结上所连接的装置为何。而原则上,整个系统于设计上, 除冗余存储虚拟化控制器对间的通信信道,其它控制器对外的通信信道所连 接的是为被动装置,因此其PHY-mode为up stream,因此存储虚拟化控制器 亦可利用在开机检测各连结接口联机状态时,藉由当得知所连结装置亦操作 于down stream时,判断该连结通道是为控制器间通信信道ICC。\n为了提高存储虚拟化控制器之中央处理器效能,请续参阅图9,本发明 提出一种进行数据传送的方法,包括:\n中央处理器是依据一事先定义的数据传输协议格式 (data-transfer-protocol format)对欲传送给另一存储虚拟化控制器的数 据,建立一相对应的离散聚集表(Scatter-Gather(SG)-list)(步骤S910);\n中央处理器发送一内含存放该SG-List地址的信息写至归属于此建立控 制器间通信信道的PCI-E接口的寄存器(register)(步骤S920);以及\n该PCI-E接口依据该寄存器的地址信息,读取该SG-List,并依据该 SG-List的内容至内存内读取欲传输的离散数据(scattered data),并将这 些离散数据通过控制器间通信信道ICC传送至另一个存储虚拟化控制器(步 骤S930)。\n上述归属于建立控制器通信信道的接口的寄存器,可设计为位于PCI-E 接口之中,亦可设计于一寄存器功能区块(如寄存器阵列)之中。\n在中央处理器对寄存器进行写入动作时,由于此寄存器是被设计归属于 该建立控制器间通信信道的PCI-E接口,因此该寄存器即会将该地址信息传 送给该建立控制器间通信信道的PCI-E接口,并且触发(trigger)该接口。\n在一实施例中,是规划定义此寄存器内某些特定地址空间,作为写入存 放SG-List的内存地址之用。如此设计,将使得当中央处理器对这些特定寄 存器地址写入存放此SG-List的内存地址时,此写入动作等同一个触发信号, 使寄存器得以去触发PCI-E接口内的引擎(engine)去执行数据传输相关程 序。依此种方式,中央处理器仅需将存放SG-List的内存地址写入这些特定 寄存器地址即可。\n请参阅图10,是提出本发明中有关SG-List格式的一个实施例。依照此 实施例,SG-List内容包含有:表内数据数量字段(list-entry-count),用 以指示表中内含的离散聚集数据(SG data)的数目;来源起始地址字段 (Source-base-Addr),指示每笔欲传输离散数据其所存放的内存起始地址; 数据长度字段(Data-Length),指示前述内存起始地址所存放的该笔欲传输离 散数据的长度;以及目标起始地址字段(Destination-Base-Addr),指示该笔 传输离散数据欲存放的目标地址;等等。\n当中央处理器将存放此SG-List的内存地址写入寄存器时,PCI-E接口 依据寄存器所指示的内存地址将该SG-List内的离散聚集数据读取出,并根 据该SG-List内前述所定义的各字段内的离散聚集数据进行作动,例如:依 据该中央处理器所写入寄存器的地址信息至该内存地址将标头内的控制信息 读出后,根据标头中表内数量字段内所指示的数量依序往下读取该数量的离 散聚集数据,而整个SG-List的信息将存于寄存器内,接着建立控制器间通 信信道的PCI-E接口依据每一笔离散数据的来源起始地址字段以及该离散数 据长度字段内容的指示,依序于读取该笔离散数据后连同该笔离散数据的目 标起始地址一起通过ICC传输给另一存储虚拟化控制器的建立控制器间通信 信道的PCI-E接口,当另一存储虚拟化控制器的建立控制器间通信信道的 PCI-E接口收到这些信息时,将依内容把这些离散数据存于目标地址内。\n且在SG-List内亦可再包括第一中断(INT)字段,用以设定是否于完成此 表内所列数据传输后,建立控制器间通信信道的接口需产生中断(interrupt) 信号;以及第二中断(Ints)字段,用以设定是否目的端(另一存储虚拟化控制 器)完成这些离散数据写入存储于各离散数据相对应的目标地址时,产生中断 (interrupt)信号通知自身(另一存储虚拟化控制器)的中央处理器。\n若系统事先定义的SG-List具有此等字段,则建立控制器间通信信道的 接口是会传送此第二中断字段内容,以使另一存储虚拟化控制器的建立控制 器间通信信道接口得依该字段之设定来作动,如:1为产生interrupt信号 给自身的中央处理器、0为不产生。且此建立控制器间通信信道的接口于完 成该SG-List内所指示的数据传输后,将依SG-List的第一中断字段的指示 来决定是否进行产生一interrupt信号至中央处理器的动作,如:1为产生、 0为不产生。\n此外,由于因为内存内空间配置等因素,可能发生无法使用单一SG-List 将所有离散聚集数据表列进入之情况,这时可利用数个SG-Lists来表列而解 决。请再参阅图10,于此一较佳的实施例中,前述SG-List的格式内尚具有 一个下一个SG-List地址的字段(Next-SG-List Addr.),用以指示下一个 SG-List所存放的内存地址,因此当建立控制器间通信信道的接口读取某一 SG-List的内容后,就可以依据该字段内容知道下一个要处理的SG-List存 放于何处,进而依据该地址读取下一个SG-List,使得这些SG-Lists之间可 以自动产生连带关系,而当无下一个SG-List时,则此字段将设定为0,如 此即可知道该SG-List为最后一个list。因此,中央处理器不必针对每一个 SG-List都要进行一次将该SG-List存放的地址写入寄存器之动作,只要将 第一个SG-List的地址写入寄存器,该建立控制器间通信信道的接口即会自 动完成所有有连带关系的SG-Lists。\n请参图11,显示一假设例。假设中央处理器接受一主机端所传送的请求, 该请求相关信息与数据通过CPU芯片组分散存放于内存中各处,中央处理器 依据这些信息与数据存放的内存地址与长度等,根据前述格式产生了四个 SG-List。\n如图所示,假设第一个SG-List所存放的地址为0000_0100。当建立好 这些SG-Lists后,CPU只需发送包含地址0000_0100的信息写至CPU芯片组 内被设定归属于该建立控制器间通信信道的接口的寄存器,,该建立控制器 间通信信道的PCI-E接口至内存地址0000-0100内读取SG-List内的信息, 取得控制信息(包括第一中断(INT)、下一个SG-List地址 (Next-SG-List-Addr.)、表内数据数量(list-entry-count)等字段),再依据 表内数据数量字段内所显示的数据的数量”2”,依序读取存于地址0000_0110 以及0000_0120等二地址内的信息(包括来源起始地址 (Source-base-Addr)、数据长度(Data-Length)、目标起始地址 (Destination-Base-Addr)等字段),而将第一个SG-List的内容都读入后, 接着依照第一笔离散数据存放的起始地址(1000_0000)与长度(0000_0010)至 内存内读取该笔离散数据至缓冲器(buffer)后,连同该笔离散数据欲存放的 目标起始地址(A100_0000)一起传送至另一存储虚拟化控制器,前述读取与传 送该笔离散数据时,可因应缓冲器的实际容量将该笔离散数据分批读取与传 送。接着依照前述方式依序完成读取与传送其后的每一笔离散数据(如:依据 存放第二笔离散数据的起始地址(1100_0000)与数据长度(0000_0020)至内存 内读取该第二笔离散数据至缓冲器(buffer),同样连同第二笔离散数据欲存 放的目标起始地址(A200_0000)传送至另一存储虚拟化控制器)。当完成此第 一个SG-List列入的所有离散数据的读取与传送动作后,而由于此第一个 SG-List的第一中断(INT)字段内为0,因此建立控制器间通信信道的PCI-E 接口不会发送interrupt信号通知中央处理器,即接着依据下一SG-List地 址(Next-SG-List Addr)字段内信息(0000_020)至内存地址为0000_0200读取 第二个SG-List,同样依据前述方式取得该第二个SG-List内的内容,且同 样依据前述方式完成其表内所列入的每笔离散数据的传输动作,接着同样依 据Next-SG-List Addr.内信息读取第三个SG-List,如此一一重复完成每一 个SG-List,直到SG-List内的Next-SG-List Addr地址设定为0000_000(第 四个SG-List)为止。而于此例中,由于只有第四个SG-List的第一中断(INT) 字段内容是为1,因此于完成第四个SG-List的传输动作后,建立控制器间 通信信道的PCI-E接口会产生一interrupt信号给中央处理器,因此中央处 理器可得知四个SG-List的数据已完成传送。\n利用前述方法,在执行冗余传输数据动作时,中央处理器只需维护 SG-List以及传送存放第一个SG-List Addr至CPU芯片组即可,而后所有读 取离散数据以及传送离散数据的动作将由CPU芯片组执行,几乎无需占用到 中央处理器的工作资源。\n再者,当建立控制器间通信信道接口于完成各传输数据操作后依照 SG-list内的INT字段设定回报给中央处理器,以使中央处理器可得知这些 离散数据已被成功传送至另一存储虚拟化控制器,而可让出该存放已完成传 输的SG-List的内存空间。此时可采用每完成一SG-List即回复中央处理器 的方式,即每一个SG-List的INT字段皆设为1;或者是所有连带的SG-List 都做完(即直到表内所显示的下一SG-List Addr地址为0000_0为止)才回复 中央处理器,如前假设例,只有最后一个SG-List的INT字段设为1,其它 的SG-List的INT字段皆设为0。前者的好处在于因为每做完单一SG-List 就先回复,因此内存空间可实时被腾出,使得在记忆空间的配置运用上提供 较好的弹性与效能。至于要采用何种回报方式是可由中央处理器依系统实际 状况决定。\n另外,一般而言,在冗余存储虚拟化计算机系统内,由于二存储虚拟化 控制器间必须维持几乎同步,故当一存储虚拟化控制器一有变化就须告知另 一存储虚拟化控制器,加上通常系统在运转时该IO操作是非常繁复的,因此 可能会持续有新的数据或信息需传送给另一存储虚拟化控制器的情事发生。\n以下提出一更佳的实施方法,是在前述再加入以下步骤:\n当建立控制器间通信信道的PCI-E接口在处理某一SG-List的同时,CPU 芯片组收到新的信息或数据进而使中央处理器依据这些信息或数据建立相对 应的新SG-List(s),则中央处理器可将该新的SG-List(s)插入或接续前旧有 尚未处理完的SG-List(s),例如:藉由更改PCI-E接口正在进行中的连带 SG-lists中内存内某一尚未处理到的SG-list的Next-SG-list Addr字段内 的数据或者是寄存器内接着要进行的Next-SG-List Addr.字段内的数据,将 其改为存放此新建立的SG-List(s)的起始地址,使得这前后SG-List(s)之间 也产生连动关系,令该PCI-E接口自动连动处理。\n进一步说明如下,请配合参阅图15,CPU芯片组在接收到新的数据并将 此新数据存入内存后通知中央处理器,中央处理器将对此等新的数据建立了 数个相互连带的新的SG-Lists(步骤S602)。\n接着中央处理器判断是否存有旧的SG-List(s)尚未处理完(步骤S604), 此步骤可藉由建立控制器间通信信道的PCI-E接口是否发送Interrupt信号 给中央处理器而得知,若中央处理并未收到Interrupt信号的话,中央处理 器知道其尚未完成传送前已触发待传送的离散数据。假设,若未存有尚未处 理完毕的旧SG-List,则将存放新建立的SG-List(s)的起始地址写入归属于 建立控制器间通信信道之接口的寄存器以启动建立控制器间通信信道的 PCI-E接口进行新数据的传送流程(步骤S606);\n而若尚有未处理完已存在的SG-List(s)时,中央处理器发送出一暂停请 求(Pause Req.)给建立控制器间通信信道的PCI-E接口,请求接口先暂停作 动(步骤S608)。当该接口收到该请求,将会于一适当时机执行一暂停机制, 暂停手上的动作,并于暂停后回复一暂停认可(Pause Gnt)给中央处理器。其 中暂停机制可例如:将正在处理的离散数据完成传送后暂停其后的各笔离散 数据的读取传送动作,并纪录暂停点以利取消暂停时可恢复接续处理,或者 将正在处理的SG-List内的所有离散数据皆完成传送后暂停进入下一个 SG-List的动作。\n在收到暂停认可回复后,中央处理器开始进行插入或接续连动程序(步骤 S610),主要是选定寄存器或者是前组SG-Lists中某一尚未处理的SG-List, 将新产生的SG-Lists中的最后一个SG-List的Next-SG-List Addr.设定与 寄存器或者是被选定的前组尚未处理的SG-List中原先所设定的 Next-SG-List Addr.一致,且将寄存器或者是内存内被选定的前组尚未处理 的SG-List内的Next-SG-List Addr.更改为新产生的SG-Lists所存放的起 始地址(存放第一个SG-List的地址),即完成新产生的SG-Lists插入前组 SG-List的动作,而令两组SG-Lists间发生连动。\n当使新产生的SG-List(s)与已存在待处理的SG-List间完成连带关系 后,接着通知建立控制器间通信信道的PCI-E接口解除暂停状态,则建立控 制器间通信信道的接口会恢复所暂停的动作,并继续依照新的连带关系自动 连动处理。(步骤S620)\n前述在中央处理器进行两组SG-Lists连动前,需发送暂停请求的原因是 在于防止中央处理器在更改内存内某一SG-List或寄存器内Next-SG-List Addr.字段内的信息的同时,该建立控制器间通信信道的PCI-E接口亦读取该 SG-List的内容而发生冲突引发错误。\n以下就插入或接续连动程序(S610)进行说明。请参阅图16,为一种插入 或接续连动程序的实施例。在此实施例中,是采用新产生的SG-List(s)直接 插入寄存器正在处理的SG-List之后的方式。\n由于建立控制器间通信信道的接口在要执行某一SG-List时,会先取得 SG-List的内容,故在发生前述状况时,中央处理器可藉由读取寄存器内所 存放有关Next-SG-List Addr.字段内的信息得以知道PCI-E接口是否有下一 个SG-List要处理或者是下一个要处理的SG-List存放于何处等信息。因此, 如图16所示,在中央处理器进行插入或接续连动的程序的第一个步骤是,中 央处理器先读取寄存器内正在处理的SG-List中的Next-SG-List Addr字段 内的地址数据(步骤S612),而在获得此PCI-E接口原本会进行的 Next-SG-List Addr.信息后,其直接将新产生的SG-Lists中的最后一个 SG-List的Next-SG-List Addr.设定与前所读取到的寄存器中原先所设定的 Next-SG-List Addr.一致,且将此寄存器内的Next-SG-List Addr.更改为新 产生的SG-Lists所存放的起始地址(存放第一个SG-List的地址),即完成新 产生的SG-Lists插入前组SG-List的动作,而令两组SG-Lists间发生连动 (步骤S614)。也就是说,将新产生的SG-Lists直接插入在该接口原本要接 着正在处理的SG-List之后待处理的SG-List之前,并在完成后面新产生的 SG-Lists相对应的数据传送后,会再跳回接续插入点原本会接续的前组尚未 完成的SG-List(s)。当然,若插入点刚好是在前组SG-List(s)的最后一个 SG-List之后(读取到的寄存器内的Next-SG-List Addr.为0000_000),则就 不会再跳回接续前组未完成的SG-List(s),因为并没有前组未完成的 SG-List(s)存在。\n以前述图11为例,并请再配合参阅图12。首先如图11所示,中央处理 器依所欲传送给另一个存储虚拟化控制器(同伴)的离散数据的存放地址建立 有相互连动的四个的SG-Lists,且将含有存放第一个SG-List的地址信息写 入作为控制器间通信信道的PCI-E接口的寄存器,该接口依寄存器的地址信 息读取该SG-List内容,并执行读取与传送数据等动作。\n另外,CPU芯片组又接收到新的数据并将此新数据存入内存后通知中央 处理器,中央处理器同样对此等新的数据建立了数个相互连动的新的 SG-Lists(请参图12),以使此数据可传送给其同伴备存时,请注意,与图11 一样,此处虽以产生多的SG-List以及多笔离散数据为例,但同样的实际上 因数据量与内存空间配置等因素亦可能只产生一个新的SG-List或单笔离散 数据内容。\n若在中央处理器建立好新数据相对应的SG-Lists(如图12所示)时,该 建立控制器间通信信道的PCI-E接口尚未处理完图11的四个SG-Lists,此 时,中央处理器发送出一暂停请求(Pause Req.)给此接口,请求先暂停进入 处理下一个SG-List的动作,当该接口收到该请求,将会执行一暂停机制, 暂停手上的所有动作,并回复一暂停认可(Pause Gnt)给中央处理器。在收到 暂停认可回复后,中央处理器开始进行连动程序,中央处理器读取寄存器内 有关Next-SG-List Addr.字段内的信息。\n假设,此时该接口是正在处理图11中的第二个SG-List,则中央处理器 所读取到的地址信息将会是0000_040。接着中央处理器将图12中最后一个 SG-List的Next-SG-List Addr.字段设定为0000_040,并将此寄存器内的 Next-SG-List Addr.改为0000_050(图12中第一个SG-List所存放的地址), 则完成将新产生的SG-List(如图12中所示)插入于图11所示的第二个跟第 三个SG-List之间的动作。\n而若前述在收到中央处理器发送的暂停请求时,建立控制器间通信信道 的接口正好处理图11中的第四个(最后一个)SG-List,则中央处理器所读取 到的寄存器内的Next-SG-List Addr.会是0000_000,则图12所示的新产生 的最后一个SG-List内的Next-SG-List Addr.就不用更改仍然设定为 0000_000(请注意,仍然与所读取到的寄存器内的Next-SG-List Addr.一致), 而将寄存器内的Next-SG-List Addr.改为改为0000_050(图12中第一个 SG-List所存放的地址)即可。\n在完成连动程序后,中央处理器接着发送解除暂停状态的通知给该建立 控制器间通信信道的接口,使接口解除暂停机制,接续暂停机制前的作动, 并于处理完暂停当时的SG-List后,就会接着依照其暂停期间中央处理器所 写入的Next-SG-List Addr.去读取新产生的第一个SG-List,且依照新产生 的连带关系一一进行所有待处理的SG-List(s)相对应的数据传送。\n再请参阅图17,显示另一种插入与接续连动程序的实施例。与图16不 同,本实施例所选择的连动插入点是为建立控制器间通信信道的接口尚未处 理到的SG-List(s)之间或之后。\n如同图16,在中央处理器进行插入连动的程序的第一个步骤仍然是,中 央处理器读取寄存器内正在处理的SG-List中的Next-SG-List Addr字段内 的地址数据(步骤S612),接着中央处理器会判断寄存器内的地址是否为 0000_000,以了解其后是否有需接续处理的SG-List(s)(步骤S616);若该地 址被设定为0000_000,则表示其并没有下一个要接续处理的SG-List,故, 中央处理器只需将寄存器内的Next-SG-List Addr.改为新产生的SG-List(s) 的第一个SG-List所存放的地址(步骤S617),即可完成两组SG-Lists间的 连动。\n若该寄存器的Next-SG-List Addr.并非为0000_000,则表示其后尚有原 本设定好要接续处理但未处理的其它SG-List(s),此时,中央处理器可选定 其后一尚未处理的SG-List来进行插入动作。读取内存中所选定的SG-List 内的Next-SG-List Addr.,将新产生的最后一个SG-List的Next-SG-List Addr.设定与前述所读取者一致,接着将内存中该选定的SG-List内的 Next-SG-List Addr.改成新产生的第一个SG-List所存放的地址,即完成连 动程序(步骤S618)。\n例如,中央处理器选择前组SG-Lists中的最后一个SG-List来进行连动, 由于,前组最后一个SG-List原始设定的Next-SG-List Addr.与新产生的最 后一个SG-List的Next-SG-List Addr.本来就是一致的(皆为0000_000),因 此只需更改此前组SG-Lists中的最后一个SG-List的Next-SG-List Addr. 为新产生的SG-List(s)所存放的起始内存地址,即完成此两组SG-List的连 动。在此种情况下,在解除暂停状态后,建立控制器间通信信道的PCI-E接 口在处理传送完前组SG-List(s)后才会自动接续处理新产生的SG-List(s)。 也就是采用新产生的SG-List(s)是接续前SG-List(s)之后的插入连动的方 式。而要找到前组SG-Lists中的最后一个SG-List,可以利用建立一存有所 有SG-List所存放的内存地址的表,利用该表来查询取得,或者依据所读取 的寄存器内的Next-SG-List Addr,的地址信息至该地址读取存于该地址内的 SG-List的Next-SG-List Addr.,若此Next-SG-List Addr.仍未为0000_000, 则再依序向下读取下一SG-List的Next-SG-List Addr.直到该Next-SG-List Addr.为0000_000为止。\n同样以图11与图12为例,同样假设建立控制器间通信信道的接口进行 到图11中的某个SG-List时收到中央处理器所传送的暂停请求,寄存器将执 行暂停机制,并于完成后传送一暂停认可给中央处理器。接着中央处理器读 取寄存器内的Next-SG-List Addr.,若寄存器内的Next-SG-List Addr.为 0000_000,如:建立控制器间通信信道的接口正在进行处理图11内的第四个 SG-List,则此时,将寄存器内的Next-SG-List Addr.由0000_000改为如图 12所示欲连动处理的SG-Lists中第一个SG-List所存放的地址(0000_050), 即可将此两组SG-List连动在一起,接着触发建立控制器间通信信道的PCI-E 接口解除暂停状态,则该接口接续暂停机制前的动作继续做动,并于处理传 送完该前组第四个SG-List内的三笔离散数据后,依寄存器内的 Next-SG-List Addr.字段内的地址(0000_050),接着处理图12中新产生的的 SG-Lists。\n而若所读取到的寄存器内Next-SG-List Addr.非为0000_000,例如: 若当建立控制器间通信信道接口正在处理且暂停在图11所示的第二个 SG-List,寄存器中Next-SG-List Addr.字段内的信息为0000_040,故中央 处理器读取该字段信息可知PCI-E接口尚未处理但接着会处理的SG-List存 放的地址为0000_040。接着中央处理器可依状况或系统设定选定欲插入点。 举例,选定插入在最后一个SG-List之后。则可利用中央处理器至0000_0400 内存地址内取得第三个SG-List的Next-SG-List Addr.为0000_030,因为并 非0000_000,因此接着又至0000_0300内存内取得第四个SG-List的 Next-SG-List Addr.,因为其为0000_000,表示接下来没有连动的SG-List, 在找到此最后一个SG-List后,更改其Next-SG-List Addr.由原本为 0000_000改为图12所示的第一个SG-List所存放的地址0000_050,使得该 两组SG-Lists产生一连动关系(如图13所示),而后通知建立控制器间通信 信道接口解除暂停状态,使得建立控制器间通信信道接口继续依序完成每个 SG-List相对应的数据传送动作。亦就是,建立控制器间通信信道接口接续 暂停机制前的动作继续做动,在处理完前组SG-Lists中的第二个SG-List后, 仍然依序处理前组SG-Lists中第三个SG-List与第四个SG-List,并且在处 理完前组SG-Lists的最后一个SG-List(存放地址为0000_0300的第四个 SG-List)后,会自动继续处理后组SG-Lists,而无需中央处理器发送任何信 息。\n或者,选定建立控制器间通信信道接口下一个要处理的SG-List之后插 入。则中央处理器亦利用所读取的寄存器内Next-SG-List Addr.(0000_040), 至该内存地址0000_0400内取得该Next-SG-List Addr.为0000_030,更改内 存中此字段内容为图12所示新产生的SG-Lists的第一个SG-List所存放的 地址0000_050,且将图12所示新产生的SG-Lists的最后一个SG-List的 Next-SG-List Addr.字段填入前述读取插入处的Next-SG-List Addr.(0000_030),使得该两组SG-Lists产生一连动关系(如图14所示)。而 后同样中央处理器通知建立控制器间通信信道接口解除暂停状态,使得建立 控制器间通信信道接口继续依序完成每个SG-List相对应的数据传送动作。 亦就是,建立控制器间通信信道接口接续暂停机制前的动作继续做动,并且 在处理完原本建立控制器间通信信道接口后面就会接续处理的SG-List(图 11中的第三个SG-List)后,将先自动跳处理插入的SG-Lists,而后才会再 跳回处理前组的最后一个SG-List(存放地址为0000_0300的第四个SG-List) 后,而无需中央处理器发送任何信息。\n当然除了最后一个或后一个SG-List可选为插入点,所选定的插入点亦 可以是其后待处理的第二个或第三个等等的SG-List,只要不超过最后一个 即可。如前等实施例,当产生需传送的新数据时,只要建立控制器间通信信 道接口正在处理传送某一群组的数据,利用前述机制即会使新旧数据间产生 一连动关系,令中央处理器不用等到建立控制器间通信信道接口回报旧数据 已完成传送后再写入新数据的SG-List(s)的起始地址至寄存器进而触发建立 控制器间通信信道接口,建立控制器间通信信道接口即会自动处理传送此笔 新数据。且由于理论上,在子系统运作上,存储虚拟化控制器会不断有数据 需传送给其同伴(另一存储虚拟化控制器)备存,也就是在前一笔甚至是多笔 数据尚未完全传送给同伴时就会有新数据产生,因此,就前述机制而言,中 央处理器只需建立与维护数据相对应的SG-List(s)以及以系统启动后所产生 的第一个SG-List的存放地址写入建立ICC的建立控制器间通信信道接口的 寄存器,其后该建立控制器间通信信道接口即持续不断在读取与传送数据, 将有效大幅分担中央处理器之工作,进而提升中央处理器的工作效能。\n再者,当中央处理器于发生需要整合或修改或删除某SG-List(s),如同 前述插入或接续连动程序,中央处理器可藉由读取寄存器内所存放有关 Next-SG-List Addr.字段内的信息得知PCI-E接口是否有下一个SG-List要 处理或者是下一个要处理的SG-List存放于何处等信息,也就是,中央处理 器可藉此了解有那些SG-List是建立控制器间通信信道接口尚未处理。因此, 中央处理器可判断其意欲整合或修改或删除的某SG-List(s)是否为建立控制 器间通信信道接口尚未处理的SG-List(s),若是的话,则中央处理器可对该 SG-List进行整合或修改或删除等动作。\n当然,在中央处理器进行前述的修改或删除程序时,在读取寄存器内信 息前,同样可利用发送暂停请求要求建立控制器间通信信道接口先暂停手上 与传送冗余数据相关的动作,并于收到暂停认可后才进行读取动作,以避免 因建立控制器间通信信道接口持续进行传送工作而与中央处理器其后的修改 或删除动作发生冲突的情事。而同样的在中央处理器结束完整个修改或删除 的程序后要通知建立控制器间通信信道接口解除暂停状态,以使其继续作动。\n另外,在中央处理器可依实际状况结合前述的插入或接续连动程序与修 改或删除程序,例如:在前述说明插入或接续连动程序的一假设例(图13)中, 当中央处理器去更改内存内第四个SG-List的Next-SG-List Addr.字段数据 为欲接续处理的新产生的SG-List(s)的起始地址时,可同时以依实际需要(例 如:CPU欲设定建立控制器间通信信道接口在整个新连带关系的SG-Lists皆 做完时才产生interrupt信号通知CPU),去更改该SG-List的Int字段的设 定,而将此字段数据改为0,则建立控制器间通信信道接口在完成此第四个 SG-List后将不会发送Interrupt信号至中央处理器。或如:在进行修改该 或删除程序时,亦可依当时状况或需求,利用更改尚未被建立控制器间通信 信道接口读取处理的SG-Lists的Next-SG-List Addr.即可重新设定这些尚 未处理到的SG-Lists之间的连带关系。\n而除了前述传送数据至另一存储虚拟化控制器进而存入其内存的方法 外,若系统系被设计一存储虚拟化控制器可对冗余配置的另一存储虚拟化控 制器的内存进行存取(写入/读取)操作时,则该SG-List内尚有一数据方向 (Dir)字段,用以指示执行写入或读取操作,例如:1为写入(Data Out),0 为读取(Data In)(请参阅图10)。\n因而,中央处理器将存放此SG-List的内存地址写入寄存器,建立控制 器间通信信道的接口即依据寄存器所传送的地址信息将该SG-List内的数据 读取出,并根据前述所定义的各字段内的指示信息进行作动。\n若Dir字段是被设定指示进行写入操作,则该接口是可依前述各例所述 依据每一笔离散数据的来源起始地址字段以及该离散数据长度字段内容的指 示,依序于读取该笔离散数据,而后将该笔离散数据、该笔离散数据的目标 起始地址以及指示进行写入操作的指令一起通过控制器间的通信信道传输给 另一存储虚拟化控制器的建立控制器间通信信道接口。\n而若为读取操作,在一实施例中,该建立控制器间通信信道接口可将该 SG-List内容传送给另一存储虚拟化控制器的建立控制器间通信信道接口, 该另一端接口接收并存入寄存器后,依据每一笔离散数据的来源起始地址字 段以及该离散数据长度字段内容的指示,依序读取每笔离散数据,而后将离 散数据与离散数据相关的信息(如:目标起始地址、数据长度)回传给建立控 制器间通信信道接口,该接口再依目标起始地址将数据存入内存中。在另一 实施例中,是非将整个SG-List的内容都传送给另一端,而是只传送SG-List 内与每笔离散数据相关字段数据,甚且是分批传送每笔离散数据相关字段数 据(例如:来源起始地址以及数据长度),传送时可带有一指示进行读取操作 的指令,而在收到另一端所回传依照来源起始地址与数据长度取得的离散数 据后,再存入该笔离散数据的目标起始地址。最后,就存储虚拟化控制器之 间小量数据的传递来说,本发明是提出另一种进行数据传送的方法,使能更 为提高存储虚拟化控制器的整体效能。\n请参阅图18,显示本发明所提出的另一种在二存储虚拟化控制器间传送 数据的方法。当二存储虚拟化控制器间协调建立通信信道后(步骤S702),若 其中一存储虚拟化控制器之中央处理器有需传递给另一者的信息时,中央处 理器是将直接发送数据传输请求信息至CPU芯片组(步骤S704),此CPU芯片 组将响应此信息而将需传递的信息传送给另一存储虚拟化控制器(步骤 S706),而由另一存储虚拟化控制器内的CPU芯片组接收并直接处理。\n请再配合图5,依据此本发明所提出的方法,当中央处理器242需传送 信息给第二存储虚拟化控制器时,其中一种传递数据传输请求信息的实作方 式是为中央处理器242将欲传送至另一端的信息通过CPU接口910而至IM BUS 950,并由建立控制器间通信信道ICC的PCI-E接口934读取而传送至第二存 储虚拟化控制器200’。此外,当一存储虚拟化控制器(例如:第一存储虚拟 化控制器)的PCI-E接口934接收到另一存储虚拟化控制器(如第二存储虚拟 化控制器)所传送的信息,则通过IM BUS950而送至内存控制器920,进而存 入内存280内。\n以下提出一实施例来进一步说明。首先,设定就每一存储虚拟化控制器 而言,是将冗余配置的另一存储虚拟化控制器的内存视为本身内存的延伸。 假设第一存储虚拟化控制器与第二存储虚拟化控制器的内存空间皆为2G时, 每一存储虚拟化控制器的实体内存地址设为0000_0000-7FFF_FFFF,而将 冗余配置的另一存储虚拟化控制器的内存地址是视为8000_0000- FFFF_FFFF。在本例中是采用将另一存储虚拟化控制器的内存地址直接接续本 身内存地址,亦即,一存储虚拟化控制器是将冗余配置的另一存储虚拟化控 制器实体内存地址P视为虚拟内存地址2G+P。然实际上亦可采用非直接接续 的方式,例如:将另一存储虚拟化控制器实体内存地址P视为虚拟内存地址 3G+P,原则上只要与其自己本身的实体内存地址不重复即可。再者,此处虽 以二存储虚拟化控制器有相同的存储空间的内存为例,但实务上,可能二控 制器的内存空间不同,例如第一存储虚拟化控制器为2G但第二存储虚拟化控 制器为1G,且实体或虚拟的内存地址亦依照内存空间而定。并且依据本发明 是设定就每一个存储虚拟化控制器而言,冗余配置的另一方有一部分或全部 的内存可供其存取。\n假设当一存储虚拟化控制器欲将某一数据写入另一存储虚拟化控制器的 内存地址2100_0000内时,则CPU242将此写入对象的目标起始地址 (A100_0000)与写入数据直接传输至CPU接口910,接着该接口910将此地址 (A100_0000)与写入数据传送至IM BUS950上,而由耦接至另一存储虚拟化控 制器的PCI-E接口934读取。由于中央处理器910所发出的信息中的目标起 始地址是为指向另一存储虚拟化控制器的虚拟内存地址,而CPU芯片组244 内各对外接口中是仅有PCI-E接口934是被设计作为与另一存储虚拟话控制 器沟通的接口,因此各组件得以判别且仅有此建立控制器间通信信道的接口 会去读取并执行数据传输。\n在一本实施例中,建立控制器间通信信道的PCI-E接口934读取目标起 始地址A100_0000与写入数据后,是先将目标起始地址A100_0000转换为相 对应的实体内存地址2100_0000,在与写入数据一同传送给另一存储虚拟化 控制器。而当另一存储虚拟化控制器接收到该实体内存地址2100_0000与写 入数据等信息时,将数据写入实体地址2100_0000。\n而在另一实施例中,此将虚拟内存地址转换为相对应的实体地址的步骤 是由接收端的接口来进行。即建立控制器间通信信道的PCI-E接口934进而 将该目标起始地址A100_0000与写入数据传输至另一存储虚拟化控制器。而 当另一存储虚拟化控制器的PCI-E接口读取到另一端所传送的目标起始地址 A100_0000以及写入数据等信息,是将此目标起始地址A100_0000(虚拟内存 地址)转换为相对应的实体地址2100_0000,而将数据写入该实体地址 2100_0000。\n依据本实施例,当二存储虚拟化控制器间建立了通信信道ICC,就每一 个存储虚拟化控制器而言,是将冗余配置的另一个存储虚拟化控制器视为一 终端装置,故可对其所具有之内存进行存取动作。因而,除了,前述将数据 传送写入至另一存储虚拟化控制器外,亦可读取另一存储虚拟化控制器的内 存内数据。\n若设计一存储虚拟化控制器是可直接对冗余配置的另一方的内存进行写 入与读取的操作时,则存储虚拟化控制器的中央处理器所发出的数据传输请 求必须包括存取指令,以指示进行写入或读取的操作。\n若为进行写入操作,则如前述做法。而若为读取操作,则数据传输请求 是尚包括数据来源起始地址以及数据长度。同样地,由于来源起始地址是为 指向另一存储虚拟化控制器的虚拟内存地址,因而建立控制器间通信信道的 接口会读取此请求,并于处理后转送给冗余配置的另一存储虚拟化控制器, 且于收到另一存储虚拟化控制器的回报信息后转给中央处理器。\n当CPU芯片组内建立控制器间通信信道接口接收到由另一控制器端所传 送的请求时,是解读请求内的存/取指令而进行相对应的写入或者读取数据操 作。若为写入操作则如前述。若为读取操作,则将依照来源起始地址与数据 长度读取数据并回报给该发出请求者,前述整个存/取过程是由CPU芯片组自 行执行。且如前述写入操作一般,数据传输请求内虚拟内存地址转换为相对 应的实体内存地址的步骤可以是由发送端或者接收端的建立控制器间通信信 道的接口来执行。亦即,本方法主要是采用CPU直接下达传输请求给CPU芯 片组,而由建立控制器间通信信道的接口所读取并将其传递至另一端的存储 虚拟化控制器,因而CPU无须对这些数据建立相对应的SG-List。\n而若一建立控制器间通信信道的接口接收到另一存储虚拟化控制器所传 送的数据时,整个数据存/取内存的过程是由该CPU芯片组执行,完全无需动 用到其中央处理器。\n故而,依据本实施例的结构,一存储虚拟化控制器是可直接对冗余配置 的另一存储虚拟化控制器进行存取动作,使当其损坏而由对方接替其工作后, 于其复原时,可直接藉由读取对方的内存内容,或者由对方主动传输相关信 息,使能获取了解其接替后的工作状态与进度等信息,而能恢复拿回接续处 理。其且可将另一存储虚拟化控制器的内存视为该本身内存的延伸。\n而由于前述方法,中央处理器并不对数据建立相对应的SG-List,对于 小量数据传输时,能显现明显的功效,因为就小量数据来说,例如:一个仅 仅1byte的数据,若需依照数据传输协议格式建立相对应的SG-List等动作, 中央处理器于内存内建立的SG-Lis可能高达16bytest,且该CPU芯片组仍 需读取该SG-List并依其内容处理,因而就显现出非常不经济。而在一较佳 实施例中,更可搭配前述具有SG-List特性的传输数据的方式。使存储虚拟 化控制器可视欲传送数据量的多寡来决定采用何种方式传送数据给另一存储 虚拟化控制器,以使系统效能能达最佳化。\n综上,本发明所提出的冗余存储虚拟化计算机系统,二存储虚拟化控制 器间的通信信道是直接利用本地总线(如实施例中的PCI-Express)来达成, 与传统上所采用的FC-AL,SATA或SCSI等外部连结完全不同,且相比较,本 发明无须再通过一中间转介电路,因此,其电路设计不仅较为简化,且成本 亦较低。\n再者,为了解决二存储虚拟化控制器皆为主动装置而无法真的使二者间 的通信信道联机的问题,在本发明的实施例中,是利用本地总线接口在系统 开机后会自动发送含有其自身接口设定状态等信息给另一连结端的机能,藉 此,各存储虚拟化控制器可了解其另一连结端其建立通信信道接口的模式为 何,因此可察觉两者间是否处于可建立联机的状态,若处于无法建立联机的 状态,则进入转换程序,转换至少一通信信道端的本地总线接口操作模式, 使其可顺利建立联机。\n而对于转换程序,除了提出单边转换实施例外,亦提出一自动撮合实施 例,利用随机随机数选取的方式决定一等待时间值,在该时间达到后进行转 换接口操作模式,由于二者间必定会发生所选定的等待时间值不同的情事, 因此其中一者必定先到达,而先行进行转换,因此可成功撮合二存储虚拟化 控制器间通信信道二端的接口的操作模式。\n又,在如何运用该本地总线所形成的通信信道传送数据的部分,又提出 一实施方法,使得中央处理器只需依照一事先定义的数据传输协议格式建立 并维护欲传送数据相对应的SG-List,并将第一个SG-List的存放地址写入 CPU芯片组内的寄存器即可,其它需执行的读取数据与将这些数据传送的大 量动作,将完全由建立控制器间通信信道的接口执行,因此能有效降低冗余 存储虚拟化控制器间为了保持相互数据同步与一致性的要求而延伸出影响中 央处理器效能的问题。且再进一步的实施例中,更能使在前一笔数据未完成 传送前所产生的新数据间产生连动关系,使建立控制器间通信信道的接口可 自动接续处理。\n最后,为了能使存储虚拟化控制器的效能达到较佳化,针对冗余存储虚 拟化控制器间的小量数据传输上,亦提出一种冗余存储虚拟化控制器间的传 输信息之方法,主要是利用于二存储虚拟化控制器间建立了通信信道后,采 用控制器内中央处理器直接通过ICC传送请求信息至另一端的方式,无须建 构SG-List,因而,对小量数据传输上,可增加系统处理效能。\n以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均 等变化与修饰,皆应属本发明专利的涵盖范围。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |