(57)【特許請求の範囲】
【請求項１】
外部装置から要求を受け付ける第１のインターフェイス装置と、
記憶資源と、
前記第１のインターフェイス装置及び前記記憶資源に接続されているマルチコアプロセッサと
を有し、
前記記憶資源が、複数のサブ記憶資源を含み、
前記マルチコアプロセッサは、複数のプロセッサコアを有し、
前記複数のプロセッサコアに、前記複数のサブ記憶資源がそれぞれ割り当てられており、
前記記憶資源が、どのプロセッサコアにどのサブ記憶資源が割り当てられているかを表す資源管理情報を記憶しており、
前記マルチコアプロセッサの電源が投入された後に、前記複数のプロセッサコアのうちの或るプロセッサコアが、所定のイベントが発生した場合、前記或るプロセッサが、
（ａ）前記資源管理情報を基に、前記或るプロセッサコアに割り当てられているサブ記憶資源を特定し、
（ｂ）前記特定したサブ記憶資源を使用してリブート処理をする、
を行い、
前記或るプロセッサコアは、前記（ｂ）を行う都度に、前記（ｂ）のリブート処理の結果を表すログを作成して前記記憶資源に格納し、
前記或るプロセッサコアは、前記記憶資源に格納されているログが所定の条件に適合する場合には、所定のイベントが発生しても、前記（ａ）及び（ｂ）を非実行とする、
要求処理システム。
【請求項２】
請求項１記載の要求処理システムであって、
複数の物理記憶装置で構成された一以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループと、
前記複数の物理記憶装置と通信する第２のインターフェイス装置と
を備え、
一つのＲＡＩＤグループは、二以上の物理記憶装置で構成されており、
前記マルチコアプロセッサが、前記第２のインターフェイス装置に接続されており、
前記記憶資源は、第１のメモリと、第２のメモリとを含み、
前記第１のメモリは、前記資源管理情報と、ＢＩＯＳ（Basic Input/OutPut System）と、ブートローダと、ＯＳ（Operating System）と、前記ＯＳ上で動作するアプリケーションプログラムとを記憶し、
前記第２のメモリは、前記複数のプロセッサコアにそれぞれ割り当てられた複数のサブメモリ領域を含み、
各サブメモリ領域は、ＯＳ用のサブメモリ領域であるＯＳ領域と、アプリケーションプログラム用のサブメモリ領域であるＡＰ領域とを含み、
前記マルチコアプロセッサの電源が投入された場合、それぞれのプロセッサコアが、
（Ｈ１）前記第１のメモリから前記ＢＩＯＳをロードし、
（Ｈ２）前記ＢＩＯＳを実行することにより、前記第１のメモリから前記ブートローダをロードすることと、前記ブートローダを起動することとを実行し、
（Ｈ３）前記ブートローダを実行することにより、前記資源管理情報が表す、そのプロセッサコアに割り当てられているＯＳ領域に、前記第１のメモリから前記ＯＳをコピーすることと、前記ＯＳを起動することとを実行し、
（Ｈ４）前記ＯＳを実行することにより、前記資源管理情報が表す、そのプロセッサコアに割り当てられているＡＰ領域に、前記１のメモリから前記アプリケーションプログラムをコピーすることと、前記アプリケーションプログラムを起動することとを実行し、
（Ｈ５）前記アプリケーションプログラムを実行し、
前記或るプロセッサコアは、前記アプリケーションプログラムを実行することにより、Ｉ／Ｏ（Input/Output）処理を行い、
前記Ｉ／Ｏ処理は、前記要求から特定されたアクセス先領域に基づくＲＡＩＤグループを構成している二以上の物理記憶装置に、前記要求に付随したライト対象のデータを書き込むこと、又は、前記特定されたアクセス先領域に基づくＲＡＩＤグループを構成している二以上の物理記憶装置から、リード対象のデータを読み出して前記外部装置に提供することを含み、
前記或るプロセッサコアは、前記（Ｈ１）〜（Ｈ５）の処理を行なった後に、前記所定のイベントが発生したときに前記Ｉ／Ｏ処理を行っていれば、前記複数のプロセッサコアのうちの一以上の他のマルチコアプロセッサに前記Ｉ／Ｏ処理を渡し、その後で、リセット処理を実行する、
要求処理システム。
【請求項３】
請求項２記載の要求処理システムであって、
前記或るプロセッサコアは、前記（ｂ）において、以下の（ｘ）〜（ｚ）：
（ｘ）前記或るプロセッサコアに割り当てられているサブメモリ領域を初期化し、前記ブートローダを前記第１のメモリからロードし、及び、前記ブートローダを起動し、それにより、前記（Ｈ３）以降を実行する；
（ｙ）前記或るプロセッサコアに割り当てられているＯＳ領域内の前記ＯＳを起動し、それにより、前記（Ｈ４）以降を実行する；
（ｚ）前記或るプロセッサコアに割り当てられているＡＰ領域内の前記アプリケーションをアンロードし、前記或るプロセッサコアに割り当てられているＡＰ領域に前記第１のメモリから前記アプリケーションプログラムをコピーし、及び、前記アプリケーションプログラムを起動し、それにより、前記（Ｈ５）を実行する、
のうちのいずれか一つを実行する、
要求処理システム。
【請求項４】
請求項３記載の要求処理システムであって、
第１の障害レベルが、前記（ｘ）に対応しており、第２の障害レベルが、前記（ｙ）に対応しており、第３の障害レベルが前記（ｚ）に対応しており、
前記第１のメモリが、どの種類の障害が第１乃至第３の障害レベルのどの障害レベルに対応するかを表す障害レベル判定情報を記憶しており、
前記所定のイベントは、障害の検出であり、
前記或るプロセッサコアは、前記（ｘ）乃至（ｚ）のうちの、前記障害レベル判定情報が表す、前記検出された障害の種類に対応する障害レベルに対応した処理を実行する、
要求処理システム。
【請求項５】
請求項４記載の要求処理システムであって、
前記各サブメモリ領域は、ログ用のサブメモリ領域であるログ領域を含み、
前記或るプロセッサコアは、前記（ｂ）において、リブート処理の結果を表すログを、前記或るプロセッサコアに割り当てられているログ領域に書き込む、
要求処理システム。
【請求項６】
請求項３乃至５のうちのいずれか１項に記載の要求処理システムであって、
前記所定のイベントが、前記第１のメモリに記憶されているＯＳ及び／又はアプリケーションプログラムの交換であり、
前記（ｂ）では、前記（ｘ）が実行される、
要求処理システム。
【請求項７】
請求項１記載の要求処理システムであって、
複数のリブートレベルに対応した複数のリブート処理があり、
各リブート処理は、一以上のサブ処理を含み、
リブートレベルが高いほど、リブート処理に含まれるサブ処理の数が多く、
前記或るプロセッサコアが、前記（ｂ）において、発生したイベントに応じたリブートレベルに対応するリブート処理を実行する、
要求処理システム。
【請求項８】
請求項７記載の要求処理システムであって、
前記所定のイベントは、障害の検出であり、
各種障害に前記複数の障害レベルのいずれかの障害レベルが対応しており、
前記リブートレベルは前記障害レベルであり、
前記或るプロセッサコアが、前記（ｂ）において、前記検出された障害の種類に対応した障害レベルに対応するリブート処理を実行する、
要求処理システム。
【請求項９】
請求項７又は８記載の要求処理システムであって、
前記記憶資源は、第１のメモリと、第２のメモリとを含み、
前記第１のメモリは、ＢＩＯＳ（Basic Input/OutPut System）と、ブートローダと、ＯＳ（Operating System）と、アプリケーションプログラムとを記憶し、
前記第２のメモリは、前記複数のプロセッサコアにそれぞれ割り当てられた複数のサブメモリ領域を含み、
前記マルチコアプロセッサの電源が投入された場合、それぞれのプロセッサコアが、
（Ｈ１）前記第１のメモリから前記ＢＩＯＳをロードし、
（Ｈ２）前記ＢＩＯＳを実行することにより、前記第１のメモリから前記ブートローダをロードすることと、前記ブートローダを起動することとを実行し、
（Ｈ３）前記ブートローダを実行することにより、前記資源管理情報が表す、そのプロセッサコアに割り当てられているサブメモリ領域に、前記１のメモリから前記ＯＳをコピーすることと、前記ＯＳを起動することとを実行し、
（Ｈ４）前記ＯＳを実行することにより、前記資源管理情報が表す、そのプロセッサコアに割り当てられているサブメモリ領域に、前記１のメモリから前記アプリケーションプログラムをコピーすることと、前記アプリケーションプログラムを起動することとを実行し、
（Ｈ５）前記アプリケーションプログラムを実行し、
前記或るプロセッサコアは、前記（ｂ）において、以下の（ｘ）〜（ｚ）：
（ｘ）前記或るプロセッサコアに割り当てられているサブメモリ領域を初期化し、前記ブートローダを前記第１のメモリからロードし、及び、前記ブートローダを起動し、それにより、前記（Ｈ３）以降を実行する；
（ｙ）前記或るプロセッサコアに割り当てられているＯＳ領域にロードされた前記ＯＳを起動し、それにより、前記（Ｈ４）以降を実行する；
（ｚ）前記或るプロセッサコアに割り当てられているＡＰ領域内の前記アプリケーションをアンロードし、前記或るプロセッサコアに割り当てられているＡＰ領域に前記第１のメモリから前記アプリケーションプログラムをコピーし、及び、前記アプリケーションプログラムを起動し、それにより、前記（Ｈ５）を実行する、
のうちのいずれか一つを実行し、
前記複数のリブートレベルは、第１乃至第３のリブートレベルを含み、
第１のリブートレベルが、前記（ｘ）に対応しており、第２のリブートレベルが、前記（ｙ）に対応しており、第３のリブートレベルが前記（ｚ）に対応している、
要求処理システム。
【請求項１０】
請求項１、７乃至９のうちのいずれか１項に記載の要求処理システムであって、
前記記憶資源は、第１のメモリと、第２のメモリとを含み、
前記第１のメモリは、ＢＩＯＳ（Basic Input/OutPut System）と、ブートローダと、ＯＳ（Operating System）と、アプリケーションプログラムとを記憶し、
前記第２のメモリは、前記複数のプロセッサコアにそれぞれ割り当てられた複数のサブメモリ領域を含み、
前記マルチコアプロセッサの電源が投入された場合、それぞれのプロセッサコアが、前記ＢＩＯＳ、前記ブートローダ、前記ＯＳ及び前記アプリケーションプログラムの順で起動し、
前記所定のイベントは、前記第１のメモリに記憶されているＯＳ及び／又はアプリケーションプログラムの交換であり、
前記或るプロセッサコアが、前記（ｂ）において、前記或るプロセッサコアに割り当てられているサブメモリ領域を初期化し、前記ブートローダを前記第１のメモリからロードし、及び、前記ブートローダを起動する、
要求処理システム。
【請求項１１】
請求項１０記載の要求処理システムであって、
前記所定のイベントは、障害の検出であり、
前記或るプロセッサコアが、検出された障害の種類に対応した障害レベルが、所定の障害レベルよりも低い場合、前記（ｂ）において、前記第１のメモリに記憶されているＯＳ及び／又はアプリケーションプログラムの交換されたときに実行されるリブート処理よりもサブ処理の数が少ないリブート処理を実行する、
要求処理システム。
【請求項１２】
請求項１、７乃至１１のうちのいずれか１項に記載の要求処理システムであって、
前記記憶資源は、ＢＩＯＳ（Basic Input/OutPut System）（２０１）と、ブートローダ（２０２）と、ＯＳ（Operating System）（２０５）と、アプリケーションプログラム（２０６）とを記憶し、
前記マルチコアプロセッサの電源が投入された場合、それぞれのプロセッサコアが、
（Ｈ１）前記記憶資源から前記ＢＩＯＳをロードし、
（Ｈ２）前記ＢＩＯＳを実行することにより、前記記憶資源から前記ブートローダをロードすることと、前記ブートローダを起動することとを実行し、
（Ｈ３）前記ブートローダを実行することにより、前記記憶資源から前記ＯＳをロードすることと、前記ＯＳを起動することとを実行し、
（Ｈ４）前記ＯＳを実行することにより、前記記憶資源から前記アプリケーションプログラムをロードすることと、前記アプリケーションプログラムを起動することとを実行し、
（Ｈ５）前記アプリケーションプログラムを実行し、
前記或るプロセッサコアが、所定のコンピュータプログラムを実行することにより、前記ブートローダをロード及び起動することと、前記ＯＳを起動することと、前記アプリケーションプログラムをロード及び起動することとの少なくとも一つを、前記（ｂ）において実行し、それにより、前記（ｂ）において、（Ｈ３）、（Ｈ４）及び（Ｈ５）のうちの少なくとも一つが行われる、
要求処理システム。
【請求項１３】
請求項１又は７に記載の要求処理システムであって、
前記或るプロセッサコアが、前記所定のイベントが発生したときに前記外部装置からの要求の処理を行っていれば、前記複数のプロセッサコアのうちの一以上の他のマルチコアプロセッサにその要求の処理を渡し、その後で、前記（ａ）及び（ｂ）を実行する、
要求処理システム。
【請求項１４】
外部装置からの要求を処理するマルチコアプロセッサが有する複数のプロセッサコアのうちの或るプロセッサコアが、所定のイベントを検出し、
前記或るプロセッサコアが、
（ａ）記憶資源が有する複数のサブ記憶資源のうちのどのサブ記憶資源がどのプロセッサコアに割り当てられているかを表す資源管理情報を基に、前記或るプロセッサコアに割り当てられているサブ記憶資源を特定し、
（ｂ）前記特定したサブ記憶資源を使用してリブート処理をする、
を行い、
前記或るプロセッサコアは、前記（ｂ）を行う都度に、前記（ｂ）のリブート処理の結果を表すログを作成して前記記憶資源に格納し、
前記或るプロセッサコアは、前記記憶資源に格納されているログが所定の条件に適合する場合には、所定のイベントが発生しても、前記（ａ）及び（ｂ）を非実行とする、
リブート方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、外部装置からの要求を処理するシステム内でのリブートに関する。
【背景技術】
【０００２】
外部装置からの要求を処理するシステム（要求処理システム）として、例えば、ストレージシステムがある。ストレージシステムは、一般に、ホスト装置からＩ／Ｏ要求（ライト要求又はリード要求）を受け付け、そのＩ／Ｏ要求を処理する。
【０００３】
Ｉ／Ｏ要求の処理は、通常、ストレージシステム内のプロセッサが行う。ストレージシステム内のプロセッサとして、例えば、シングルコアマルチプロセッサが採用される。「シングルコアマルチプロセッサ」とは、一つのプロセッサコアを有する複数のプロセッサである。なお、本明細書で言う「プロセッサコア」とは、プロセッサ内での演算部の意味である。
【０００４】
一方、プロセッサとして、マルチコアシングルプロセッサが知られている（例えば特許文献１）。「マルチコアシングルプロセッサ」とは、複数のプロセッサコアを含んだ一つのプロセッサである。
【０００５】
つまり、シングルコアマルチプロセッサによれば、複数のプロセッサがそれぞれ一つのプロセッサコアを有し、マルチコアシングルプロセッサによれば、一つのプロセッサが複数のプロセッサコアを有する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１２３４３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
シングルコアマルチプロセッサを有するストレージシステムにおいて、メモリに格納されているコンピュータプログラム（例えばアプリケーションプログラム）が交換された場合、プロセッサ毎にハード的なリブートが行われる。或るプロセッサがハード的にリブートしている間、別のプロセッサがＩ／Ｏ要求を処理することができる。なお、「ハード的なリブート」とは、ハードリセット処理において行われるリブートのことであり、ハードリセット処理とは、ハードリセットされた場合（プロセッサの電源が一旦遮断されて再投入された場合）に行われる処理のことであり、具体的には、例えば、プロセッサから出ている複数のピンのうちの所定のピン（リセットピン）に信号を入力された場合に行われる処理のことである。
【０００８】
しかし、マルチコアシングルプロセッサを有するストレージシステムにおいて、そのシングルプロセッサをハード的にリブートすることは好ましくない。なぜなら、そのシングルプロセッサが有する全てのプロセッサコアがリブートすることになるため、そのシングルプロセッサ内のいずれのプロセッサコアもＩ／Ｏ要求を処理することができず、故に、ホスト装置に対するサービス（Ｉ／Ｏ）が停止してしまうからである。
【０００９】
これは、ストレージシステムに限らず、他種の要求処理システムについても同様に有り得る問題である。
【００１０】
従って、本発明の目的は、マルチコアシングルプロセッサを有する要求処理システムにおいて外部装置からの要求の処理を停止することなくリブートを行えるようにすることにある。
【課題を解決するための手段】
【００１１】
外部装置からの要求を処理するマルチコアプロセッサが有する複数のプロセッサコアのうちの或るプロセッサコアが、所定のイベントを検出し、以下の（ａ）及び（ｂ）の処理：
（ａ）物理資源が有する複数のサブ資源のうちのどのサブ資源にどのプロセッサコアが割り当てられているかを表す資源管理情報を基に、上記或るプロセッサコアに割り当てられているサブ資源を特定する、
（ｂ）特定したサブ資源を基にリブートする、
を実行する。
【００１２】
これにより、或るプロセッサコアが、そのコアを含んだプロセッサ内の他のプロセッサコアをリブートさせることなく、リブートすることができる。つまり、外部装置からの要求の処理を停止することなくリブートを行うことができる。言い換えれば、コア単位のリブートが可能となる。
【００１３】
なお、要求処理システムとしては、サーバ（例えば、ファイルサーバ、ＷＥＢサーバ）或いはストレージシステムなど、外部装置からの要求を処理するシステムであればどのようなシステムでも良い。
【００１４】
外部装置は、要求処理システムの外部に存在する装置であって要求（例えばコマンド）を送信する装置ならどのような装置でも良い。例えば、外部装置として、クライアント計算機、ホスト装置、ストレージシステムなどが考えられる。
【００１５】
外部装置からの要求の処理としては、例えば、データを格納する処理、或いは、データを提供する処理などが考えられる。
【００１６】
要求処理システムは、上記のプロセッサ（マルチコアシングルプロセッサ）を複数個備えていても良い。或るプロセッサコアが外部装置からの要求を処理しているときに所定のイベントが発生した場合には、或るプロセッサコアは、そのプロセッサコアを有するプロセッサ内の他の一以上のプロセッサコアに、要求の処理を渡すことができる。
【００１７】
複数のプロセッサコアのうちの全てのプロセッサコアが、外部装置からの要求を処理することができても良いし、それら複数のプロセッサコアのうちの一部のプロセッサコアが、外部装置から要求を処理する稼動系のプロセッサコアであり、残りのプロセッサコアが、待機系のプロセッサコアであっても良い。
【００１８】
物理資源は、記憶資源を含む。物理資源は、チップセット等の他種の物理的な装置を含んでも良い。
【００１９】
所定のイベントは、例えば、記憶資源に記憶されているコンピュータプログラム（例えば、アプリケーションプログラム又はＯＳ（Operating System））の交換、又は、障害の検出である。
【図面の簡単な説明】
【００２０】
【図１】図１は、本発明の一実施形態に係るストレージシステムの構成を示す。
【図２】図２は、ＲＯＭ１２１に記憶されているコンピュータプログラムとＲＡＭ１２４へのコンピュータプログラムのコピーとを示す。
【図３】図３は、資源管理テーブル２０３を示す。
【図４】図４は、障害レベル判定テーブル２０４を示す。
【図５】図５は、本発明の一実施形態で行われる処理の概要を示す。
【図６】図６は、図５のステップ３１１（３２１、３３１又は３４１）の詳細を示す。
【図７】図７は、図５のステップ３１２（３２２、３３２又は３４２）の詳細を示す。
【図８】図８は、ＲＯＭ１２１内のＲＡＩＤ管理プログラム２０６が交換される場合に行われる処理の流れを示す。
【図９】図９は、障害が検出された場合に行われる処理の流れを示す。
【図１０】図１０は、ソフトリセット処理の流れを示す。
【図１１】本発明の一実施形態の一変形例で行われる処理の説明図。
【発明を実施するための形態】
【００２１】
以下、図面を参照して、本発明の一実施形態に係る要求処理システムが適用されたストレージシステムを説明する。
【００２２】
図１は、本発明の一実施形態に係るストレージシステムの構成を示す。
【００２３】
ストレージシステム１０３には、一又は複数のホスト装置１０１が接続されている。ストレージシステム１０３は、ホストインターフェイス装置（ホストＩ／Ｆ）１１１と、内部ネットワーク１１９と、キャッシュメモリ１１２と、ディスクインターフェイス装置（ディスクＩ／Ｆ）１１３と、ＨＤＤ（Hard Disk Drive）群１１４と、スイッチＬＳＩ（Large Scale Integration）１１６と、ＭＰ（Micro Processor）パッケージ１１７とを備えている。ストレージシステム１０３が備える要素１１１、１１９、１１２、１１３、１１４、１１６及び１１７のうちの少なくとも一つは、複数個あっても良い。図１には、例えば、複数のＭＰパッケージ１１７が示されている。
【００２４】
ＨＤＤ群１１４は、一以上のＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループを構成する。各ＲＡＩＤグループは、二以上のＨＤＤ１１５で構成されており、各ＨＤＤ１１５が、ディスクＩ／Ｆ１１３に接続されている。ＲＡＩＤグループを基に、一以上の論理ボリュームが形成されている。ＨＤＤ１１５に代えて、他種の物理記憶装置、例えば、フラッシュメモリチップを有するフラッシュメモリ装置が採用されても良い。
【００２５】
ホストＩ／Ｆ１１１、キャッシュメモリ１１２、ディスクＩ／Ｆ１１３及びスイッチＬＳＩ１１６が、内部ネットワーク１１９を介して互いに接続されている。スイッチＬＳＩ１１６が、アドレス／データ信号線１１８を介してＭＰパッケージ１１７に接続されている。
【００２６】
ホストＩ／Ｆ１１１は、ホスト装置１０１との通信を制御するインターフェイス装置である。ホストＩ／Ｆ１１１は、ホスト装置１０１からＩ／Ｏ要求（例えば、ファイルレベル或いはブロックレベルのＩ／Ｏ要求）を受け付け、受け付けたＩ／Ｏ要求を、内部ネットワーク１１９、スイッチＬＳＩ１１６及びアドレス／データ信号線１１８を介して、ＭＰパッケージ１１７に転送する。また、ホストＩ／Ｆ１１１は、ホスト装置１０１からのＩ／Ｏ要求に対する処理結果をＭＰパッケージ１１７から受けた場合、その処理結果を含んだ応答を、ホスト装置１０１に送信する。
【００２７】
キャッシュメモリ１１２は、ホスト装置１０１からのライト要求に付随するデータ（ライト対象データ）、又は、ホスト１０１からのリード要求に従ってＨＤＤ群１１４から読み出されたデータ（リード対象データ）を一時的に記憶する。
【００２８】
スイッチＬＳＩ１１６は、ＭＰパッケージ１１７とホストＩ／Ｆ１１１、キャッシュメモリ１１２及びディスクＩ／Ｆ１１３との通信を制御するＬＳＩである。ＬＳＩに代えて他の方法によりスイッチ機能が実現されても良い。
【００２９】
ＭＰパッケージ１１７は、マルチコアプロセッサ（以下、プロセッサ）１２５と、物理資源とを有する。物理資源は、例えば、記憶資源及びチップセット１２２を含む。記憶資源は、第１のメモリとして、例えばＲＯＭ（Read Only Memory）１２１を含み、第２のメモリとして、例えばＲＡＭ（Random Access Memory）１２４を含む。プロセッサ１２５が、フロントサイドバス１２３を介してチップセット１２２に接続されている。ＲＯＭ１２１が、バス４８を介してチップセット１２２に接続されている。ＲＡＭ１２４が、バス５０を介してチップセット１２２に接続されている。
【００３０】
プロセッサ１２５は、マルチコアシングルプロセッサである。本実施形態では、マルチコアシングルプロセッサを有するＭＰパッケージ１１７が複数個ある。
【００３１】
プロセッサ１２５は、複数のプロセッサコア１２６、例えば４個のプロセッサコア１２６を有する。以下、これら４個のプロセッサコア１２６を、「コア０」「コア１」、「コア２」及び「コア３」と称する。コア０〜３は、それぞれ演算部であり、例えば、ホスト装置１０１からのＩ／Ｏ要求を解析し、この解析結果にしたがってＨＤＤ１１５にアクセスする。コア０〜コア３のうち、例えば、コア０が、ブートストラッププロセッサ（BSP）としてのコアであり、残りのコア１〜３が、それぞれ、アプリケーションプロセッサ（AP）としてのコアである。なお、プロセッサ１２５は、デバッグ等の特定のケースにおいてハードリセットされる（例えば、プロセッサ１２５が有する複数のピンのうちのリセットピンに信号が入力される）。
【００３２】
ＲＯＭ１２１は、複数のコンピュータプログラムを記憶している。ＲＯＭ１２１は、例えば、書き換え可能な不揮発性メモリ、具体的には、例えば、フラッシュメモリである。
【００３３】
ＲＡＭ１２４は、ＲＯＭ１２１からコピーされたコンピュータプラグラムを記憶する。
【００３４】
チップセット１２２は、プロセッサ１２５、ＲＯＭ１２１及びＲＡＭ１２４の間でのデータの受け渡しを管理するＬＳＩセットである。チップセット１２２は、例えば、ＲＯＭ１２１及びＲＡＭ１２４へのアクセスを制御するメモリコントローラと、データ転送を制御するバスインターフェイス（例えばＰＣＩバスインターフェイス）と、コア０〜３への割り込みを制御する割り込みコントローラとを含む。
【００３５】
図２は、ＲＯＭ１２１に記憶されているコンピュータプログラムとＲＡＭ１２４へのコンピュータプログラムのコピーとを示す。
【００３６】
ＲＯＭ１２１に記憶されているコンピュータプログラムとして、ＢＩＯＳ（Basic Input/Output System）２０１、ブートローダ２０２、組込みＯＳ２０５及びＲＡＩＤ管理プログラム２０６がある。また、ＲＯＭ１２１は、資源管理テーブル２０３と障害レベル判定テーブル２０４とを記憶する。なお、ＲＯＭ１２１に格納されている情報は、本実施形態ではテーブルであるが、テーブル以外の形式であっても良い。
【００３７】
ＢＩＯＳ２０１は、ＲＡＭ１２４の初期化、プロセッサ１２５の初期化、及びブートローダ２０２の読み込みを行う。
【００３８】
ブートローダ２０２は、例えば、イニシャルプログラムローダとして機能するプログラムである。ブートローダ２０２は、組込みＯＳ２０５をＲＡＭ１２４にコピーし展開する。
【００３９】
組込みＯＳ２０５は、コアリブートプログラム２１１を含んでおり、圧縮されている。ブートローダ２０２により、ＲＯＭ１２１からＲＡＭ１２４にコピーされ、且つ、展開される。それにより、ＲＡＭ１２４に、解凍された、コアリブートプログラム２１１を含んだ組込みＯＳ２０５が生成される。コアリブートプログラム２１１は、ＲＡＩＤ管理プログラム２０６から呼び出されて後述のソフトリセット処理を実行する。ソフトリセット処理において、コア単位のリブートが行われる。
【００４０】
ＲＡＩＤ管理プログラム２０６は、組込みＯＳ２０５上で動作するアプリケーションプログラムの一例であり、ＲＯＭ１２１には圧縮されて格納されている。組込みＯＳ２０５により、ＲＯＭ１２１からＲＡＭ１２４にコピーされ、且つ、展開される。それにより、解凍されたＲＡＩＤ管理プログラム２０６がＲＡＭ１２４に生成される。ＲＡＩＤ管理プログラム２０６は、Ｉ／Ｏ要求の処理（Ｉ／Ｏ処理）を行う。具体的には、例えば、Ｉ／Ｏ処理は、Ｉ／Ｏ要求（ライト要求又はリード要求）から特定されたアクセス先領域に基づくＲＡＩＤグループを構成している二以上のＨＤＤ１１５に、Ｉ／Ｏ要求に付随したライト対象のデータを書き込むこと、又は、特定されたアクセス先領域に基づくＲＡＩＤグループを構成している二以上のＨＤＤ１１５から、リード対象のデータを読み出してホスト装置１０１に提供することを含む。ここでいう「アクセス先領域」は、論理ボリューム内の領域でよい。論理ボリュームが、Thin Provisioningに従うボリュームの場合、アクセス先領域は、論理ボリューム内の仮想領域に割り当てられる実領域（ＲＡＩＤグループに基づく記憶領域）でよい。
【００４１】
以下、資源管理テーブル２０３及び障害レベル判定テーブル２０４を説明する。
【００４２】
図３は、資源管理テーブル２０３を示す。
【００４３】
資源管理テーブル２０３は、物理資源が有する複数のサブ資源のうちのどのサブ資源がどのプロセッサコア１２６に割り当てられているかを表す。物理資源には、ＲＯＭ１２１、ＲＡＭ１２４及びチップセット１２２が含まれている。テーブル２０３には、コア０〜３のそれぞれについて、ＲＯＭ１２１、ＲＡＭ１２４及びチップセット１２２のどこが割り当てられているかを表す情報が含まれている。また、テーブル２０３には、物理資源のどこがコア０〜３で共有されるかを表す情報も含まれている。
【００４４】
図３の例によれば、ＲＡＭ１２４は、コア毎に、ログエリア、展開エリア、ＯＳエリア及びＲＡＩＤエリアを有し、且つ、コア０〜３に共通のエリアも有している。ログエリアは、ログが格納されるエリアである。なお、ＲＡＭ１２４には、コア０〜３に共通のログエリアも設けられている。展開エリアは、圧縮データ（組込みＯＳ２０５及びＲＡＩＤ管理プログラム２０６）の展開先のエリアである。ＯＳエリアは、組込みＯＳ２０５（圧縮データ）のコピー先のエリアである。ＲＡＩＤエリアは、ＲＡＩＤ管理プログラム２０６（圧縮データ）のコピー先のエリアである。共通エリアは、例えば、コア間の通信、及び、Ｉ／Ｏ処理の引き渡し／引き継ぎに利用される。
【００４５】
また、図３の例によれば、ＲＯＭ１２１は、コア毎のエリアを有しておらず、コア０〜３に共有される。
【００４６】
また、図３の例によれば、チップセット内の割り込みコントローラが、コア毎に割り当てられた割り込みピンを有する。具体的には、例えば、コア０については、割り込みピンＩＮＴ０が使用される。
【００４７】
図４は、障害レベル判定テーブル２０４を示す。
【００４８】
障害レベル判定テーブル２０４には、各種障害に対応した障害レベルを表す。障害レベルとして、例えば３つのレベル（ＬＶ１、ＬＶ２及びＬＶ３）があるが、レベルの数は、３より少なくても多くてもよい。各種障害は、いずれかの障害レベルに対応する。
【００４９】
なお、障害レベルは、ＬＶ１が最も重く、ＬＶ３が最も軽いとする（つまりＬＶの番号が若いほど重いとする）。また、図４のテーブル２０４には、障害の種類に関する情報として、エラー記号、テキストメッセージ及び内容があるが、これらの情報要素のうちの全て又は一部が、障害検出時に表示されてもよい。また、障害の種類に関する情報は、これらの情報要素に限らず、他の情報要素が採用されてもよい。
【００５０】
以下、本実施形態で行われる処理の流れを説明する。なお、以下の説明では、資源管理テーブル２０３から特定される、コアＮ（Ｎは０〜３のいずれか）に対応するエリア（ＲＡＭ１２４内のエリア）を、「エリアＮ」と表記する。例えば、コア０に対応するログエリアを、「ログエリア０」と表記する。
【００５１】
図５は、本実施形態で行われる処理の概要を示す。
【００５２】
プロセッサ１２５の電源が投入された場合（例えばプロセッサ１２５のハードリセットが行われた場合）、コア０〜３が、それぞれ、ＲＯＭ１２１からＢＩＯＳ２０１をロードし、ＢＩＯＳ２０１を実行する（ステップ３０１）。例えば、ＲＡＭ１２４の初期化、プロセッサ１２５の初期化などが行われる。
【００５３】
以下、コア毎に、ブートローダ２０２、組込みＯＳ２０５及びＲＡＩＤ管理プログラム２０６の順にロードされる。ブートローダ２０２の起動は、コア０〜３で同時に行われてもよいし、順番に行われても良い。本実施形態では、ブートローダ２０２は、コア０、コア１、コア２及びコア３の順で起動されるとする。具体的には、例えば、以下の通りである。
【００５４】
コア０のＢＩＯＳ２０１が、ブートローダ２０２をＲＯＭ１２１からＲＡＭ１２４にロードし、ブートローダ２０２を起動する。この間、コア１〜３のＢＩＯＳ２０１は、他のコア（例えばコア０）のブートローダ２０２からの指令を受けてコア１〜３のブートローダ２０２を起動することを条件としているので、起動待ちとなる。例えば、コア０のブートローダ２０２は、コア５４１が正常と判定した場合に、コア１を起動するための指令をコア１に出力する。これにより、起動待ち状態にあったコア１のブートローダ２０２は起動する。
【００５５】
次に、ステップ３１１が行われる。すなわち、コア０のブートローダ２０２は、資源管理テーブル２０３を参照してＯＳエリア０及び展開エリア０を特定する。そして、コア０のブートローダは、図６に示すように、ＲＯＭ１２１から組込みＯＳ２０５をロードし（ステップ４１１）、ＲＯＭ１２１からＲＡＭ１２４内のＯＳエリア０に組込みＯＳ２０５をコピーし（ステップ４１２）、ＯＳエリア０内の組込みＯＳ２０５を展開エリア０に展開する（ステップ４１３）。そして、コア０のブートローダ２０２は、展開エリア０内の組込みＯＳ２０５を起動する（ステップ４１４）。
【００５６】
次に、ステップ３１２が行われる。すなわち、コア０の組込みＯＳ２０５は、図７に示すように、起動処理を行い（ステップ４２１）、資源管理テーブル２０３を参照してＲＡＩＤエリア０及び展開エリア０を特定する。そして、コア０の組込みＯＳ２０５は、ＲＯＭ１２１からＲＡＩＤ管理プログラム２０６をロードし（ステップ４２２）、ＲＡＩＤ管理プログラム２０６をＲＯＭ１２１からＲＡＭ１２４内のＲＡＩＤエリア０にコピーし（ステップ４２３）、ＲＡＩＤエリア０内のＲＡＩＤ管理プログラム２０６を展開エリア０に展開する（ステップ４２４）。そして、コア０の組込みＯＳ２０５は、展開エリア０内のＲＡＩＤ管理プログラム２０６を起動する（ステップ４２５）。
【００５７】
次に、ステップ３１３が行われる。すなわち、コア０のＲＡＩＤ管理プログラム２０６は、そのプログラム２０６に従う処理を実行する。例えば、コア０のＲＡＩＤ管理プログラム２０６は、ホスト装置１０１からのＩ／Ｏ要求に従うＩ／Ｏ処理を実行する。
【００５８】
コア０を例に採って説明したが、コア１〜３についても、それぞれ、ＢＩＯＳ２０１によってブートローダ２０２が起動された後、ステップ３１１〜３１３と同様の処理が行われる（コア１についてステップ３２１〜３２３、コア２についてステップ３３１〜３３３、コア３についてステップ３４１〜３４３）。
【００５９】
なお、コア０〜３のいずれかについて所定のイベントが発生した場合、そのコアはソフトリセット処理を行う（ステップ３１４、３２４、３３４又は３４４）。或るコアでソフトリセット処理が行われることが、他のコアでソフトリセット処理が行われる原因にはならない。つまり、ソフトリセット処理とは、コア単位のリセット処理であり、ハードリセットされた場合に行われる、プロセッサ単位のリセット処理（ハードリセット処理）とは異なる。具体的には、例えば、ハードリセット処理では、イニシャルのアドレス（例えばＢＩＯＳ２０１が格納されている領域の先頭アドレス）からの読み込み順次に行われるが、ソフトリセット処理では、そのイニシャルのアドレスとは別のアドレスからの読み込みが行われる。そのため、ソフトリセット処理におけるリブートは、ハードリセット処理におけるリブートの流れの途中からの開始となる。
【００６０】
ソフトリセット処理が行われる原因は、例えば、ＲＯＭ１２１内のＲＡＩＤ管理プログラム２０６の交換（組込みＯＳ２０５の交換でも良い）、又は、障害の検出がある。
【００６１】
例えば、ＲＡＩＤ管理プログラム２０６が交換された場合、及び、検出された障害の種類に対応した障害レベルが最も高い場合（障害レベルがＬＶ１の場合）、ソフトリセット処理におけるリブートは、ハードウェアの初期化並びにブートローダ２０２のロードから開始される（ステップ３１４及び３２４参照）。
【００６２】
しかし、障害レベルが二番目に高い場合（障害レベルがＬＶ２の場合）、ソフトリセット処理におけるリブートは、組込みＯＳ２０５の展開及び起動から開始され（ステップ３３４参照）、障害レベルが最も低い場合（障害レベルがＬＶ３の場合）、ソフトリセット処理におけるリブートは、ＲＡＩＤ管理プログラム２０６のアンロード及びロードから開始される（ステップ３４４）。つまり、障害レベルが所定のレベル（上記例ではＬＶ１）より低ければ、ソフトリセット処理でのリブートにおけるサブ処理の数は少なくて済む。それ故、リブートに要する時間が短くて済むので、ストレージシステム１０３のＩ／Ｏ性能が低下している時間を短くすることができる。また、障害レベルが低いほど、ソフトリセット処理でのリブートにおけるサブ処理の数は少なくて済む（つまり、リブートに要する時間が短くて済む）。
【００６３】
図８は、ＲＯＭ１２１内のＲＡＩＤ管理プログラム２０６が交換される場合に行われる処理の流れを示す。
【００６４】
プロセッサ１２５の電源が投入された場合、図５を参照して説明した処理が行われ、その結果、コア０〜３のそれぞれで実行されているＲＡＩＤ管理プログラム２０６が、ＲＡＩＤ管理プログラム処理を行う（ステップ４０１Ａ〜４０１Ｄ）。ＲＡＩＤ管理プログラム処理とは、ＲＡＭ１２４に展開されているＲＡＩＤ管理プログラム２０６に従う処理、例えば、Ｉ／Ｏ処理（例えば、Ｉ／Ｏ要求の待ち、Ｉ／Ｏ要求から特定されたアクセス先領域に従う二以上のＨＤＤ１１５に対するアクセス）である。
【００６５】
例えば管理端末（図示せず）から入力されたマイクロ交換信号をコア０が受けたとする（ステップ４０２）。マイクロ交換信号とは、ＲＡＩＤ管理プログラム２０６（又は組込みＯＳ２０５）を交換することを意味する信号である。
【００６６】
コア０のＲＡＩＤ管理プログラム２０６が、Ｉ／Ｏ処理（例えば、Ｉ／Ｏ処理の進捗、アクセス先領域を表す情報など）を、コア１〜３に引き渡す（ステップ４０３Ａ）。別の観点で言えば、コア１〜３が、Ｉ／Ｏ処理をコア０から引き継ぐ（ステップ４０３Ｂ〜４０３Ｄ）。具体的には、コア０のＲＡＩＤ管理プログラム２０６が、資源管理テーブル２０３が表す共通エリア（ＲＡＭ１２４内のエリア）に、Ｉ／Ｏ処理に関する情報を格納し、コア１〜３のそれぞれのＲＡＩＤ管理プログラム２０６が、共通エリア内の情報を使用してＩ／Ｏ処理を行う。後にコア０がソフトリセット処理を行うが、コア１〜３はソフトリセット処理を行わないので、Ｉ／Ｏを停止させることなくコア０のリブートを行うことができる。なお、Ｉ／Ｏ処理は、コア０を有するプロセッサ１２５内の一以上の他のコア（例えばコア１のみ）に渡されれば良い。
【００６７】
コア０がＩ／Ｏ処理を渡した後、ＲＯＭ１２１内のＲＡＩＤ管理プログラム２０６が、別のＲＡＩＤ管理プログラムに交換される（ステップ４０４）。
【００６８】
その後、コア０がソフトリセット処理を行う（ステップ４０５）。具体的には、コア０のＲＡＩＤ管理プログラム２０６が、組込みＯＳ２０５内のコアリブートプログラム２１１を呼び出し、コア０が、そのプログラム２１１に従う処理を行う。ソフトリセット処理は、後に図１０を参照して説明する。
【００６９】
当該ソフトリセット処理において、ブートローダが起動される。そのため、図５のステップ３１１及びステップ３１２（具体的には、図６のステップ４１１〜４１４、及び、図７のステップ４２１〜４２５）を経て、コア０で、交換後のＲＡＩＤ管理プログラム２０６が実行される。具体的には、ＲＡＩＤ管理プログラム処理が行われる（ステップ４３１）。そして、コア１〜３に引き渡されていたＩ／Ｏ処理が、コア１〜３からコア０に渡される（ステップ４３２Ａ〜４３２Ｄ）。
【００７０】
図９は、障害が検出された場合に行われる処理の流れを示す。
【００７１】
コア０〜３のそれぞれで実行されているＲＡＩＤ管理プログラム２０６が、ＲＡＩＤ管理プログラム処理を行っているとき（ステップ５０１Ａ〜５０１Ｄ）、コア０のＲＡＩＤ管理プログラム２０６が、障害を検出したとする（ステップ５０２）。
【００７２】
この場合、コア０のＲＡＩＤ管理プログラム２０６は、Ｉ／Ｏ処理をコア１〜３に渡し（ステップ５０３Ａ）、組込みＯＳ２０５内のコアリブートプログラム２１１を呼び出すことで、ソフトリセット処理（図１０参照）を実行する。なお、Ｉ／Ｏ処理は、なお、Ｉ／Ｏ処理は、コア０を有するプロセッサ１２５内の一以上の他のコア（例えばコア１のみ）に渡されれば良い。
【００７３】
当該ソフトリセット処理で行われるリブートは、マイクロ交換の場合と異なり、検出された障害の種類に対応する障害レベルによって異なる。具体的には、対応する障害レベルがＬＶ１の場合、図５のステップ３１１から処理が行われる。対応する障害レベルがＬＶ２の場合、図５のステップ３１２から処理が行われる。対応する障害レベルがＬＶ３の場合、図５のステップ３１３から処理が行われる。つまり、障害レベルが低いほど、リブートに要する時間が短くて済む。
【００７４】
その後、コア０で、ＲＡＩＤ管理プログラム処理が行われ（ステップ５３１）、コア１〜３に引き渡されていたＩ／Ｏ処理が、コア１〜３からコア０に渡される（ステップ５３２Ａ〜５３２Ｄ）。
【００７５】
図１０は、ソフトリセット処理の流れを示す。ソフトリセット処理は、組込みＯＳ２０５内のコアリブートプログラム２１１がコアで実行されることによって行われる。以下、コアリブートプログラム２１１を主語にして、ソフトリセット処理を説明する。
【００７６】
コアリブートプログラム（図１０の説明において「プログラム」と略記）２１１が、動作コア判定を行う（ステップ８０１）。動作コア判定とは、プログラム２１１を実行するコアがコア０〜３のいずれであるかの判定である。以下、ここで判定されたコアを、「コアＴ」と表記する。
【００７７】
プログラム２１１は、資源管理テーブル２０３から、ステップ８０１で判定されたコアＴに対応する情報（コアＴに対応するカラム内の情報、及び、共通に対応するカラム内の情報、以下、「コアＴ資源情報」と言う）を取得する（ステップ８０２Ａ、８０２Ｂ、８０２Ｃ又は８０２Ｄ）。
【００７８】
次に、プログラム２１１は、イベント判定を行う（ステップ８０３）。イベント判定とは、ソフトリセット処理の契機となったイベントに関する判定であり、具体的には、以下の（Ａ）及び（Ｂ）：
（Ａ）イベントがマイクロ交換であるかどうか；
（Ｂ）イベントがマイクロ交換ではなく障害の検出の場合、検出された障害の種類に対応した障害レベルはＬＶ１〜ＬＶ３のいずれかであるか、
が判定される。
【００７９】
ステップ８０３でマイクロ交換又は障害レベルＬＶ１と判定された場合、以下の処理が行われる。プログラム２１１は、コアＴ資源情報から特定されるハードウェア（例えば、ログエリアＴ、展開エリアＴ、ＯＳエリアＴ及びＲＡＩＤエリアＴ）を初期化する（ステップ８１１）。そして、プログラム２１１は、ブートローダ２０２をＲＯＭ１２１からロードし起動する（ステップ８１２及び８１３）。プログラム２１１は、そのリブート結果を表すログを作成し、作成したログを、ログエリアＴに格納する。その後、図５のステップ３１１（又は、ステップ３２１、３３１及び３４１のいずれか）が行われる。
【００８０】
ステップ８０３で障害ＬＶ２と判定された場合、以下の処理が行われる。プログラム２１１は、組込みＯＳ２０５を、コアＴ資源情報から特定される展開エリアＴに展開する（ステップ８２１）。ここでは、例えば、ＯＳエリアＴに存在している組込みＯＳ２０５（圧縮データ）が展開される（ＲＯＭ１２１から組込みＯＳ２０５がＯＳエリアＴにコピーされても良い）。プログラム２１１は、展開エリアＴ内の組込みＯＳ２０５を起動する（ステップ８２２）。そして、プログラム２１１は、そのリブート結果を表すログを作成し、作成したログを、ログエリアＴに格納する。その後、図５のステップ３１２（又は、ステップ３２２、３３２及び３４２のいずれか）が行われる。
【００８１】
ステップ８０３で障害ＬＶ３と判定された場合、以下の処理が行われる。プログラム２１１は、ＲＡＩＤ管理プログラム２０６を、コアＴ資源情報から特定される展開エリアＴ及びＲＡＩＤエリアＴからアンロードする（ステップ８３１）。次に、プログラム２１１は、ＲＯＭ１２１からＲＡＩＤ管理プログラム２０６をロードする（ステップ８３２）。そして、プログラム２１１は、ＲＡＩＤエリアＴから展開エリアＴにＲＡＩＤ管理プログラム２０６を展開し、展開エリアＴ内のＲＡＩＤ管理プログラム２０６を起動する（ステップ８３３）。プログラム２１１は、そのリブート結果を表すログを作成し、作成したログを、ログエリアＴに格納する。その後、図５のステップ３１３（又は、ステップ３２３、３３３及び３４３のいずれか）が行われる。
【００８２】
以上、本実施形態によれば、コア単位のリブートが可能となる。このため、或るコア０がリブートする場合、コア０を有するプロセッサ１２５内のいずれの他のコアにＩ／Ｏ処理を渡しても、コア０のリブートを契機に当該他のコアがリブートしてしまうといったことがないので、Ｉ／Ｏを停止することなくコア０のリブートが可能となる。
【００８３】
また、本実施形態によれば、障害レベルがＬＶ１より低い場合には、マイクロ交換又は障害レベルＬＶ１の場合よりも短い時間でリブートを完了することができる。
【００８４】
なお、ソフトリセット処理は、コアリブートプログラム２１１が行うが、図１０の説明によれば、コアリブートプログラム２１１は、ＢＩＯＳ２０１、ブートローダ２０２及び組込みＯＳ２０５の機能の一部を有する。具体的には、プログラム２１１は、ブートローダ２０２をロード及び起動することと、組込みＯＳ２０５を起動することと、ＲＡＩＤ管理プログラム２０６をロード及び起動することとを有する。
【００８５】
以上、本発明の一つの実施形態を説明したが、本発明は、この実施形態に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。例えば、コアＴ（例えばコア０）で実行されるコアブートプログラム２１１は、図１１に示すように、ステップ４０５及び５０４の前に、プログラム２１１は、ログエリアＴに格納されているログが所定の条件に適合するか否か（例えば、ログを基に特定された障害発生回数が所定の閾値を超えているか否かを）を判定しても良い。プログラム２１１は、その判定の結果が否定的の場合に、ソフトリセット処理を実行するが、その判定の結果が肯定的であれば、ソフトリセット処理を非実行としても良い。
【符号の説明】
【００８６】
１０３…ストレージシステム
【図１】
0005427245.tif 000002
【図２】
0005427245.tif 000003
【図３】
0005427245.tif 000004
【図４】
0005427245.tif 000005
【図５】
0005427245.tif 000006
【図６】
0005427245.tif 000007
【図７】
0005427245.tif 000008
【図８】
0005427245.tif 000009
【図９】
0005427245.tif 000010
【図１０】
0005427245.tif 000011
【図１１】
0005427245.tif 000012