(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-09
(45)【発行日】2024-12-17
(54)【発明の名称】ストレージシステム
(51)【国際特許分類】
G06F 9/445 20180101AFI20241210BHJP
G06F 3/06 20060101ALI20241210BHJP
G06F 13/14 20060101ALI20241210BHJP
【FI】
G06F9/445 130
G06F3/06 301H
G06F3/06 301Y
G06F13/14 330C
G06F3/06 301W
G06F13/14 330E
(21)【出願番号】P 2022157573
(22)【出願日】2022-09-30
【審査請求日】2023-06-01
(73)【特許権者】
【識別番号】524132520
【氏名又は名称】日立ヴァンタラ株式会社
(74)【代理人】
【識別番号】110001678
【氏名又は名称】藤央弁理士法人
(72)【発明者】
【氏名】吉井 義裕
(72)【発明者】
【氏名】吉原 朋宏
(72)【発明者】
【氏名】達見 良介
【審査官】松平 英
(56)【参考文献】
【文献】特開2022-161816(JP,A)
【文献】米国特許出願公開第2022/0114094(US,A1)
【文献】特開2008-257682(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/44-9/445
G06F 3/06
G06F 13/14
G06F 8/00-8/38
G06F 8/60-8/77
G06F 9/451
(57)【特許請求の範囲】
【請求項1】
ストレージシステムであって、
プロセッサとメモリとを含みストレージドライブに入出力するデータを処理する、複数のストレージコントローラを含み、
前記複数のストレージコントローラの各コントローラは、交換前の旧ストレージコントローラ又は交換後の新ストレージコントローラであり、
前記新ストレージコントローラは、第1プログラムと第2プログラムとを実行可能であり、
前記旧ストレージコントローラは、少なくとも、前記第2プログラムを実行可能であり、
前記複数のストレージコントローラの全てが前記新ストレージコントローラである場合、前記新ストレージコントローラは、前記第1プログラムを用いて前記ストレージドライブに入出力されるデータを処理し、
前記複数のストレージコントローラが少なくとも一つの前記旧ストレージコントローラを含む場合、前記複数のストレージコントローラの各ストレージコントローラは、前記第2プログラムを用いて前記ストレージドライブに入出力されるデータを処理する、ストレージシステム。
【請求項2】
請求項1に記載のストレージシステムであって、
前記新ストレージコントローラは、アクセラレータ回路を含み、
前記新ストレージコントローラの前記プロセッサは、前記第1プログラムに従って、前記アクセラレータ回路を使用してデータを圧縮し、
前記新ストレージコントローラの前記プロセッサは、前記第2プログラムに従って、前記アクセラレータ回路を使用することなくデータを圧縮する、ストレージシステム。
【請求項3】
請求項2に記載のストレージシステムであって、
前記旧ストレージコントローラは、第1アクセラレータ回路を含み、
交換対象となる前において、前記旧ストレージコントローラは、前記第1アクセラレータ回路を使用してデータを圧縮し、
前記交換対象となった後に、前記旧ストレージコントローラは、前記第1アクセラレータ回路を使用することなく、前記旧ストレージコントローラの前記プロセッサによってデータを圧縮する、ストレージシステム。
【請求項4】
請求項1に記載のストレージシステムであって、
前記旧ストレージコントローラは、第3プログラムを実行可能であり、
前記新ストレージコントローラは、第1アルゴリズムに従ってデータを圧縮するアクセラレータ回路を含み、
前記第1プログラムは、前記アクセラレータ回路を使用してデータを圧縮し、
前記第2プログラムは、前記アクセラレータ回路を使用することなくデータを圧縮し、
前記第3プログラムは
、前記プロセッサにより前記第1アルゴリズムでデータを圧縮可能であり、
前記旧ストレージコントローラによって実行される前記第3プログラムと前記新ストレージコントローラによって実行される前記第1プログラムの組合せの優先度は、前記旧ストレージコントローラ及び前記新ストレージコントローラの双方に実行される前記第2プログラムの優先度より低い、ストレージシステム。
【請求項5】
請求項1に記載のストレージシステムであって、
前記旧ストレージコントローラと前記新ストレージコントローラの双方が実行可能な複数プログラムが存在する場合、予め設定された優先度に従って前記複数プログラムから前記第2プログラムが選択される、ストレージシステム。
【請求項6】
請求項1に記載のストレージシステムであって、
前記旧ストレージコントローラと前記新ストレージコントローラの双方が実行可能な複数プログラムが存在する場合、IO処理速度が最も高速なプログラムが、前記複数プログラムから前記第2プログラムとして選択される、ストレージシステム。
【請求項7】
請求項1に記載のストレージシステムであって、
前記複数のストレージコントローラの一つのストレージコントローラは、
交換元ストレージコントローラ及び交換先ストレージコントローラの、ハードウェア構成情報及びソフトウェア構成情報を参照し、
前記ハードウェア構成情報及び前記ソフトウェア構成情報が、予め設定されている交換条件から外れている場合に、前記交換元ストレージコントローラ及び前記交換先ストレージコントローラの交換を拒否する、ストレージシステム。
【請求項8】
ストレージシステムにおけるデータ処理方法であって、
前記ストレージシステムは、プロセッサとメモリとを含みストレージドライブに入出力するデータを処理する、複数のストレージコントローラを含み、
前記複数のストレージコントローラの各コントローラは、交換前の旧ストレージコントローラ又は交換後の新ストレージコントローラであり、
前記新ストレージコントローラは、第1プログラムと第2プログラムとを実行可能であり、
前記旧ストレージコントローラは、少なくとも、前記第2プログラムを実行可能であり、
前記データ処理方法は、
前記複数のストレージコントローラの全てが前記新ストレージコントローラである場合、前記新ストレージコントローラが、前記第1プログラムを用いて前記ストレージドライブに入出力されるデータを処理し、
前記複数のストレージコントローラが少なくとも一つの前記旧ストレージコントローラを含む場合、前記複数のストレージコントローラの各ストレージコントローラが、前記第2プログラムを用いて前記ストレージドライブに入出力されるデータを処理する、データ処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ストレージシステムのストレージコントローラリプレースに関する。
【背景技術】
【0002】
近年、NAND型フラッシュメモリの大容量化によりストレージシステムには大量のデータが保存されている。また、ストレージシステムは上位アプリケーションへの業務影響なく、ハードウェア及びソフトウェアを最新のものに交換できることが求められる。通常、ストレージシステムの交換には、新ストレージシステム側の設定及びデータ移行プロセスに時間を要している。
【0003】
米国特許第9959043号明細書は、ストレージシステムのソフトウェアを無停止でアップデートするための発明を示している。ソフトウェアアップデート後、新しいデータ形式と古いデータ形式が両方存在しており、新しいデータには、古いデータ形式のデータへの参照が含まれている。データが更新されたときに、新しいデータ形式で書き込むことで、データの読み書きを止めることなく、新しいデータ形式へアップデートすることができる。
【0004】
米国特許第9098211号明細書は、複数ストレージシステム間における無停止データ移行を行うための発明を示している。ホストから単一のストレージシステムであることを認識させるために、複数ストレージに跨る仮想ストレージシステム、仮想ポート及び仮想ロジカルユニット(LUN)を構成する。移行元の物理ポートのポート名及びポートアドレスを移行先システムの仮想ポート名及びポートアドレスに対応付けることで、無停止で新しいストレージシステムへの移行を完了させることができる。
【0005】
デュアルコントローラのストレージシステムにおいて、ストレージシステムのハードウェアを無停止でアップデートするための方式がある。この方式によれば、接続されているドライブのデータを移動することなく新しいコントローラへアップデートすることができる。また、ストレージシステムの構成情報等は維持される。ストレージコントローラを片方ずつ順番に交換することで、新しいハードウェアへの交換を実現している。これは、ストレージシステムにおけるコントローラの交換手順として一般的な方法である。
【先行技術文献】
【特許文献】
【0006】
【文献】米国特許第9959043号明細書
【文献】米国特許第9098211号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
米国特許第9959043号明細書では、論理ボリューム内の各データに対して、データ形式が更新されている場合に、新データ形式から旧データへの参照を持つことで、旧データ形式を維持したまま、新しいソフトウェアでの新データ形式に対応している。
【0008】
ただし、ストレージシステムにおけるストレージコントローラのアップグレードにおいては、ハードウェアストレージコントローラのハードウェアコンポーネントの違いやストレージシステムとしての仕様により、ストレージコントローラのアップグレードの完了後に、適用を開始しなければならない制御論理が存在する。例えば、新しいストレージコントローラには強力なCPUやハードウェアオフロードエンジンが搭載されており、より演算コストのかかるデータ暗号やデータ圧縮アルゴリズムの採用が可能となる場合などである。米国特許第9959043号明細書には、これらの制御論理の適用の開始を決定する方式については開示されていない。
【0009】
ストレージシステムのハードウェア及びソフトウェアを無停止でアップデートする際、冗長性及び性能低下の影響を抑制する技術が望まれる。
【課題を解決するための手段】
【0010】
本発明の一態様のストレージシステムは、プロセッサとメモリとを含みストレージドライブに入出力するデータを処理する、複数のストレージコントローラを含み、前記複数のストレージコントローラの各コントローラは、交換前の旧ストレージコントローラ又は交換後の新ストレージコントローラであり、前記新ストレージコントローラは、第1プログラムと、第2プログラムと、を実行可能であり、前記旧ストレージコントローラは、少なくとも、前記第2プログラムを実行可能であり、前記複数のストレージコントローラの全てが前記新ストレージコントローラである場合、前記新ストレージコントローラは、前記第1プログラムを用いて前記ストレージドライブに入出力されるデータを処理し、前記複数のストレージコントローラが少なくとも一つの前記旧ストレージコントローラを含む場合、前記複数のストレージコントローラの各ストレージコントローラは、前記第2プログラムを用いて前記ストレージドライブに入出力されるデータを処理する。
【発明の効果】
【0011】
本発明の一態様によれば、マルチコントローラストレージシステムにおいて、無停止かつ冗長性及び性能低下の影響を抑えて、新しいハードウェア及び新しいソフトウェアにアップデートすることができる。
【図面の簡単な説明】
【0012】
【
図1】実施例におけるストレージシステムの構成を示すブロック図である。
【
図2A】実施例におけるストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【
図2B】実施例におけるストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【
図2C】実施例におけるストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【
図2D】実施例におけるストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【
図2E】実施例におけるストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【
図3】実施例におけるストレージコントローラが有するメモリの構成を示す説明図である。
【
図4】実施例におけるストレージコントローラのメモリ内のプログラム領域の構成を示す説明図である。
【
図5】実施例におけるストレージコントローラのメモリ内の共有メモリの構成を示す説明図である。
【
図6】実施例におけるストレージコントローラのメモリに保持されるハードウェア構成情報の構成を示す説明図である。
【
図7】実施例におけるドライブの構成例を示す説明図である。
【
図8】実施例における論物管理テーブルの構成例を示す説明図である。
【
図9】実施例におけるストレージコントローラのメモリに保持されるソフトウェア互換性管理情報を示す説明図である。
【
図10】実施例におけるストレージコントローラが実行するコントローラアップデート処理の全体を示すフローチャートである。
【
図11】実施例におけるホストリード処理例のフローチャートを示す。
【
図12】実施例における、ストレージコントローラが実行する制御論理切り替え判定処理を含む制御論理を示すフローチャートである。
【
図13】実施例におけるデータ圧縮処理例のフローチャートを示す。
【
図14】実施例における、互換性判定処理を含む制御論理を示すフローチャートである。
【発明を実施するための形態】
【0013】
以下、図面に基づいて、本発明の実施例を説明する。添付図面では、機能的に同じ要素を同じ番号で表示する場合がある。添付図面は、本発明の原理に則った具体的な実施形態と実施例とを示している。それらの実施形態及び実施例は、本発明の理解のためのものであり、本発明を限定的に解釈するために用いてはならない。
【0014】
さらに、本発明の実施形態は、後述するように、汎用コンピュータ上で稼動するソフトウェアで実装してもよいし、専用ハードウェアで実装してもよいし、又はソフトウェアとハードウェアの組み合わせで実装してもよい。
【0015】
以下では「プログラム」を主語(動作主体)として本発明の実施形態における各処理について説明を行う場合がある。プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御装置)を用いながら行うため、プロセッサを主語とした説明としてもよい。プログラムの一部又は全ては専用ハードウェアで実現してもよく、また、モジュール化されていてもよい。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよい。
【0016】
以下の説明では、インターフェースは、ユーザインターフェースと、通信インターフェースとのうちの少なくとも1つを含んでよい。ユーザインターフェースは、1以上のI/Oデバイス(例えば入力デバイス(例えばキーボード及びポインティングデバイス)と出力デバイス(例えば表示デバイス))と表示用計算機とのうちの少なくとも1つのI/Oデバイスを含んでよい。
【0017】
通信インターフェースは、1以上の通信インターフェースデバイスを含んでよい。1以上の通信インターフェースデバイスは、1以上の同種の通信インターフェースデバイス(例えば1以上のNIC(Network Interface Card))であってもよいし2以上の異種の通信インターフェースデバイス(例えばNICとHBA(Host Bus Adapter))であってもよい。
【0018】
また、以下の説明では、メモリは、1以上のメモリデバイスを含む。メモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。メモリは、主に、プロセッサによる処理の際に使用される。
【0019】
また、以下の説明では、プロセッサは、1以上のプロセッサデバイスを含む。プロセッサデバイスは、典型的にはCPU(Central Processing Unit)である。
【0020】
また、以下の説明では、「アクセラレータ」は、1つ以上のハードウェア集積回路を含む。少なくとも1つのハードウェア集積回路は、典型的には、FPGA(Field Programmable Gate Array)である。
【0021】
また、以下の説明では、「xxxテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」を「xxx情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、1つのテーブルは、2以上のテーブルに分割されてもよいし、2以上のテーブルの全部又は一部が1つのテーブルであってもよい。
【0022】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号のうちの共通符号を使用し、同種の要素を区別する場合は、参照符号又は要素のID(例えば識別番号)を使用することがある。例えば、複数のストレージコントローラを区別しない場合には、「ストレージコントローラ102」と記載し、各ストレージコントローラを区別する場合には、「ストレージコントローラ102A」、「ストレージコントローラ102B」のように記載する。
【0023】
他の要素(例えば後述するストレージノード101、フロントエンドネットワークポート103、CPU(Central Processing Unit)104、メモリ105、バックエンドネットワークポート106、インターコネクトネットワークポート107、ドライブボックス109、ホスト計算機120等)も同様である。
【0024】
また、以下の説明では、ストレージシステムは、1以上のストレージ装置を含むことができる。少なくとも1つのストレージ装置は、汎用的な物理計算機であってもよい。また、少なくとも1つのストレージ装置が、仮想的なストレージ装置であってもよいし、SDx(Software-Defined anything)を実行してもよい。SDxとしては、例えば、SDS(Software Defined Storage)(仮想的なストレージ装置の一例)又はSDDC(Software-defined Datacenter)を採用することができる。
【0025】
ストレージシステムのハードウェア及びソフトウェアを無停止でアップデートする際、いくつかの課題が存在する。第1の課題は、ストレージシステム内に、古いストレージコントローラが存在しない状態で、古いストレージコントローラで動作できない制御論理を、新しいストレージコントローラで動作させる必要があることである。具体的には、ストレージシステム内にストレージコントローラがいくつ存在していても、全てのストレージコントローラが新しいストレージコントローラへのアップグレードが完了した後に、制御論理を切り替える必要がある。ここで、制御論理は、ストレージシステムの制御のために特定のアルゴリズムに従って処理を行うハードウェア又はハードウェアとソフトウェアの組合せである。
【0026】
第2の課題は、ストレージシステム内の制御論理について、古いストレージコントローラと新しいストレージコントローラとで機能として互換性があったとしても、ハードウェアのバージョンによって性能が変わる場合があり、処理性能が低下する可能性があることである。
【0027】
例えば、新しいストレージコントローラに搭載されているデータを圧縮・伸長するアルゴリズムの論理は、新しいストレージコントローラ上に搭載されたアクセラレータ回路を用いることで高速に圧縮・伸長できるが、古いストレージコントローラ上では、そのアクセラレータ回路が搭載されていないため、データを読み出す場合のCPU処理負荷が高く性能が低下するケースが考えられる。
【0028】
この特性が問題となる具体例をあげる。新しいストレージコントローラを増設した後に、古いストレージコントローラを減設するために制御論理を切り替えている途中に新しいストレージコントローラで障害が発生した場合、アップデート前の状態に復旧する必要がある。
【0029】
この時、障害が発生するまでの間に新しいコントローラがアクセラレータを用いて圧縮したデータを読み出す場合、アクセラレータを持たない古いストレージコントローラがソフトウェアで伸長してデータを読み出す必要があり、ホスト計算機からのデータ読み取りスループットが大きく低下してしまうという問題が発生する。
【0030】
また、正常な新しいストレージコントローラが少なくとも1つ以上、ストレージシステム内に残っている場合には、新しいストレージコントローラを減設する前に古いストレージコントローラが高速に読みだせる形式に変換してから減設するという方法をとることで、ホスト計算機からの読み取り性能の低下を防ぐことはできる。しかし、この場合には、変換が終わるまでストレージシステムをアップデート前の状態に戻すことができず、障害からの復旧に時間を要するという問題がある。
【0031】
本明細書の一実施例に係る、新しいストレージコントローラ増設後の、マルチコントローラストレージシステム構成において、新しいストレージコントローラ内で動作する新しいストレージソフトウェアと古いストレージコントローラ内で動作する古いソフトウェアとは、ストレージコントローラ間ネットワークを介して、共通の制御情報に透過的にアクセスする。また、ストレージコントローラ間で通信して行う処理では、新しいストレージコントローラ上のソフトウェアは古いストレージコントローラ上のソフトウェアとの互換性を満たすように動作する。
【0032】
このようにすることで、ストレージシステムで実施される各処理について、古いストレージコントローラ及び新しいストレージコントローラのどちら側でも実施することができ、I/Oを停止することなく、各処理を新しいストレージコントローラで実施するように切り替えていくことができる。
【0033】
また、アップグレード中の保守を行うケース及び中断して元の状態に復帰させるケースなども、柔軟かつ迅速に対応できる。同時に、アップデート前に設定されていたLUN(Logical Unit Number)等の構成情報、レプリケーションなどの状態及びストレージメディアのティアリング等に使用するアクセス頻度情報などをそのまま新しいコントローラで実施される処理にも引き継ぐことができる。
【0034】
本明細書の一実施例において、ストレージシステムの旧ストレージコントローラが新ストレージコントローラに交換される。新ストレージコントローラは、第1プログラム及び第2プログラムを実行可能であり、旧ストレージコントローラは、少なくとも第2プログラムを実行可能である。
【0035】
ストレージシステムにおける全ストレージコントローラの交換が完了する前、新ストレージコントローラ及び旧ストレージコントローラは、第2プログラムによって、ストレージドライブに入出力されるデータを処理し、交換完了後において、新ストレージコントローラは、第2プログラムに代えて、第1プログラムによってストレージドライブに入出力されるデータを処理する。これにより、ストレージシステムの処理性能の低下を抑制できる。
【0036】
図1は、本明細書の一実施例におけるストレージシステムの構成を示すブロック図である。本実施例のストレージシステム100は、複数のストレージコントローラ102及び112、1以上のインターコネクトスイッチ108及び1以上のドライブボックス109を有する。
図1には、複数のストレージコントローラ102及び112の例として、ストレージコントローラ102A~102D及び112A、112Bを示す。
【0037】
これらのうちストレージコントローラ102A~102Dは、これから減設される旧ストレージコントローラである。ストレージコントローラ102A及び102Bは、一つのストレージノード101Aに含まれ、ストレージコントローラ102C及び102Dは、他の一つのストレージノード101Bに含まれる。一方、ストレージコントローラ112A及び112Bは、増設された新ストレージコントローラであり、一つのストレージノード111Aに含まれる。
【0038】
減設される古いストレージコントローラ102は、それぞれ、CPU104、メモリ105、フロントエンドネットワークポート(以下、FEポートとも記載する)103、バックエンドネットワークポート(以下、BEポートとも記載する)106及びインターコネクトネットワークポート(以下、ICポートとも記載する)107を有する。同様に増設される新しいストレージコントローラ112は、それぞれ、CPU104、メモリ105、FEポート103、BEポート106及びICポート107を有する。
【0039】
図1の例では一つのストレージコントローラ102が一つのCPU104、一つのメモリ105、二つのFEポート103、一つのBEポート106及び一つのICポート107を有するが、これらの数は一例であり、実際の数は任意である。増設対象のストレージコントローラについても同様に各コンポーネントの実際の数は任意である。また、これらのコンポーネントの他、FPGAなどのハードウェアオフロードエンジンを搭載していてもよい。
【0040】
FEポート103は、ネットワークスイッチ121に接続される。ネットワークスイッチ121は、1以上のホスト計算機120(
図1の例ではホスト計算機120A及び120B)に接続される。ストレージコントローラ102は、FEポート103及びネットワークスイッチ121を経由してホスト計算機120からユーザデータの書き込み及び読み出し等のコマンドを受けて、それらに対する応答を返す。ストレージコントローラ112も同様である。
【0041】
BEポート106は、ドライブボックス109に接続される。ストレージコントローラ102は、BEポート106を経由してドライブボックス109へのユーザデータの書き込み及び読み出し等を行う。ストレージコントローラ112も同様である。
【0042】
ドライブボックス109は、ホスト計算機120によって書き込まれたデータを格納する1以上のストレージドライブ(単にドライブとも呼ぶ)110を含む。各ドライブ110は、記憶媒体を含む。この記憶媒体は、例えば、磁気ディスク又はフラッシュメモリ等の、大容量の不揮発性記憶媒体であってもよい。ドライブ110の典型的な例は、ハードディスクドライブやSSD(Solid State Drive)等である。
【0043】
ICポート107は、インターコネクトスイッチ108に接続される。インターコネクトスイッチ108は、各ストレージコントローラ102及び112のICポート107に接続される。ストレージコントローラ102は、ICポート107及びインターコネクトスイッチ108を介して、ストレージシステム100内の他のストレージコントローラ102と通信し、例えば制御情報等を送受信することができる。ストレージコントローラ102とストレージコントローラ112との通信、及び、ストレージコントローラ112間の通信も同様である。
【0044】
CPU104は、メモリ105に格納されたプログラムを実行することによって、ストレージコントローラ102及び112の種々の機能を実現する演算装置である。CPU104によって実現される機能の詳細については後述する。
【0045】
メモリ105は、CPU104によって実行されるプログラムを記憶する領域、ストレージコントローラ102及び112の制御情報を記憶する領域、並びに、ホスト計算機120による書き込み又は読み出しの対象のデータを記憶する領域等を含む。それらの領域の詳細については後述する。
【0046】
アクセラレータ回路113は、ストレージコントローラ102及び112上の種々の機能をCPU104からオフロードするための専用回路である。アクセラレータ回路113は例えばFPGAやASICなどの専用回路として実装される。オフロードする処理の例としては、データの圧縮及び伸長処理や、暗号化処理、データのハッシュ計算処理等である。アクセラレータ回路を使用してホストデータの圧縮及び伸長等の処理を行うことで、高い圧縮率を実現したり、CPU104の負荷を低減することができる。
【0047】
さらに、各ストレージコントローラ102及び112は、管理ネットワーク123を介して管理装置122に接続される。なお、
図1は、説明の容易のために、ストレージコントローラ102及び112の同一名称のハードウェア要素に同一符号を付している。しかし、ストレージコントローラ102及び112の間において、同一名称及び同一符号のハードウェア要素は、異なる構成を有し得る。例えば、ストレージコントローラ102、112のアクセラレータ回路113は、異なる処理を実行し得る。
【0048】
次に、
図2Aから
図2Eを参照して、ストレージコントローラ102のアップグレードの手順を説明する。
図2Aから
図2Eは、ストレージコントローラ数がストレージシステムの最大数未満であるときの、ストレージコントローラのアップグレードの手順の概要を示す説明図である。
【0049】
図2Aは、ストレージコントローラ102のアップグレードが開始される前のストレージシステム100を示す。このとき、ストレージシステム100は、旧ストレージコントローラ102A~102Dを有し、新ストレージコントローラ112A及び112Bを有していない。このとき、四つのストレージコントローラ102A~102Dによって冗長性が確保されている。
【0050】
図2Bは、ストレージノード101Bのアップグレードが実行されているときで、新ストレージノード111Aを増設した後のストレージシステム100を示す。新ストレージノード111Aは、新ストレージコントローラ112A及び112Bを含む。このとき、ストレージシステム100は、旧ストレージコントローラ102A~102Dに加えて、増設された新ストレージコントローラ112A及び112Bを有する。このとき、六つのストレージコントローラ102A~102D及び112A~112Bによって冗長性が確保されている。
【0051】
図2Cは、ストレージノード101Bのアップグレードが終了した後のストレージシステム100を示す。このとき、旧ストレージノード101B、つまり、旧ストレージコントローラ102C及び102Dは既に減設されており、ストレージシステム100は、旧ストレージコントローラ102A、102B及び新ストレージコントローラ112A、112Bを有する。このとき、四つのストレージコントローラ102A、102B、112A及び112Bによって冗長性が確保されている。
【0052】
図2Dは、ストレージノード101Aのアップグレードが実行されているときで、新ストレージノード111Bを増設した後のストレージシステム100を示す。新ストレージノード111Bは、新ストレージコントローラ112C及び112Dを含む。このとき、ストレージシステム100はF、旧ストレージコントローラ102A、102Bに加えて、増設された新ストレージコントローラ112A~112Dを有する。このとき、六つのストレージコントローラ102A、102B及び112A~112Dによって冗長性が確保されている。
【0053】
図2Eは、ストレージノード101Aのアップグレードが終了した後のストレージシステム100を示す。このとき、旧ストレージノード101A、つまり、旧ストレージコントローラ102A及び102Bは既に減設されており、ストレージシステム100は、新ストレージコントローラ112A~112Dを有する。このとき、四つのストレージコントローラ112A~112Dによって冗長性が確保されている。
【0054】
もしアップデートの途中で障害が発生した場合、アップグレード手順の逆順の操作を実施することで、初期状態を復旧することができる。
【0055】
図3は、実施例におけるストレージコントローラ102、112が有するメモリ105の構成例を示す説明図である。
【0056】
メモリ105は、記憶領域として、プログラム領域401、ローカルメモリ領域402、キャッシュメモリ領域403及び共有メモリ領域404を含む。プログラム領域401には、ストレージコントローラ102、112内のCPU104によって実行される制御プログラムが格納される。ローカルメモリ領域402は、制御プログラムが実施される際に一時的に使用するメモリ領域、及び、共有メモリ領域404に含まれる制御情報のコピーを格納する領域を含む。
【0057】
キャッシュメモリ領域403は、ホスト計算機120から書き込まれたデータ(ホストデータ又はユーザデータとも呼ぶ)及びホスト計算機120によって読み出されたデータが一時的に格納される領域である。共有メモリ領域404は、制御プログラムが使用するストレージシステム100に関する情報を含む。共有メモリ領域404は、全てのストレージコントローラ102及び112で共有する一意な情報であり、複数のストレージコントローラ102及び112に跨って格納されていてもよい。また、共有メモリ領域404は、ストレージコントローラ102、112及びメモリ105に対する障害耐性のために、複数のストレージコントローラ間で冗長化されていてもよい。
【0058】
図4は、実施例におけるストレージコントローラ102、112のメモリ105内のプログラム領域401の構成例を示す説明図である。
【0059】
プログラム領域401には、無停止コントローラアップデートシーケンス制御部501、処理引き継ぎ制御部502、コントローラ増設部503、コントローラ減設部504、制御論理切り替え部505、IOプログラム506及び圧縮伸長処理プログラム507が格納される。これらはいずれもメモリ105に格納され、CPU104によって実行されるプログラムである。
【0060】
以下の説明において上記の各部が実行する処理は、実際にはCPU104がプログラムに従って実行する。プログラムは、これらの他、例えばオペレーティングシステムを含むことができる。本実施例では、ストレージシステム内に複数のストレージコントローラが搭載されており、また各コントローラのハードウェア、及び各コントローラ上で動作するプログラムは、コントローラ毎に異なる世代のものが実装されていてもよい。世代の異なる各プログラムが連携して動作できるかどうかを判断するために、各プログラムはアップデートされるために値がインクリメントされるバージョン情報が付与されている。
【0061】
例えば、2021/8/1にリリースされた圧縮処理プログラムのバージョン情報は10.1.0、2022/8/1にリリースされた新しい圧縮処理プログラムのバージョン情報は11.0.0等のような形式で付与される。
【0062】
無停止コントローラアップデートシーケンス制御部501は、本実施例のストレージコントローラ102のリプレースのシーケンスを制御する。処理引き継ぎ制御部502は、リプレース対象のストレージコントローラ102から、LUN単位の処理制御権、FEポートのLUN登録及び共有メモリに格納されているデータをリプレース先のストレージコントローラ112に引き継ぐ処理を行う。コントローラ増設部503は、新ストレージコントローラ112の増設時の処理を行う。コントローラ減設部504は、旧ストレージコントローラ102の減設時の処理を行う。
【0063】
制御論理切り替え部505は、旧ストレージコントローラ102のアップグレードが完了し、ストレージシステム内の全てのストレージコントローラが新ストレージコントローラ112となった後で、制御論理を新ストレージコントローラ112専用論理へ切り替える処理を行う。IOプログラム506は、ホスト計算機120から発行されたIO要求に対して応答するプログラムである。
【0064】
圧縮伸長処理プログラム507はホストからライトされたデータに対して、データ量の削減を目的として、圧縮・伸長処理を行うプログラムである。圧縮・伸長処理はすべてCPUを使ってソフトウェアだけで処理するプログラムもあれば、ストレージコントローラに搭載されたアクセラレータ回路を用いて圧縮・伸長処理を実施するプログラムもある。
【0065】
図5は、実施例におけるストレージコントローラ102、112のメモリ105内の共有メモリ領域404の構成を示す説明図である。共有メモリ領域404には、ハードウェア構成情報601、実装コントローラ管理情報602、LUN構成情報603、FEポート構成情報604、引継ぎ管理情報605、実装ソフトウェア管理情報606及びソフトウェア互換性管理情報607が格納される。
【0066】
ハードウェア構成情報601の詳細は
図6を用いて説明する。実装コントローラ管理情報602は、ストレージシステム100に実装可能な最大コントローラ数の情報を保持している。LUN構成情報603は各論理ユニットの構成を示す情報であり、一つの論理ユニットに関して一つのLUN構成情報603が保持される。
【0067】
LUN構成情報603は、LUNID、登録済みFEポートIDリスト、及び制御権CPUIDを含む。LUNIDは、各論理ユニットの識別情報である。FEポートIDリストは、各論理ユニットへのパスが設定されているFEポートの識別情報のリストである。制御権CPUIDは、各論理ユニットへのI/O処理に係る制御情報に排他的にアクセスするCPU104の識別情報である。制御権CPUIDは、ストレージシステム内でユニークなIDであり、当該LUNの制御権を持つCPUがストレージシステム内のどのストレージコントローラ上のCPUかを特定することが可能である。
【0068】
各論理ユニットは、負荷分散及び障害時のフェイルオーバを目的として、複数の異なるストレージコントローラに属するFEポートに対応付けられている。FEポート構成情報604は、各FEポート103の構成を示す情報である。各FEポートにどのLUNIDが割り当てられているかを管理している。各ストレージコントローラ102は、当該ストレージコントローラ102が有する全てのFEポートに関するFEポート構成情報604を保持する。FEポート構成情報604は、FEポートID、FEポートアドレス及び各FEポートに割り当てられているLUNIDリストを含む。
【0069】
引継ぎ管理情報605は、リプレース対象の旧ストレージコントローラ102からリプレース先の新ストレージコントローラへ引き継ぐ対象を示す情報である。この情報は、ストレージコントローラのアップグレード処理において一時的に生成される。引継ぎ管理情報605は、減設対象コントローラID、LUN制御権情報、FEポートLUN登録情報、共有メモリ格納情報、LUN制御権移動先情報、FEポート毎移動先LUN登録情報及び共有メモリ移動先情報を含む。実装ソフトウェア管理情報606は、ストレージシステム内の各ストレージコントローラに搭載されているソフトウェアのバージョン情報を管理する情報である。
図9を用いて詳細を後述する。
【0070】
ソフトウェア互換性管理情報607は、ストレージコントローラに搭載されている各プログラムのバージョン間、及びコントローラバージョン間の互換性を示す情報である。ソフトウェア互換性管理情報607の詳細は
図10を用いて後述する。
【0071】
なお、
図4及び5を参照して説明したソフトウェアの一部は、ストレージコントローラ102、112の一方又は双方で省略されてもよく、他のプログラム又は情報がストレージコントローラ102、112の一方又は双方に実装されてよい。
【0072】
図6は、実施例におけるストレージコントローラ102、112のメモリ105に保持されるハードウェア構成情報601の構成を示す説明図である。ハードウェア構成情報601は、コントローラID701、コントローラバージョン情報702、プログラムバージョン情報703、実装FEポートID703、実装BEポートID704、実装CPUID705、実装インターコネクトポートID706、実装メモリID707、実装アクセラレータ情報708及びコントローラアップグレード状態管理情報709を含む。
【0073】
コントローラID701は、各ストレージコントローラの識別情報である。ストレージシステム100内に実装可能な最大のコントローラ数分のIDが用意されている。ストレージシステム100内に新しくストレージコントローラ102が追加されるときに、未使用のコントローラIDが割り当てられる。
【0074】
コントローラバージョン情報702は、コントローラID701に対応するハードウェアのバージョン情報である。これにより、各ストレージコントローラが旧ストレージコントローラなのか新ストレージコントローラなのかを判別できる。ストレージコントローラが未実装の場合にはNULLなど、無効を表す値が設定される。
【0075】
実装FEポートID703、実装BEポートID704、実装CPUID705、実装インターコネクトポートID706及び実装メモリID707は、それぞれ、各ストレージコントローラ102に実装されたFEポート103、BEポート106、CPU104、ICポート107及びメモリ105の識別情報である。実装アクセラレータ情報708は、各ストレージコントローラ102又は112に実装されているアクセラレータ回路113の種別に関する情報である。
【0076】
コントローラアップグレード状態管理情報709は、ストレージシステム100がコントローラアップグレード中でない通常の状態か、アップグレード中の状態か、アップグレード中の場合はどのコントローラID、どのコントローラバージョン、及びどのソフトウェアバージョンのコントローラにアップグレードしようとしているかを判別するための管理情報である。アップグレード中かどうかによって処理を切り替えることができるように、後述するストレージコントローラアップグレード全体シーケンス中で情報が設定される。
【0077】
ストレージシステム100内に、複数のストレージコントローラが実装可能な場合には、ハードウェア構成情報601は実装可能な最大のストレージコントローラの数だけテーブルを保持する。
【0078】
図7は実施例におけるドライブ110上に存在する領域を示す。ドライブ110は、データ領域1101及びメタデータ領域1102を含む。データ領域1101は、ホスト計算機120から受信したホストデータを格納する。後述するように、データ領域1101には、圧縮されたホストデータ又は非圧縮のホストデータが格納される。
【0079】
メタデータ領域1102は、同一ノード内のストレージコントローラがストレージシステム内で必要な処理を実行するために使用する制御データを格納する。
図7では、制御データの例として、論物管理テーブル1103を示す。論物管理テーブル1103は、ホスト計算機120がアクセスする論理アドレス空間と、ホストデータが格納される物理アドレス空間との間のマッピング情報を管理する。論物管理テーブル1103は、ストレージコントローラ間で共有される。論物管理テーブル1103の詳細は後述する。
【0080】
図8は、論物管理テーブル1103の構成例を示す。論物管理テーブル1103は、論理アドレス空間と物理アドレス空間との間のアドレスマッピングを管理する。
図8の構成例において、論物管理テーブル1103は、論理アドレス欄421、ドライブ番号欄422、物理アドレス欄423、圧縮後サイズ欄424、及びオフセット欄425を含む。
【0081】
論理アドレス欄421は、論理チャンク511の論理アドレスを示す。ドライブ番号欄422は、論理アドレスで指定される論理チャンクに割り当てられる記憶領域を提供するドライブの番号を示す。物理アドレス欄423は、論理アドレスで指定される論理チャンクに割り当てられる物理チャンクの物理アドレスを示す。
【0082】
圧縮後サイズ欄424は、論理チャンクデータが含まれる圧縮データのデータサイズを示す。上述のように、圧縮データは複数の論理チャンクデータから生成され、一つの論理チャンクのデータは圧縮データの一部である。なお、圧縮後サイズ欄424は、非圧縮でドライブ31に格納されている論理チャンクを、「非圧縮」と示す。オフセット欄425は、圧縮データの元データ、つまり、圧縮データを伸長したデータにおける、論理チャンクデータのオフセットを示す。
【0083】
図9は、実施例における実装ソフトウェア管理情報606の構成例を示す。実装ソフトウェア管理情報606は、ストレージシステム内の各ストレージコントローラにどのバージョンのソフトウェアがインストールされているかを把握するための管理情報である。実装ソフトウェア管理情報606は、コントローラID6061、ソフトウェア種別6062、ソフトウェアサブ種別6063、及びソフトウェアバージョン情報6064を含む。
【0084】
コントローラID6061は、各ストレージコントローラの識別情報である。ハードウェア構成情報601上に格納されている、コントローラID701と対応しており、コントローラID701をキーとして、当該コントローラに実装されているソフトウェアのバージョン情報と、実装されているコントローラバージョン情報702とを対応付けることができる。
【0085】
ソフトウェア種別6062は、プログラム領域401に格納されているソフトウェアの種別を表す。ソフトウェアサブ種別6063は、ソフトウェア種別6061の中に特定のコントローラバージョン以降でしか動作しないソフトウェア(プログラム)や、特定のアクセラレータ回路がないと動作しないソフトウェア(プログラム)など、より細かくバージョン管理が必要な場合に使用する。ソフトウェアバージョン情報6064は当該ソフトウェアに新たな機能を追加したり、すでにある機能を改良したりした結果、既存の機能との互換制の有無を把握するためのバージョン番号である。
【0086】
図10は、実施例におけるソフトウェア互換性管理情報607の構成例を示す。ソフトウェア互換性管理情報607は、異なるストレージコントローラ間で連携が必要なソフトウェア(プログラム)について、互換性の有無を判断するための情報である。異なるストレージコントローラ間で連携が必要なソフトウェアの例としては、無停止コントローラアップデートシーケンス制御部501のように、ストレージコントローラ間で制御情報やデータの通信を必要とするソフトウェアが挙げられる。
【0087】
また、圧縮又は暗号アルゴリズムなど、CPU処理負荷が高く、最新ハードウェアの高性能なCPUでない場合に性能低下を抑制するために動作させたくないような処理をするソフトウェアも例として挙げられる。
【0088】
ソフトウェア互換性管理情報607は、ソフトウェア種別6071、ソフトウェアサブ種別6072、ソフトウェアバージョン情報60763、及びソフトウェア互換性情報6074を含む。ソフトウェア種別6071は、プログラム領域401に格納されているソフトウェアの種別を表す。ソフトウェアサブ種別6072は、ソフトウェア種別6071の中に特定のコントローラバージョン以降でしか動作しないものや、特定のアクセラレータ回路がないと動作しないものなど、より細かくバージョン管理が必要な場合に使用する。
【0089】
ソフトウェアバージョン情報6073は当該ソフトウェアに新たな機能を追加したり、すでにある機能を改良したりした結果、既存の機能との互換性の有無を把握するためのバージョン番号である。
【0090】
ソフトウェア互換性情報6074は、あるソフトウェア種別6071のバージョン番号がソフトウェアバージョン情報6073であるときに、どのハードウェアが互換性を有するかを把握するための情報である。つまり、各ソフトウェア種別がいずれのハードウェアで実行可能であるかを示す。この実施例では、3種類のストレージコントローラタイプを想定している。
【0091】
コントローラバージョン1は圧縮・伸長アクセラレータを搭載していないストレージコントローラであり、コントローラバージョン2は第1世代のアクセラレータを搭載したストレージコントローラであり、コントローラバージョン3は第2世代のアクセラレータを搭載したストレージコントローラである。この実施例では、第2世代のアクセラレータは第1世代と比較して、より高度な圧縮アルゴリズムを搭載することで、第1世代よりもデータ圧縮率が優れ、さらに性能面でも第一世代よりも優位であると想定する。
【0092】
また、それぞれのバージョン・アルゴリズムについて性能に関する情報も付与される。本例では、性能影響を大・中・小と表現しているが、100MB/sのような具体的な処理性能(処理速度)を絶対値で表現してもよく、レベル数も限定されない。ここでは性能影響小は、アクセラレータ回路を使って実施するアルゴリズム(プログラム)であり、CPU負荷としては最も小さい場合を指す。性能影響中は、gzipやLZ4など、ソフトウェアで処理するように設計されたアルゴリズムを指す。
【0093】
性能影響大は、本来はアクセラレータ回路を使って実施する高度なアルゴリズムをソフトウェアで実施することにより、CPU負荷が非常に大きくなるアルゴリズムのことを指す。基本的にCPU負荷大のアルゴリズムはアクセラレータ回路が故障したときにデータの読み出しができるようにするための備えであり、通常時に使用することは想定していない。
【0094】
本図では、ソフトウェアバージョン情報6073は、ソフトウェアバージョン10.0.0と11.0.0の2種類を記載している。バージョン10.0.0はコントローラバージョン2がリリースされたと同時にリリースされ、ソフトウェアバージョン11.0.0はコントローラバージョン3と同時にリリースされたと想定する。
【0095】
この時、ソフトウェア互換性管理情報607を参照すると、ソフトウェアバージョン情報6073が10.0.0の場合、無停止コントローラアップデートシーケンス制御部501のソフトウェア互換性情報6704は、コントローラバージョン1から2に対するアップグレードが可能であると示す。また、ソフトウェアバージョン情報6073を11.0.0にアップグレードすることで、コントローラバージョン3へのアップグレードが可能になると判断することができる。
【0096】
次にソフトウェア種別6071が圧縮伸長処理プログラムの行について説明する。圧縮伸長処理プログラム507は、ソフトウェア方式、アクセラレータ方式1、アクセラレータ方式2の3種類を例として挙げている。ソフトウェア方式とは、gzipやLZ4などで知られる、ソフトウェアだけで動作可能な圧縮・伸長アルゴリズムのことである。アクセラレータ方式1は、ソフトウェアバージョン10.0.0以降、かつコントローラバージョン2においてサポートされている方式である。
【0097】
アクセラレータ方式1はソフトウェア圧縮方式と比較してソフトウェアバージョン10.0.0においては、アクセラレータが搭載されているコントローラバージョン2においては、性能影響小で伸長することが可能であるが、アクセラレータを搭載しないコントローラバージョン1においては、アクセラレータ方式1で圧縮されたデータをソフトウェアだけでは伸長することができず、コントローラ間でデータの読み出しの互換性がないことがわかる。
【0098】
図11は、ストレージコントローラが実行するコントローラアップデート処理の全体を示すフローチャートである。本実施例では、ストレージノード単位にアップデートする処理手順を示す。ストレージコントローラ単位にアップデートする場合であっても同様の手順で実施可能である。
【0099】
最初に、ストレージコントローラ102は、アップグレード元のノードを特定する(ステップS101)。例えば、管理装置122からアップグレード元のノードの指定を受け取る。複数のアップグレード元ノードが指定されている場合、その中から一つのアップグレード元ノードが選択される。ストレージコントローラ102は、さらに、アップグレード先の情報を受け取る。アップグレード先の情報は、アップグレード先のハードウェア情報及びソフトウェア情報を含む。
【0100】
次に、ストレージコントローラ102は、ハードウェア構成情報601とソフトウェア互換性管理情報607とを参照して、アップグレード可能かどうかを判定する。アップグレード不可能と判断した場合(S102:NO)、コントローラアップデート処理は拒絶されて、終了する。アップグレードを実施するためには、アップグレード対象のノードのソフトウェアバージョンを、アップグレードに対応している適切なバージョンにアップデートする必要がある。
【0101】
ストレージコントローラ102は、ハードウェア構成情報601を参照し、アップデート元のコントローラIDに対応するコントローラバージョン情報702を取得する。次に、アップデート先のハードウェア情報及びソフトウェア情報を参照して、コントローラバージョン及び無停止コントローラアップデートシーケンス制御部501のソフトウェアバージョンを取得する。
【0102】
次に、ストレージコントローラ102は、ソフトウェア互換性管理情報607を参照し、ソフトウェア種別6071が無停止コントローラアップデートシーケンス制御部501に一致し、かつソフトウェアバージョン情報6073がアップグレード先コントローラにインストールされているソフトウェアバージョンに一致し、かつソフトウェア互換性情報6074がアップグレード先コントローラのコントローラバージョンに一致するエントリを取得する。
【0103】
取得した結果、コントローラアップグレードがサポートされていると記載されている場合にはアップグレード可能と判断する。また、エントリの中身がN/A(Not Available)、もしくは条件に一致するエントリが見つからない場合はアップグレード不可能と判断する。
【0104】
アップグレード可能と判断した場合(S102:YES)、コントローラアップデート処理は許可される。ストレージコントローラ102は、アップグレード対象のノードのハードウェア構成情報601のコントローラアップグレード状態管理情報709を“通常状態”から“アップグレード中”に変更する(S103)。
【0105】
次に、ストレージコントローラ102は、実装コントローラ管理情報602を参照して、現在の構成が最大構成になっているかどうかを判定する(S104)。すでに最大構成であると判断した場合(S104:YES)、減設してから増設の手順でストレージコントローラをアップグレードすると判断し、S105へ進む。また、ストレージコントローラ数が最大未満であると判断した場合(S104:NO)、増設してから減設の手順でストレージコントローラをアップグレードすると判断し、S113へ進む。
【0106】
S105では、減設対象のストレージコントローラからLUNの制御権、LUNのFEポート割当及び格納されている共有メモリ情報を減設対象ではない別のストレージコントローラ102、112またはその両方に跨って退避する。退避した情報は、引継ぎ管理情報605に格納する。
【0107】
次に、ストレージコントローラ102は、減設対象の旧ストレージノード101を減設する(S106)。具体的には、ストレージシステムとして旧ストレージノード101のハードウェア構成情報601に対応する、コントローラバージョン情報702を未実装に変更する。
【0108】
次に、ストレージコントローラ102は、作業員による機器の設置及びケーブル等の配線を促すために、旧ストレージノード101の減設作業及び新ストレージノード111の増設作業指示を管理画面に表示し(S107)、作業員からの操作を待つ(S108)。管理画面とは例えば管理装置122の表示装置(図示省略)によって表示される画面である。
【0109】
作業員からの操作を受け付けたら、ストレージコントローラ102は、新ストレージノード111の増設処理を実行する(S109)。具体的には、ストレージコントローラ102は、新ストレージノード111に搭載されている新ストレージコントローラ112に対応するハードウェア構成情報601を初期設定する。この際、ストレージコントローラ102は、新ストレージコントローラ112のコントローラID701として、ストレージシステム内で未使用のコントローラIDを割り当てる。これにより、ストレージノードコントローラ102はハードウェア構成情報601を参照することで、新ストレージコントローラ112がストレージシステム上に実装されたことを検出できるようになる。
【0110】
次に、ストレージコントローラ102は、増設した新ストレージノード111のハードウェア構成情報601のコントローラアップグレード状態管理情報709を“通常状態”から“アップグレード中”に変更する(S110)。この状態変更により、ストレージコントローラは当該コントローラがアップグレード作業中であることが判断できる。
【0111】
次に、ストレージコントローラ102は、引継ぎ管理情報605に格納した情報を用いて、LUN制御権、FEポート毎のLUN割当、退避前ストレージコントローラに配置されていた共有メモリ情報を増設した新ストレージコントローラ112に移動させる(S111)。次にS112へ進む。
【0112】
S112では、ストレージコントローラ102は、ストレージシステム内のすべてのストレージコントローラに対応するハードウェア構成情報601のコントローラバージョン情報702を参照して、ストレージシステム内に旧ストレージコントローラ102が残っているかどうかを判定する。旧ストレージコントローラ102が残っている場合には、S101に戻る。全て新ストレージコントローラ112へ置き換えが完了していたら、S120へ進む。
【0113】
S120では、ストレージコントローラ112は、ハードウェア構成情報601のコントローラアップグレード状態管理情報709を“アップグレード中”から“通常状態”に変更する。
【0114】
S113からS119までは、ストレージコントローラノードを増設してから減設する手順でアップグレードを実施する処理手順である。
【0115】
S113では、ストレージコントローラ102は、作業員による機器の設置及びケーブル等の配線を促すために、新ストレージノード111の物理的な増設作業指示を管理画面に表示し、次に、作業員からの操作を待つ(S114)。
【0116】
作業員からの操作を受け付けたら、ストレージコントローラ102は、新ストレージノード111の増設処理を実行する(S115)。具体的には、ストレージコントローラ102は、新ストレージノード111に搭載されている新ストレージコントローラ112に対応するハードウェア構成情報601を初期設定する。この際、ストレージコントローラ102は、新ストレージコントローラ112のコントローラID701として、ストレージシステム内で未使用のコントローラIDを割り当てる。これにより、ストレージコントローラ102はハードウェア構成情報601を参照することで、新ストレージコントローラ112がストレージシステム上に実装されたことを検出できるようになる。
【0117】
ストレージコントローラ102は、増設した新ストレージノード111のハードウェア構成情報601のコントローラアップグレード状態管理情報709を“通常状態”から“アップグレード中”に変更する(S116)。この状態変更により、ストレージコントローラは、当該コントローラがアップグレード作業中であることが判断できる。
【0118】
次に、ストレージコントローラ102は、減設対象のストレージコントローラ102に登録されているLUN制御権、FEポート毎のLUN割当及び減設対象のストレージコントローラ102上に配置されている共有メモリ情報を増設した新ストレージコントローラ112に移動させる(S117)。
【0119】
移動が完了したら、ストレージコントローラ102は、減設対象のストレージノードを減設する(S118)。具体的には、ストレージシステムとして旧ストレージノード101のハードウェア構成情報601に対応する、コントローラバージョン情報702を未実装に変更する。
【0120】
次に、ストレージコントローラ102は、作業員による機器やケーブルの取り外しを促すために、減設した旧ストレージノード101の物理的な減設作業指示を管理画面に表示する(S119)。その後、S112へ進む。なお、S119の指示を受けて、作業員は物理的な減設作業を実行する。
【0121】
図12は実施例におけるホストリード処理例のフローチャートを示す。コントローラ102又は112がホスト計算機120からリード要求を受信する。当該コントローラ102又は112のCPU104は、IOプログラム506を実行する。IOプログラム506は、ホスト計算機120から受信したIO要求、ここではリード要求を解析する(S201)。リード要求はリード要求データを示し、具体的には、アクセス先の論理ボリュームの識別子、要求データの開始論理アドレス及びデータ長を示す。つまり、転送すべきデータを格納する1又は複数の論理チャンクが指定される。
【0122】
次に、IOプログラム506は、論物管理テーブル1103を参照し、指定された論理チャンクそれぞれが対応する物理チャンクのドライブ番号及び物理アドレスを特定する(S202)。
【0123】
次に、IOプログラム506は、ドライブ110からホストデータを読み出し、メモリ105のキャッシュメモリ領域403に格納する(S203)。具体的には、IOプログラム506は、論物管理テーブル1103から取得した物理アドレスからホストデータを読み出す。
【0124】
次に、IOプログラム506は、ドライブ110から読み出されたデータが、圧縮データか非圧縮データかを判定する(S204)。IOプログラム506は、論物管理テーブル1103の圧縮後サイズ欄11034を参照し、圧縮データ又は非圧縮データを判定できる。
【0125】
読み出されたデータが圧縮データである場合(S204:YES)、IOプログラム506は、当該ストレージコントローラ102又は112上にデータ伸長用の専用回路(アクセラレータ回路113)が実装されているかどうかを判定する(S205)。具体的には、ハードウェア構成情報601の実装アクセラレータ情報708を参照し、読み出した圧縮データを伸長する論理が含まれているかを判定する。
【0126】
専用回路が実装されている場合(S205:YES)、IOプログラム506は、専用回路を使ってデータを伸長し(S206)、そのホストデータをホスト計算機に転送する(S208)。
【0127】
専用回路が実装されていない場合(S205:NO)、IOプログラム506は、専用回路を使わず、ソフトウェア的に圧縮データを伸長し(S207)、そのホストデータをホスト計算機に転送する(S208)。通常であれば、アクセラレータ回路を使って圧縮したデータは、同じアクセラレータ回路を使って伸長することが可能であるが、途中でアクセラレータ回路が故障した場合や、アクセラレータ回路を減設した場合には、アクセラレータによって圧縮されたデータを、アクセラレータ回路を使わずに伸長が必要となるケースも想定される。
【0128】
読み出されたデータが非圧縮データである場合(S204:NO)、IOプログラム506は、そのホストデータをホスト計算機に転送する(S208)。
【0129】
図13は実施例におけるデータ圧縮処理例のフローチャートを示す。データ圧縮処理は、ドライブ110に格納するデータ量を削減することを目的にホスト計算機120から書き込まれたデータに対して実施される。図示はしないが、ストレージコントローラ102又は112がホスト計算機120からライト要求を受け取るまでのシーケンスを説明する。最初に、ストレージコントローラ102又は112がホスト計算機120からライト要求を受信する。
【0130】
当該コントローラ102又は112のCPU104はIOプログラム506を実行する。IOプログラム506は、ホスト計算機120から受信したデータを、キャッシュメモリ領域403に格納する。その後、データの冗長化を目的として、別ストレージコントローラ102又は112上のキャッシュメモリ領域403にデータを転送し、ホスト計算機120に対してライト処理が完了したことを通知する。
【0131】
本図を用いて説明する圧縮処理は、ホスト計算機120からキャッシュメモリ領域403にデータを格納した直後に実施してもよいし、ホスト計算機からのライト要求とは言同期にキャッシュメモリ領域403上に一定量のデータ量が蓄積されるのを待った後で実施してもよい。IOプログラム506は、次に圧縮処理を実施し、圧縮処理が完了した後に、ドライブ110にデータを格納する。
【0132】
最初に、IOプログラム506はホスト計算機120からライトされ、キャッシュメモリ領域403に格納されているデータを特定する(S301)。具体的には、アクセス先の論理ボリュームの識別子、ライトデータの開始論理アドレス及びデータ長を示す。つまり、圧縮すべきデータを格納する1又は複数の論理チャンクが指定される。
【0133】
次に、IOプログラム506は、当該コントローラ上にデータ圧縮用の専用回路(アクセラレータ回路113)が実装されているかどうかを判定する(S302)。具体的には、ハードウェア構成情報601の実装アクセラレータ情報708を参照し、読み出した圧縮データを圧縮する論理が含まれているかを判定する。
【0134】
専用回路が実装されていない場合(S302:NO)、IOプログラム506は、専用回路を使わず、ソフトウェア的に圧縮データを圧縮し(S306)、データ圧縮処理を終了する。
【0135】
専用回路が実装されている場合(S302:YES)、IOプログラム506は、当該ストレージコントローラ102又は112がアップグレード中かどうかを判定する(S303)。具体的には、ハードウェア構成情報601のコントローラアップグレード状態管理情報709を参照し、当該ストレージコントローラ102又は112がアップグレード中か、そうでないかを判定する。
【0136】
アップグレード中でない場合(S303:NO)、IOプログラム506は専用回路を使ってデータを圧縮し(S305)、データ圧縮処理を終了する。アップグレード中での場合(S303:YES)、IOプログラム506は後述する互換性情報判定処理を呼び出し、その結果に基づいてデータ圧縮処理を実施し(S304)、データ圧縮処理を終了する。
【0137】
図14は実施例における、ストレージコントローラ102又は112が実行する互換性判定処理を含む制御論理を示すフローチャートである。
【0138】
最初にIOプログラム506は、自ストレージコントローラ102又は112のバージョン情報と、そのストレージコントローラに実装されているソフトウェアのバージョン情報とを取得する(S401)。具体的には、実装ソフトウェア管理情報606の中の情報6064を参照して自ストレージコントローラ102又は112に実装されているソフトウェアバージョンを特定し、ハードウェア構成情報601の中のコントローラバージョン情報702を参照して、自ストレージコントローラ102又は112のハードウェアバージョンを特定する。
【0139】
次に、IOプログラム506は、アップグレード先又はアップグレード元のストレージコントローラのバージョン情報とそのストレージコントローラに実装されているソフトウェアのバージョン情報とを取得する(S402)。
【0140】
具体的には、IOプログラム506は、コントローラアップグレード状態管理情報709を参照して、自ストレージコントローラ102又は112がストレージシステム内のどのコントローラIDのストレージコントローラに、又は、どのコントローラIDのストレージコントローラから、アップグレードしようとしているかを特定する。アップグレード先又はアップグレード元コントローラIDに対応するハードウェア構成情報601を参照することで、S401と同様にアップグレード先コントローラ又はアップグレード先コントローラのハードウェアバージョンと、実装されているソフトウェアバージョンとを取得する。
【0141】
次に、IOプログラム506は、アップグレード元・先両方のストレージコントローラでサポートしている圧縮アルゴリズムを抽出する(S403)。具体的には、ソフトウェア互換性管理情報607の中の、ソフトウェア種別6071が圧縮伸長処理プログラムに該当する行を参照し、ソフトウェア互換性情報6074の列がアップグレード元・先のコントローラバージョンに対応するセルを参照し、アップグレード元・先両方のセルが“サポート”になっているソフトウェアサブ種別6072を特定する。
【0142】
条件を満たす圧縮アルゴリズム(ソフトウェアサブ種別)が、一つである場合(S404:NO)、IOプログラム506は、その圧縮アルゴリズムで圧縮を行う(S406)。複数の圧縮アルゴリズム(ソフトウェアサブ種別)が条件を満たす場合(S404:YES)、IOプログラム506は、性能影響の観点から最も優先度が高い圧縮アルゴリズムを選択して、圧縮処理を行う(S405)。
【0143】
図10では性能影響の大きさを大・中・小と相対的な値で表現したが、ポリシとしてはシステム全体としての性能影響が小さくなるよう、かつCPUなどのハードウェアリソースに余裕がないアップグレード元の性能影響が小さくなるように選択してよい。ストレージシステム全体のIO処理速度が最も速い圧縮アルゴリズムが選択される。
【0144】
具体的にはアップグレード元・先それぞれの性能影響が小・小>小・中>中・小>中・中>小・大>中・大>大・小>大・中>大・大の順で優先度をつける。条件を満たすアルゴリズムの中で最も優先度が高いものが選択される。アップグレード元の性能影響を小さくするように選択する理由は、一般にコントローラをアップグレードするとことで、最新世代のCPUなどのハードウェアを採用することで、アップグレード前と比較して性能向上を期待できるからである。このように、本明細書の一実施例において、IO処理速度が最も高速なプログラムが選択されるように優先度が予め設定される。
【0145】
図10を例に挙げると、アップグレード元のソフトウェアバージョンが11.0.0かつコントローラバージョンが1であり、アップグレード先のソフトウェアバージョンが11.0.0かつコントローラバージョンが2の場合、両方のコントローラがサポートしている圧縮伸長アルゴリズムはソフトウェア方式1、及びアクセラレータ方式1であると特定できる。
【0146】
ただし、アクセラレータ方式1について、実際にアクセラレータを使って圧縮・伸長が可能なのはコントローラバージョン2のみであり、コントローラバージョン1はアクセラレータ方式1に対応するアクセラレータを搭載しておらず、互換性のためだけに低速だがソフトウェアでデータを圧縮・伸長可能であることを示している。この時、コントローラバージョン1でアクセラレータ方式1のアルゴリズムを使ってデータを圧縮・伸長した場合、IO処理性能が大きく低下することが懸念される。そのため、アクセラレータ回路を使用することなく、ソフトウェアを使用してデータ圧縮する方式が選択される。
【0147】
アップグレード元のソフトウェアバージョンが11.0.0かつコントローラバージョンが2であり、アップグレード先のソフトウェアバージョンが11.0.0かつコントローラバージョンが3の場合、両方のコントローラがサポートしている圧縮伸長アルゴリズムはソフトウェア方式1、アクセラレータ方式1、及びアクセラレータ方式2であると特定できる。
【0148】
アクセラレータ方式1について、実際にアクセラレータを使って圧縮・伸長が可能なのはコントローラバージョン2のみであり、コントローラバージョン3はアクセラレータ方式1に対応するアクセラレータを搭載しておらず、互換性のためだけに低速だがソフトウェアでデータを圧縮・伸長可能であることを示している。
【0149】
また、アクセラレータ方式2について、実際にアクセラレータを使って圧縮・伸長が可能なのはコントローラバージョン3のみであり、コントローラバージョン2はアクセラレータ方式2に対応するアクセラレータを搭載しておらず、互換性のためだけに低速だがソフトウェアでデータを圧縮・伸長可能であることを示している。
【0150】
そのため、アクセラレータ回路を使用することなく、ソフトウェア方式1を使用してデータ圧縮する方式が選択される。
【0151】
このように、性能影響優先度は、アップグレード元及び先の両ストレージコントローラでアクセラレータ回路を使用可能なアクセラレータ方式の圧縮アルゴリズムが、優先的に選択されるように決定される。IOプログラム506は、両ストレージコントローラでサポートしているアクセラレータ方式のアルゴリズムで圧縮を行う。両ストレージコントローラでサポートしているアクセラレータ方式のアルゴリズムがない場合、IOプログラム506は、両ストレージコントローラでサポートしているソフトウェア方式のアルゴリズムで圧縮する。
【0152】
なお、データ圧縮処理のためのソフトウェアサブ種別(アルゴリズム)の選択に関する上記説明は、他の処理のソフトウェアサブ種別の選択に対しても適用できる。上述のように、ストレージコントローラがアップグレード中かどうかを判定し、さらにアップグレード元・先の両ストレージコントローラにとって性能影響が小さい処理を選択することで、ストレージシステム100内の全てのストレージコントローラのアップグレードが完了する前に、一部の新ストレージコントローラ112が、旧ストレージコントローラ102との互換性がない処理を実施してしまうことを回避する。
【0153】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0154】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。
【0155】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【符号の説明】
【0156】
100 ストレージシステム
101 ノード
102、112 ストレージコントローラ
104 CPU
105 メモリ
110 ドライブ
113 アクセラレータ回路
120 ホスト
122 管理装置
601 ハードウェア構成情報
606 実装ソフトウェア管理情報
607 ソフトウェア互換性管理情報