特許第6836536号(P6836536)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧
特許6836536ストレージシステム及びIO処理の制御方法
<>
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000002
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000003
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000004
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000005
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000006
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000007
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000008
  • 特許6836536-ストレージシステム及びIO処理の制御方法 図000009
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6836536
(24)【登録日】2021年2月9日
(45)【発行日】2021年3月3日
(54)【発明の名称】ストレージシステム及びIO処理の制御方法
(51)【国際特許分類】
   G06F 3/06 20060101AFI20210222BHJP
   G06F 13/12 20060101ALI20210222BHJP
   G06F 13/10 20060101ALI20210222BHJP
【FI】
   G06F3/06 302Z
   G06F3/06 301Z
   G06F3/06 304B
   G06F13/12 340B
   G06F13/10 340A
   G06F3/06 302A
【請求項の数】10
【全頁数】20
(21)【出願番号】特願2018-51462(P2018-51462)
(22)【出願日】2018年3月19日
(65)【公開番号】特開2019-164510(P2019-164510A)
(43)【公開日】2019年9月26日
【審査請求日】2019年2月5日
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001678
【氏名又は名称】特許業務法人藤央特許事務所
(72)【発明者】
【氏名】長尾 尚
(72)【発明者】
【氏名】吉原 朋宏
(72)【発明者】
【氏名】鑪 講平
(72)【発明者】
【氏名】小林 美保
【審査官】 田名網 忠雄
(56)【参考文献】
【文献】 特表2012−514776(JP,A)
【文献】 特開2008−269424(JP,A)
【文献】 特表2011−530728(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06−3/08
G06F 13/10−13/14
(57)【特許請求の範囲】
【請求項1】
計算機に記憶領域を提供するストレージシステムであって、
データを格納する複数の記憶媒体及び複数のコントローラを備え
前記コントローラは
前記計算機と接続して、前記記憶媒体に対するIO要求を受信する複数のポートを有するインタフェースと
前記複数のポートの各々が受信したIO要求を蓄積する複数のキューを格納するメモリと
前記IO要求に基づくIO処理を実行する複数の演算コア及び当該IO処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと
有し、
前記ストレージシステムは、
前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、
前記論理ボリューム及び前記論理ボリュームに対するIO要求を受信するポートを対応づけて管理し、
前記メモリは、前記キューに蓄積された前記IO要求に基づくIO処理を実行する前記プロセッサと、前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、
前記プロセッサは、
前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定し、
前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記IO要求を取得し、
自プロセッサの前記キャッシュメモリへ前記取得したIO要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するIO処理を実行し、
前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御し、
前記プロセッサは、同じ論理ボリュームにかかる他のIO要求にかかるデータであり、自プロセッサの前記キャッシュメモリへ格納されたデータをキャッシュヒットさせてIO要求を処理することが可能であり、前記論理ボリュームと前記ポートとの対応付け及び前記担当プロセッサ管理情報により前記論理ボリュームにかかるIO要求を処理する前記プロセッサが定められている、
ことを特徴とするストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記担当プロセッサ管理情報は、前記プロセッサの演算コア及び前記担当ポートの対応づけを管理しており、
前記プロセッサの演算コアは、
前記担当プロセッサ管理情報に基づいて、他の演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御し、
前記他の演算コアに対応づけられる担当ポートの選択において、同じプロセッサ内の他の演算コアに対応づけられる担当ポートを、他のプロセッサ内の演算コアに対応づけられる担当ポートより優先することを特徴とするストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記プロセッサの演算コアは、前記他のプロセッサの演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御した場合に、前記他のプロセッサの演算コアと前記担当ポートとの対応づけを解除することを特徴とするストレージシステム。
【請求項4】
請求項2に記載のストレージシステムであって、
前記プロセッサの演算コアは、前記担当ポートに対応する前記キューに前記担当ポートを介して受信したIO要求が存在せず、かつ、前記演算コアの使用率が閾値より低い場合、前記担当プロセッサ管理情報に基づいて、前記他の演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御することを特徴とするストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記少なくとも一つのプロセッサは、
前記複数のポートの各々のIO処理の負荷を算出し、
前記プロセッサに割り当てるポートの負荷の合計値の差が小さくなるように、前記複数のプロセッサへの前記複数のポートの割当を変更し、
前記割当の変更結果に基づいて、前記担当プロセッサ管理情報を更新することを特徴とするストレージシステム。
【請求項6】
計算機に記憶領域を提供するストレージシステムが実行するIO処理の制御方法であって、
前記ストレージシステムは、データを格納する複数の記憶媒体及び複数のコントローラを備え
前記コントローラは
前記計算機と接続して、前記記憶媒体に対するIO要求を受信する複数のポートを有するインタフェースと
前記複数のポートの各々が受信したIO要求を蓄積する複数のキューを格納するメモリと
前記IO要求に基づくIO処理を実行する複数の演算コア及び当該IO処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと
有し、
前記ストレージシステムは、
前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、
前記論理ボリューム及び前記論理ボリュームに対するIO要求を受信するポートを対応づけて管理し、
前記メモリは、前記キューに蓄積された前記IO要求に基づくIO処理を実行する前記プロセッサと、前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、
前記IO処理の制御方法は、
前記プロセッサが、前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定する第1のステップと、
前記プロセッサが、前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記IO要求を取得する第2のステップと、
前記プロセッサが、自プロセッサの前記キャッシュメモリへ前記取得したIO要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するIO処理を実行する第3のステップと、
前記プロセッサが、前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御する第4のステップと、を含み、
前記プロセッサは、同じ論理ボリュームにかかる他のIO要求にかかるデータであり、自プロセッサの前記キャッシュメモリへ格納されたデータをキャッシュヒットさせてIO要求を処理することが可能であり、前記論理ボリュームと前記ポートとの対応付け及び前記担当プロセッサ管理情報により前記論理ボリュームにかかるIO要求を処理する前記プロセッサが定められている、
ことを特徴とするIO処理の制御方法。
【請求項7】
請求項6に記載のIO処理の制御方法であって、
前記担当プロセッサ管理情報は、前記プロセッサの演算コア及び前記担当ポートの対応づけを管理しており、
前記第4のステップは、前記プロセッサの演算コアが、前記担当プロセッサ管理情報に基づいて、他の演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御する第5のステップを含み、
前記第5のステップは、前記プロセッサの演算コアが、前記他の演算コアに対応づけられる担当ポートを選択する場合に、同じプロセッサ内の他の演算コアに対応づけられる担当ポートを、他のプロセッサ内の演算コアに対応づけられる担当ポートより優先するステップを含むことを特徴とするIO処理の制御方法。
【請求項8】
請求項7に記載のIO処理の制御方法であって、
前記第5のステップは、前記プロセッサの演算コアが、前記他のプロセッサの演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御した場合に、前記他のプロセッサの演算コアと前記担当ポートとの対応づけを解除するステップを含むことを特徴とするIO処理の制御方法。
【請求項9】
請求項7に記載のIO処理の制御方法であって、
前記第5のステップは、前記プロセッサの演算コアが、前記担当ポートに対応する前記キューに前記担当ポートを介して受信したIO要求が存在せず、かつ、前記演算コアの使用率が閾値より低い場合、前記担当プロセッサ管理情報に基づいて、前記他の演算コアに対応づけられる担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御するステップを含むことを特徴とするIO処理の制御方法。
【請求項10】
請求項6に記載のIO処理の制御方法であって、
前記少なくとも一つのプロセッサが、前記複数のポートの各々のIO処理の負荷を算出するステップと、
前記少なくとも一つのプロセッサが、前記プロセッサに割り当てるポートの負荷の合計値の差が小さくなるように、前記複数のプロセッサへの前記複数のポートの割当を変更するステップと、
前記少なくとも一つのプロセッサが、前記割当の変更結果に基づいて、前記担当プロセッサ管理情報を更新するステップと、を含むことを特徴とするIO処理の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムのIO処理の高速化を実現する技術に関する。
【背景技術】
【0002】
ストレージシステムではIO処理の高速化が求められている。IO処理の高速化を実現するために、ストレージシステムに複数のプロセッサを搭載するシステム構成が採用されている。
【0003】
しかし、複数のプロセッサを搭載したストレージシステムでは、複数のプロセッサがメモリを共有しているため、アクセス競合等の発生によってIO処理を高速化が十分ではないという問題がある。
【0004】
前述した課題に対して特許文献1に記載の技術が知られている。特許文献1には、「ディスク装置と、上位装置からの要求を受付け、前記ディスク装置に対するデータの入出力を制御する、複数のプロセッサを有するディスクコントローラとを備えるストレージシステムであって、前記ディスクコントローラは、ストレージシステムの動作プログラムを格納する複数のメモリと、前記上位装置との間のデータの入出力を制御する複数の上位インタフェースと、前記ディスク装置との間のデータの入出力を制御する複数の下位インタフェースとを有し、前記メモリ、前記上位インタフェース、および前記下位インタフェースは、各々、前記プロセッサ毎に、専用に設けられていて、前記複数のプロセッサは、各々、前記専用に設けられたメモリにアクセスして前記動作プログラムを実行して、前記専用に設けられた上位インタフェースおよび下位インタフェースを制御して、前記上位装置から要求される入出力処理を行なうこと」が記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2005−267545号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1の技術では、プロセッサ毎に専用のメモリ及びインタフェースを設ける必要がある。また、特許文献1の技術を適用する場合、複数のプロセッサが共有するキャッシュの記憶領域をプロセッサ毎の専用の領域に分割する必要がある。したがって、ハードウェアコスト及び管理コスト等の運用コストが高いという問題がある。
【0007】
本発明は、運用コストを抑えつつ、IO処理の高速化を実現することを目的とする。
【課題を解決するための手段】
【0008】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、計算機に記憶領域を提供するストレージシステムであって、データを格納する複数の記憶媒体及び複数のコントローラを備え、前記コントローラは、前記計算機と接続して、前記記憶媒体に対するIO要求を受信する複数のポートを有するインタフェースと、前記複数のポートの各々が受信したIO要求を蓄積する複数のキューを格納するメモリと、前記IO要求に基づくIO処理を実行する複数の演算コア及び当該IO処理にかかるデータを格納するキャッシュメモリを有する複数のプロセッサと、を有し、前記ストレージシステムは、前記複数の記憶媒体の記憶領域から論理ボリュームを生成し、前記計算機に前記論理ボリュームを提供し、前記論理ボリューム及び前記論理ボリュームに対するIO要求を受信するポートを対応づけて管理し、前記メモリは、前記キューに蓄積された前記IO要求に基づくIO処理を実行する前記プロセッサと、前記キューに対応するポートである担当ポートの対応づけを管理するための担当プロセッサ管理情報を格納し、前記プロセッサは、前記担当プロセッサ管理情報に基づいて、前記担当ポートを特定し、前記担当ポートを介して受信し、前記担当ポートに対応するキューに蓄積された前記IO要求を取得し、自プロセッサの前記キャッシュメモリへ前記取得したIO要求にかかるデータを格納しながら、前記担当ポートに対応づけられる前記論理ボリュームに対するIO処理を実行し、前記担当プロセッサ管理情報及び前記プロセッサの使用率に基づいて、他に対応づけられる前記担当ポートを介して受信したIO要求に基づくIO処理を実行するように制御し、前記プロセッサは、同じ論理ボリュームにかかる他のIO要求にかかるデータであり、自プロセッサの前記キャッシュメモリへ格納されたデータをキャッシュヒットさせてIO要求を処理することが可能であり、前記論理ボリュームと前記ポートとの対応付け及び前記担当プロセッサ管理情報により前記論理ボリュームにかかるIO要求を処理する前記プロセッサが定められている
【発明の効果】
【0009】
本発明によれば、運用コストを抑えつつ、特定のIO要求に関連するデータがプロセッサ内のキャッシュメモリに格納されるように制御できる。したがって、IO処理に伴うメモリへのアクセスが減少するため、IO処理の高速化を実現できる。上記した以外の課題、構成及び効果は、以下の実施例の説明により明らかにされる。
【図面の簡単な説明】
【0010】
図1】実施例1の計算機システムの構成例を示す図である。
図2】実施例1のストレージシステムにおけるIO処理の概念を説明する図である。
図3】実施例1のIO要求管理情報のデータ構造の一例を示す図である。
図4】実施例1の担当プロセッサ管理情報のデータ構造の一例を示す図である。
図5】実施例1のストレージシステムが実行する担当プロセッサ管理情報の生成処理の一例を説明するフローチャートである。
図6】実施例1のストレージシステムが実行するIO制御処理の一例を説明するフローチャートである。
図7】実施例1のストレージシステムが実行するIO要求の受信処理の一例を説明するフローチャートである。
図8】実施例2のストレージシステムが実行する担当プロセッサ管理情報の更新処理の一例を説明するフローチャートである。
【発明を実施するための形態】
【0011】
以下、本発明の実施例を、図面を用いて説明する。ただし、本発明は以下に示す実施の形態の記載内容に限定して解釈されるものではない。本発明の思想ないし趣旨から逸脱しない範囲で、その具体的構成を変更し得ることは当業者であれば容易に理解される。
【0012】
以下に説明する発明の構成において、同一又は類似する構成又は機能には同一の符号を付し、重複する説明は省略する。
【0013】
本明細書等における「第1」、「第2」、「第3」等の表記は、構成要素を識別するために付するものであり、必ずしも、数又は順序を限定するものではない。
【0014】
図面等において示す各構成の位置、大きさ、形状、及び範囲等は、発明の理解を容易にするため、実際の位置、大きさ、形状、及び範囲等を表していない場合がある。したがって、本発明では、図面等に開示された位置、大きさ、形状、及び範囲等に限定されない。
【実施例1】
【0015】
図1は、実施例1の計算機システムの構成例を示す図である。
【0016】
計算機システムは、ストレージシステム10及び複数のホスト計算機11−1、11−2を備える。以下では、ホスト計算機11−1、11−2を区別しない場合、ホスト計算機11と記載する。
【0017】
ホスト計算機11は、ネットワーク15を介してストレージシステム10と接続する。ネットワーク15は、SAN(Storage Area Network)、LAN(Local Area Network)、及びWAN(Wide Area Network)等が考えられる。ネットワーク15の接続方式は有線又は無線のいずれでもよい。
【0018】
ホスト計算機11は、図示しないプロセッサ、メモリ、及びネットワークインタフェースを有する計算機である。ホスト計算機11は、ストレージシステム10が提供する記憶領域を用いて所定の処理を実行する。
【0019】
ストレージシステム10は、ホスト計算機11に記憶領域を提供する。ストレージシステム10は、複数のコントローラ100−1、100−2及び複数のドライブ101−1、101−2を有する。以下では、コントローラ100−1、100−2を区別しない場合、コントローラ100と記載し、ドライブ101−1、101−2を区別しない場合、ドライブ101と記載する。
【0020】
コントローラ100は、ホスト計算機11及びドライブ101の間のIO処理を制御する。コントローラ100は、複数のプロセッサ110、メモリ120、ホストインタフェース130、及びドライブインタフェース140を有する。コントローラ100が有する各ハードウェア構成は内部バスを介して互いに接続される。実施例1では、コントローラ100に含まれるメモリ120、ホストインタフェース130、及びドライブインタフェース140は一つであるが、二つ以上でもよい。
【0021】
コントローラ100−1及びコントローラ100−2は、専用のパスを介して互いに接続される。したがって、コントローラ100−1に含まれるプロセッサ110及び図示しないDMA(Direct Memory Access)回路は、当該パスを介して、コントローラ100−2が有するメモリ120にアクセスできる。コントローラ100−2も同様に、パスを介して、コントローラ100−1が有するメモリ120にアクセスできる。
【0022】
プロセッサ110は、メモリ120に格納されるプログラムを実行する演算装置である。プロセッサ110は、複数のコア111及びキャッシュメモリ112を有する。
【0023】
メモリ120は、プロセッサ110が実行するプログラム及びプログラムが使用するデータを格納する記憶装置である。メモリ120に格納されるプログラム及びデータについては後述する。
【0024】
ホストインタフェース130は、ネットワーク15を介してホスト計算機11に接続するためのインタフェースである。ホストインタフェース130は、例えば、NIC(Network Interface Card)及びHBA(Host Bus Adapter)等である。ホストインタフェース130は、複数のポート131を有する。実施例1のホストインタフェース130は、ポート131を介してIO要求を受信した場合、メモリ120の特定の領域(IOキュー124)にIO要求を格納する。
【0025】
ドライブインタフェース140は、ドライブ101と接続するためのインタフェースである。
【0026】
ドライブ101は、HDD(Hard Disk Drive)及びSSD(Solid State Drive)等の記憶装置である。
【0027】
コントローラ100は、一つ以上のドライブ101の記憶領域又は複数のドライブ101を用いて構成されるRAID(Redundant Array of Independent Disks)グループの記憶領域を用いて、論理ボリューム150を生成する。論理ボリューム150は、ホスト計算機11に提供される記憶領域であり、ポート131と対応づけて管理される。なお、ホスト計算機11には複数の論理ボリューム150が提供されてもよい。
【0028】
ここで、メモリ120に格納されるプログラム及びデータについて説明する。メモリ120は、制御モジュール121を実現するプログラムを格納し、IO要求管理情報122及び担当プロセッサ管理情報123を格納する。また、メモリ120は、各ポート131が受信したIO要求を蓄積するためのIOキュー124を格納する。
【0029】
制御モジュール121は、ストレージシステム10全体を制御する。より具体的には、制御モジュール121は、論理ボリューム150の管理及びIO処理の制御等を行う。
【0030】
IO要求管理情報122は、ホスト計算機11から受信したIO要求に基づくIO処理を管理するための情報である。IO要求管理情報122のデータ構造の詳細は図3を用いて説明する。
【0031】
担当プロセッサ管理情報123は、ポート131が受信したIO要求に基づくIO処理を実行するプロセッサを管理するための情報である。担当プロセッサ管理情報123のデータ構造の詳細は図4を用いて説明する。
【0032】
なお、メモリ120は、図示しないストレージシステム10を管理するための情報を格納する。例えば、ハードウェア構成を管理するための情報、ポート131及び論理ボリューム150の対応関係を管理するための情報、並びに、論理ボリューム150及びRAIDグループの関係を管理するための情報等がメモリ120に格納される。
【0033】
図2は、実施例1のストレージシステム10におけるIO処理の概念を説明する図である。
【0034】
実施例1の制御モジュール121は、後述するように、コントローラ100に含まれる複数のIOキュー124(複数のポート131)に対して、IO処理を実行するプロセッサ110を設定する。すなわち、制御モジュール121は、ポート131を担当するプロセッサ110の割当を行う。具体的には、制御モジュール121は、担当プロセッサ管理情報123を生成し、メモリ120に担当プロセッサ管理情報123を設定する。
【0035】
図2に示す例では、プロセッサ110−1は担当の第1ポート131及び第2ポート131に対応するIOキュー124に蓄積されるIO要求に基づくIO処理を実行するように設定される。また、プロセッサ110−2は担当の第3ポート131及び第4ポート131に対応するIOキュー124に蓄積されるIO要求に基づくIO処理を実行するように設定される。
【0036】
したがって、プロセッサ110−1は、第1ポート131及び第2ポート131のそれぞれに対応づけられた論理ボリューム150に対するIO処理を実行し、プロセッサ110−2は、第3ポート131及び第4ポート131のそれぞれに対応づけられた論理ボリューム150に対するIO処理を実行する。
【0037】
このとき、プロセッサ110−1のキャッシュメモリ112には、IO要求管理情報122の第1ポート用領域201及び第2ポート用領域201に格納される情報が蓄積される。ポート用領域201は、ポート131を介して受信したIO要求に基づくIO処理に関連するデータを格納する領域であり、例えば、テーブル形式の情報のエントリに該当する。すなわち、キャッシュメモリ112には、特定の論理ボリューム150に対するIO処理に関連するデータが蓄積される。したがって、IO処理に伴うキャッシュメモリ112のキャッシュヒット率が向上するため、メモリ120へのアクセス回数が減少する。
【0038】
IO処理におけるメモリ120へのアクセスは処理速度の低下の一要因であることから、メモリ120へのアクセス回数の減少によってIO処理の高速化が可能となる。
【0039】
本実施例の制御方式では、プロセッサ110に対して専用のハードウェアを設ける必要がなく、また、メモリ120の領域を分ける必要がない。したがって、運用コストを抑制したIO処理の高速化を実現できる。
【0040】
図3は、実施例1のIO要求管理情報122のデータ構造の一例を示す図である。
【0041】
IO要求管理情報122は、ホストインタフェースID301、ホストインタフェース種別302、ポートID303、キューロック状態304、及びIO要求リスト305から構成されるエントリを含む。一つのエントリには、一つのホストインタフェース130に関する情報が格納される。
【0042】
ホストインタフェースID301は、ホストインタフェース130の識別情報を格納するフィールドである。
【0043】
ホストインタフェース種別302は、ホストインタフェース130の種別を示す値を格納するフィールドである。ホストインタフェース種別302には、製品名及びインタフェースの規格等が格納される。
【0044】
ポートID303は、ホストインタフェース130が有するポート131の識別情報を格納するフィールドである。一つのエントリには、ホストインタフェース130が有するポート131の数だけ行が含まれる。
【0045】
キューロック状態304は、ポートID303に対応するポート131を介して受信したIO要求を蓄積するIOキュー124のロック状態を示す値を格納するフィールドである。キューロック状態304には、ロックが取得されたことを示す「ロック中」及びロックが取得されていないことを示す「未ロック」のいずれかが格納される。
【0046】
IO要求リスト305は、IOキュー124を介してプロセッサ110が受信するIO要求に基づくIO処理を管理するためのフィールド群である。IO要求リスト305は、使用状態311、コアID312、及びプロセスID313を含む。
【0047】
使用状態311は、IO要求リスト305の行の使用状態を示す値を格納するフィールドである。使用状態311には「使用中」及び「未使用」のいずれかが格納される。行を用いてIO処理を管理する場合、使用状態311は「未使用」から「使用中」に更新される。コアID312は、IO要求に基づくIO処理を実行するコア111の識別情報を格納するフィールドである。プロセスID313は、IO処理に対応するプロセスの識別情報を格納するフィールドである。
【0048】
図4は、実施例1の担当プロセッサ管理情報123のデータ構造の一例を示す図である。
【0049】
担当プロセッサ管理情報123は、ホストインタフェースID401、ポートID402、IO負荷403、プロセッサID404、及びコアID405から構成されるエントリを含む。一つのエントリには、一つのホストインタフェース130に関する情報が格納される。
【0050】
ホストインタフェースID401及びポートID402は、ホストインタフェースID301及びポートID303と同一のフィールドである。
【0051】
IO負荷403は、ポートID402に対応するポート131のIO負荷を示す値を格納するフィールドである。
【0052】
プロセッサID404は、ポート131を担当するコア111を含むプロセッサ110の識別情報を格納するフィールドである。コアID405は、ポート131を担当するコア111の識別情報を格納するフィールドである。すなわち、ポートID402に対応するポート131のIOキュー124に格納されるIO要求に基づくIO処理を実行するコア111を特定するための情報である。
【0053】
図5は、実施例1のストレージシステム10が実行する担当プロセッサ管理情報123の生成処理の一例を説明するフローチャートである。
【0054】
担当プロセッサ管理情報123の生成処理は、ストレージシステム10の稼働前に実行される。各コントローラ100に含まれるプロセッサ110によって実現される制御モジュール121が、各コントローラ100のメモリ120に格納する担当プロセッサ管理情報123の生成処理を実行する。
【0055】
制御モジュール121は、ハードウェア構成を管理するための情報を参照し、コントローラ100に含まれるプロセッサ110及びポート131のリストを生成する(ステップS101)。このとき、制御モジュール121は、初期化された担当プロセッサ管理情報123をメモリ120に格納する。
【0056】
次に、制御モジュール121は、コントローラ100に含まれる各プロセッサ110に割り当てるポート131の数(割当数)を算出する(ステップS102)。
【0057】
具体的には、制御モジュール121は、ポート131の数をプロセッサ110の数で除算することによって割当数を算出する。なお、前述した割当数の算出方法は一例であってこれに限定されない。
【0058】
次に、制御モジュール121は、コントローラ100に含まれる全てのプロセッサ110へのポート131の割当が完了したか否かを判定する(ステップS103)。
【0059】
ポート131の割当が完了したと判定された場合、制御モジュール121は、担当プロセッサ管理情報123の生成処理を終了する。
【0060】
ポート131の割当が完了していないと判定された場合、制御モジュール121は、プロセッサ110のリストからターゲットプロセッサ110を選択し(ステップS104)、ターゲットプロセッサ110に割り当てるポート131を決定する(ステップS105)。
【0061】
具体的には、制御モジュール121は、ポート131のリストから割当数分のポート131を選択する。このとき、選択されたポート131は、ポート131のリストから削除される。
【0062】
次に、制御モジュール121は、ターゲットプロセッサ110に含まれるコア111の中から決定されたポート131を担当するコア111を選択する(ステップS106)。例えば、制御モジュール121は、ラウンドロビン方式でコア111を選択する。本発明はコア111の選択方法に限定されない。
【0063】
次に、制御モジュール121は、担当プロセッサ管理情報123を更新し(ステップS107)、その後、ステップS103に戻る。具体的には、以下のような処理が実行される。
【0064】
制御モジュール121は、担当プロセッサ管理情報123にエントリを追加し、追加されたエントリのホストインタフェースID401に、コントローラ100に含まれるホストインタフェース130の識別情報を設定する。
【0065】
制御モジュール121は、追加されたエントリに選択されたポート131の数だけ行を生成する。制御モジュール121は、生成された行のポートID402に選択されたポート131の識別情報を設定し、また、生成された行のプロセッサID404にターゲットプロセッサ110の識別情報を設定する。さらに、制御モジュール121は、生成された行のコアID405に選択されたコア111の識別情報を設定する。この時点では、生成された行のIO負荷403には「0」等の初期値が設定される。以上がステップS107の処理の説明である。
【0066】
なお、コントローラ100に複数のホストインタフェース130が含まれる場合、各ホストインタフェース130に対して、ステップS101からステップS107の処理が実行される。
【0067】
図6は、実施例1のストレージシステム10が実行するIO制御処理の一例を説明するフローチャートである。以下で説明するIO制御処理は、複数のプロセッサ110の各々が周期的に実行する。なお、複数のプロセッサ110のIO制御処理の実行周期は、同一でもよいし、異なっていてもよい。また、IO制御周期が同一である場合、複数のプロセッサ110のIO制御処理は同期でもよいし、また、非同期でもよい。
【0068】
プロセッサ110のコア111は、メモリ120に格納される担当プロセッサ管理情報123を参照し、担当のポート131を特定する(ステップS201)。
【0069】
具体的には、プロセッサ110のコア111は、担当プロセッサ管理情報123のプロセッサID404に自プロセッサ110の識別情報が設定され、かつ、コアID405に自コア111の識別情報が設定される行を検索する。プロセッサ110のコア111は、検索された行のポートID402に格納されるポート131の識別情報を取得する。取得したポート131の識別情報はキャッシュメモリ112に格納される。
【0070】
次に、プロセッサ110のコア111は、特定された全てのポート131のIO要求の受信処理が完了したか否かを判定する(ステップS202)。具体的には、以下のような処理が実行される。
【0071】
ステップS201からステップS202に移行した場合、プロセッサ110のコア111は、特定された全てのポート131のIO要求の受信処理が完了していないと判定する。
【0072】
ステップS203からステップS202に移行した場合、プロセッサ110のコア111は、特定された全てのポート131に対応するIOキュー124のメモリ領域を参照して、未処理のIO要求が格納されているか否かを判定する。
【0073】
特定された全てのポート131に対応するIOキュー124に未処理のIO要求が一つ以上格納されていると判定された場合、プロセッサ110のコア111は、特定されたポート131であって、IO要求の受信処理が完了していないポート131のIO要求の受信処理を実行する(ステップS203)。一定期間経過した後、プロセッサ110は、ステップS202に戻る。IO要求の受信処理の詳細は図7を用いて説明する。
【0074】
特定された全てのポート131のIO要求の受信処理が完了したと判定された場合、プロセッサ110のコア111は、自コア111の使用率が閾値より小さいか否かを判定する(ステップS204)。使用率は、判定時より前の所定時間においてIO処理を行っていた時間の比率である。閾値は予め設定されているものとする。ただし、閾値は任意のタイミングで更新できる。
【0075】
使用率は、例えば、以下のような方法で算出される。コア111は、IO処理を開始又は再開した時刻を開始時刻として取得し、待ち状態への移行又はIO処理を終了した時刻を終了時刻として取得する。コア111は、終了時刻から開始時刻を減算した時間をIO処理時間としてメモリ120のカウンタに加算する。コア111は、カウンタを一定周期(例えば、1秒周期)に参照して、IO処理が占める割合を使用率として算出する。このとき、コア111は、カウンタを「0」にクリアする。
【0076】
自コア111の使用率が閾値以上であると判定された場合、プロセッサ110のコア111は、IO制御処理を終了する。
【0077】
自コア111の使用率が閾値より小さいと判定された場合、プロセッサ110のコア111は、他のコア111が担当するポート131を特定する(ステップS205)。
【0078】
具体的には、プロセッサ110のコア111は、プロセッサID404に自プロセッサ110の識別情報が設定され、かつ、コアID405に自コア111以外の識別情報が設定される行を検索し、検索された行のリストをキャッシュメモリ112に格納する。自プロセッサ110では適当な行が見つからなかった場合、プロセッサ110のコア111は、担当プロセッサ管理情報123のプロセッサID404に自プロセッサ110以外の識別情報が設定される行を検索し、検索された行のリストをキャッシュメモリ112に格納する。このときに、プロセッサ110のコア111は、そのポート131を担当している他のプロセッサ110のキャッシュメモリ112にアクセスし、そのポート131を担当することを示すポート識別情報を削除する。これによって、そのポート131の全IO処理は、プロセッサ間で移動することとなる。
【0079】
次に、プロセッサ110のコア111は、検索された行に対応する全てのポート131のIO要求の受信処理が完了したか否かを判定する(ステップS206)。具体的には以下のような処理が実行される。
【0080】
プロセッサ110のコア111は、ステップS205で検索された行に対応するポート131のIO要求の受信処理が完了したか否かを判定する。当該処理はステップS202と同様の処理である。
【0081】
検索された行に対応する全てのポート131のIO要求の受信処理が完了していないと判定された場合、プロセッサ110は、IO要求の受信処理が完了していないポート131のIO要求の受信処理を実行する(ステップS207)。一定期間経過した後、プロセッサ110は、ステップS206に戻る。
【0082】
ステップS201からステップS203の処理を実行することによって、プロセッサ110のコア111は、特定の論理ボリューム150に対するIO処理のみを実行できる。これによって、キャッシュメモリ112には特定の論理ボリューム150に関連するデータが格納される。したがって、メモリ120へのアクセス回数が減少するためIO処理の高速化を実現できる。
【0083】
ステップS204からステップS207の処理を実行することによって、プロセッサ110のコア111は、その使用率が低い場合、プロセッサ110内の他のコア111に割り当てられたポート131のIO処理を実行する。これによって、ストレージシステム10のリソースを有効に活用することができる。また、キャッシュメモリ112には、同一プロセッサ110に含まれる他のコア111が処理する特定の論理ボリューム150に関連するデータが格納される。したがって、メモリ120へのアクセス回数が減少するためIO処理の高速化を実現できる。
【0084】
図7は、実施例1のストレージシステム10が実行するIO要求の受信処理の一例を説明するフローチャートである。
【0085】
プロセッサ110のコア111は、特定されたポート131であって、IO要求の受信処理が完了していないポート131の中からターゲットポート131を選択する(ステップS301)。
【0086】
次に、プロセッサ110のコア111は、ターゲットポート131に対応するIOキュー124のロックを取得する(ステップS302)。また、プロセッサ110のコア111は、ロックの取得に成功したか否かを判定する(ステップS303)。具体的には、以下のような処理が実行される。
【0087】
プロセッサ110のコア111は、IO要求管理情報122を参照し、ホストインタフェースID301に自プロセッサ110を含むホストインタフェース130の識別情報が格納されるエントリを検索し、また、検索されたエントリからポートID303にターゲットポート131の識別情報が格納される行を検索する。プロセッサ110のコア111は、検索された行のキューロック状態304が「未ロック」であるか否かを判定する。
【0088】
検索された行のキューロック状態304が「ロック中」である場合、プロセッサ110のコア111は、ロックの取得に失敗したと判定する。
【0089】
検索された行のキューロック状態304が「未ロック」である場合、プロセッサ110のコア111は、ロックを取得する。ロックの取得が正常に行われた場合、プロセッサ110のコア111は、ロックの取得に成功したと判定する。このとき、プロセッサ110のコア111は、検索された行のキューロック状態304に「ロック中」を設定する。
【0090】
ロックの取得が正常に行われなかった場合、プロセッサ110のコア111は、ロックの取得に失敗したと判定する。以上が、ステップS302及びステップS303の処理の説明である。
【0091】
ロックの取得に失敗したと判定された場合、プロセッサ110のコア111は、IO要求の受信処理を終了する。
【0092】
ロックの取得に成功したと判定された場合、プロセッサ110のコア111は、ターゲットポート131に対応するIOキュー124からIO要求を取得し(ステップS304)、また、当該IO要求に基づくIO処理の負荷を算出する(ステップS305)。例えば、IO処理の負荷は、IO処理の種類及び扱うデータ量等に基づいて算出されもよいし、モニタ機能を用いてプロセッサ110のコア111の使用率が負荷として算出されてもよい。
【0093】
このとき、プロセッサ110のコア111は、担当プロセッサ管理情報123を参照し、プロセッサID404に自プロセッサ110の識別情報が格納され、コアID405に自コア111の識別情報が格納され、かつ、ポートID402にターゲットポート131の識別情報が格納される行を検索する。プロセッサ110のコア111は、検索された行のIO負荷403に算出された負荷を加算する。
【0094】
次に、プロセッサ110のコア111は、取得したIO要求が新規のIO要求であるか否かを判定する(ステップS306)。新規のIO要求であるか否かは、IO要求の種別及びコマンド等に基づいて判定することができる。データの書込みに対応するIO処理の応答を示すIO要求の場合、取得したIO要求は新規のIO要求でないと判定される。
【0095】
取得したIO要求が新規のIO要求であると判定された場合、プロセッサ110のコア111は、IO要求管理情報122のターゲットポート131に対応する行を更新し、また、取得したIO要求に基づくIO処理のプロセスを生成し、当該プロセスを開始する(ステップS307)。その後、プロセッサ110のコア111はステップS309に進む。具体的には、以下のような処理が実行される。
【0096】
プロセッサ110のコア111は、ホストインタフェースID301に自プロセッサ110を含むホストインタフェース130の識別情報が格納されるエントリを検索する。プロセッサ110のコア111は、検索されたエントリのポートID303にターゲットポート131の識別情報が格納される行を検索する。プロセッサ110のコア111は、検索された行のIO要求リスト305を参照し、使用状態311が「未使用」である行を一つ検索する。プロセッサ110のコア111は、検索された行の使用状態311に「使用中」を設定する。
【0097】
プロセッサ110のコア111は、プロセスを生成し、当該プロセスを実行可能状態とする。このとき、プロセッサ110のコア111は、検索された行のコアID312にコア111の識別情報を設定し、検索された行のプロセスID313に生成されたプロセスの識別情報を設定する。生成されたプロセスは、プロセッサ110のコア111のプロセススケジューリングに基づいて実行される。
【0098】
プロセッサ110のコア111は、IO処理の実行中にホスト計算機11との通信が必要となった場合、ポート131を介してホスト計算機11にIO要求を送信して当該プロセスを応答待ち状態に変更する。このとき、プロセッサ110のコア111は、送信するIO要求にプロセスを特定するための情報を付与する。
【0099】
例えば、データ読み込みのIO処理において、プロセッサ110のコア111は、読み出し対象のデータをメモリ120に格納した後、格納したデータをホスト計算機11に応答するためにIO要求を送信する。また、プロセスを特定するための情報は、例えば、コアID312とプロセスID313でもよいし、IO要求リスト305の先頭からの行数でもよい。
【0100】
取得したIO要求が新規のIO要求でないと判定された場合、プロセッサ110のコア111は、IO要求リスト305を参照し、コアID312及びプロセスID313が自コア111の識別情報及びIO要求のプロセスの識別情報に一致する行を検索し、応答待ち状態から実行可能状態に変更する(ステップS308)。その後、プロセッサ110のコア111はステップS309に進む。具体的には、以下のような処理が実行される。
【0101】
プロセッサ110のコア111は、ホストインタフェースID301に自プロセッサ110を含むホストインタフェース130の識別情報が格納されるエントリを検索する。プロセッサ110のコア111は、検索されたエントリのポートID303にターゲットポート131の識別情報が格納される行を検索する。プロセッサ110のコア111は、検索された行のIO要求リスト305を参照し、取得したIO要求に対応する行を検索する。
【0102】
さらに、プロセッサ110のコア111は、検索された行のコアID312とプロセスID313によって特定されるプロセスを実行可能状態に変更する。当該プロセスは、プロセッサ110のコア111のプロセススケジューリングに基づいて処理が再開され、IO処理が完了したあと、プロセッサ110のコア111が、IO要求管理情報122の対応する行の使用状態311、コアID312、及びプロセスID313を初期化する。具体的には、プロセッサ110のコア111は、使用状態311に「未使用」を設定し、コアID312及びプロセスID313に「N/A」を設定する。
【0103】
プロセッサ110のコア111は、検索された行のコアID312に格納される識別情報に対応するコア111に、取得したIO要求を通知する。以上がステップS308の処理の説明である。
【0104】
ステップS309では、プロセッサ110のコア111は取得したロックを解放する(ステップS309)。その後、プロセッサ110のコア111はIO要求の受信処理を終了する。このとき、プロセッサ110のコア111は、キューロック状態304を「未ロック」に変更する。
【0105】
以上で説明したように、実施例1によれば、特定のポート131を介して受信したIO要求は、特定のプロセッサ110が実行するように集まりやすくなる。これによって、プロセッサ110内のコア111が共有するキャッシュメモリ112には、ポート131に対応づけられる論理ボリューム150に関連するデータが格納される。コア111の使用率が低くなったときは、同じプロセッサ110内の他コア111が担当しているポート131を優先して担当に加える。これによって、IO処理の実行時のメモリ120へのアクセス回数を削減できるため、IO処理の高速化を実現できる。また、プロセッサ110内のすべてのコア111の使用率が低くなった場合は、他のプロセッサ110が担当するポート131のIO要求を実行するようになるので、プロセッサのリソースの有効利用も考慮している。このとき、そのポートの全IO要求をプロセッサ間で移動するようにすることで、キャッシュデータの有効利用を図っている。
【0106】
実施例1では、複数のプロセッサ110に一つのメモリ120が接続される構成を想定している。しかし、実施例1で説明した方式は前述以外の構成にも適用できる。例えば、複数のプロセッサ110に複数のメモリ120が接続される構成でもよい。この場合、複数のメモリ120の記憶領域を一つの記憶領域として扱うことによって、同様の制御が可能となる。
【実施例2】
【0107】
実施例2では、担当プロセッサ管理情報123の更新方法について説明する。
【0108】
実施例2の計算機システムの構成及びストレージシステム10の構成は実施例1と同一であるため説明を省略する。実施例2のストレージシステム10が保持する情報のデータ構造は実施例1と同一であるため説明を省略する。
【0109】
図8は、実施例2のストレージシステム10が実行する担当プロセッサ管理情報123の更新処理の一例を説明するフローチャートである。
【0110】
担当プロセッサ管理情報123の更新処理は、ストレージシステム10が稼働した後、任意のタイミングで実行される。
【0111】
制御モジュール121は、全てのコントローラ100の処理が完了したか否かを判定する(ステップS401)。
【0112】
全てのコントローラ100の処理が完了したと判定された場合、制御モジュール121は担当プロセッサ管理情報123の更新処理を終了する。
【0113】
全てのコントローラ100の処理が完了していないと判定された場合、制御モジュール121は、ハードウェア構成を管理するための情報を参照し、ターゲットコントローラ100を選択する(ステップS402)。
【0114】
次に、制御モジュール121は、ハードウェア構成を管理するための情報を参照し、ターゲットコントローラ100に含まれるプロセッサ110及びポート131のリストを生成する(ステップS403)。
【0115】
次に、制御モジュール121は、ターゲットコントローラ100に含まれるホストインタフェース130の各ポート131の負荷を取得する(ステップS404)。
【0116】
具体的には、制御モジュール121は、担当プロセッサ管理情報123を参照し、ホストインタフェースID401がターゲットコントローラ100に含まれるホストインタフェース130の識別情報と一致するエントリを検索する。制御モジュール121は、検索されたエントリに含まれる各行のIO負荷403の値を取得する。
【0117】
次に、制御モジュール121は、ターゲットコントローラ100に含まれる各プロセッサ110のコア111に割り当てるポート131を決定する(ステップS405)。その後、制御モジュール121は、ステップS401に戻る。ステップS405では、以下のような処理が実行される。
【0118】
制御モジュール121は、一つのキャッシュラインのデータサイズ及びIO要求管理情報122のIO要求リスト305の一つの行(ポート用領域201)のデータサイズに基づいて、一つのキャッシュラインに含めることができる行の数を算出する。算出された行の数を基準数と記載する。
【0119】
制御モジュール121は、基準数を割り当てるポート131の数の最小単位に設定し、プロセッサ110のコア111に割り当てるポート131の負荷の合計値の差が最小となるポート131の割り当てを決定する。
【0120】
制御モジュール121は、担当プロセッサ管理情報123を参照し、ターゲットコントローラ100に含まれるホストインタフェース130に対応するエントリのプロセッサID404及びコアID405に、決定されたプロセッサ110及びコア111の識別情報を設定する。以上がステップS405の処理の説明である。
【0121】
実施例2によれば、ポート131の負荷に応じて、プロセッサ110のコア111が担当するポート131及びポート131の数を動的に変更することができる。
【0122】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。
【0123】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、SSD(Solid State Drive)、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発性のメモリカード、ROMなどが用いられる。
【0124】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、C/C++、perl、Shell、PHP、Java(登録商標)等の広範囲のプログラム又はスクリプト言語で実装できる。
【0125】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はCD−RW、CD−R等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。
【0126】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【符号の説明】
【0127】
10 ストレージシステム
11 ホスト計算機
15 ネットワーク
100 コントローラ
101 ドライブ
110 プロセッサ
111 コア
112 キャッシュメモリ
120 メモリ
121 制御モジュール
122 IO要求管理情報
123 担当プロセッサ管理情報
124 IOキュー
130 ホストインタフェース
131 ポート
140 ドライブインタフェース
150 論理ボリューム
201 ポート用領域
図1
図2
図3
図4
図5
図6
図7
図8