(57)【要約】【課題】ストレージ装置の性能低下を抑制すること。【解決手段】ストレージ制御装置１００は、メモリＤＩＦ制御を実行可能な複数の制御部１０１と、メモリＤＩＦ制御を起動した際に制御部１０１にかかる負荷を表す指標値を記憶する第１の記憶部１０２と、起動中のメモリＤＩＦ制御で処理するデータ量と制御部１０１の使用率とを対応付けて記憶する第２の記憶部１０３とを有する。複数の制御部１０１のいずれかの制御部１０１は、実行対象となるメモリＤＩＦ制御で処理するデータ量と第２の記憶部１０３の記憶内容とに基づき第１の記憶部１０２を参照し、メモリＤＩＦ制御実行の際に制御部１０１にかかる負荷を表す指標値を特定し、特定した当該指標値に基づいて、メモリＤＩＦ制御を起動する起動先の制御部１０１を決定する。【選択図】図１
2015075845.tif 000002
【特許請求の範囲】
【請求項１】
データの正当性を検証する検証処理を実行可能な複数の制御部と、
前記複数の制御部に含まれる制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する第１の記憶部と、
前記制御部に対応して、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とを対応付けて記憶する第２の記憶部と、を有し、
前記複数の制御部のいずれかの制御部は、
前記制御部に対応して、実行対象となる検証処理で処理するデータ量と前記第２の記憶部の記憶内容とに基づき前記第１の記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した当該指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
ことを特徴とするストレージ制御装置。
【請求項２】
前記いずれかの制御部は、
前記制御部に対応して、前記第１の記憶部の記憶内容を参照して、前記第２の記憶部に記憶された前記制御部の使用率と、前記第２の記憶部に記憶された前記制御部で起動中の前記検証処理で処理するデータ量に前記実行対象の検証処理で処理するデータ量を加算したデータ量との組み合わせに対応する指標値を特定することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定することを特徴とする請求項１に記載のストレージ制御装置。
【請求項３】
前記いずれかの制御部は、
前記起動先の制御部を決定したことに応じて、前記第２の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量に、前記実行対象の検証処理で処理するデータ量を加算し、
前記起動先の制御部による前記実行対象の検証処理の実行が完了したことに応じて、前記第２の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量から、前記実行対象の検証処理で処理するデータ量を減算することを特徴とする請求項１または２に記載のストレージ制御装置。
【請求項４】
前記いずれかの制御部は、
所定の使用率の前記制御部に所定のデータ量を処理する検証処理を実行させ、前記所定のデータ量に対する、前記所定のデータ量のうちの所定の時間内に前記制御部が処理できなかったデータ量の割合を、前記制御部にかかる負荷を表す指標値として算出し、算出した前記制御部にかかる負荷を表す指標値を、前記所定のデータ量と前記所定の使用率との組み合わせに対応付けて前記第１の記憶部に記憶することを特徴とする請求項１〜３のいずれか一つに記載のストレージ制御装置。
【請求項５】
前記制御部は、ストレージの入出力を制御する入出力コントローラまたは前記入出力コントローラを制御するプロセッサもしくは前記プロセッサに含まれるコアであることを特徴とする請求項１〜４のいずれか一つに記載のストレージ制御装置。
【請求項６】
データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムであって、
前記複数の制御部のいずれかの制御部に、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行させることを特徴とする制御プログラム。
【請求項７】
データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御方法であって、
前記複数の制御部のいずれかの制御部が、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置、制御プログラムおよび制御方法に関する。
【背景技術】
【０００２】
多くの企業向けストレージ装置は、データの保全性を保証するための機能として、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｅａｔｕｒｅ）制御機能をサポートしている。ＤＩＦ制御機能とは、ストレージ装置が、ストレージ内で保持する各種データの保全性を保証するために、各データブロック（５１２ｂｙｔｅ）に、８バイトのチェックコードを付加し、データの正当性を検証する機能である。
【０００３】
ＤＩＦ制御機能は、ＡＮＳＩ（Ａｍｅｒｉｃａｎ  Ｎａｔｉｏｎａｌ  Ｓｔａｎｄａｒｄｓ  Ｉｎｓｔｉｔｕｔｅ）のＴ１０で規格化され、企業向けストレージ装置の標準的な機能となっている。このため、ストレージ装置向けの汎用Ｉ／Ｏ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ）コントローラ（以下、「ＩＯＣ（ＩＯ  Ｃｏｎｔｒｏｌｌｅｒ）」と称する）の多くは、Ｉ／Ｏのデータ転送中のＤＩＦ制御機能を実行可能である。
【０００４】
また、ＩＯＣは、メモリ上のデータのＤＩＦ制御機能を行うためのＤＩＦ制御機能（以下、「メモリＤＩＦ制御機能」と称する）を別途有しているものがある。さらに、企業向けの大型のストレージ装置は、高機能化および高性能化に伴い、メモリＤＩＦ制御機能を有するＩＯＣを複数搭載しているものがある。
【０００５】
また、ストレージ装置の高性能化が進み、ストレージ装置が、装置内に、高性能なマルチコアプロセッサや、複数のプロセッサを搭載するようになっている。複数のプロセッサの一部を使って、プログラムでメモリＤＩＦ制御機能を実行する方法も採用されている。さらに、自動バックアップや仮想化などのストレージ装置の高機能化に伴い、ストレージ装置内のデータ移動方法や格納場所は多岐にわたり、メモリＤＩＦ制御によるデータの正当性の検証は、ますます重要になり、実行頻度も非常に多くなっている。
【０００６】
関連する先行技術としては、例えば、Ｉ／Ｏ処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上の場合に、Ｉ／Ｏ処理を、他のマイクロプロセッサに割り振るものがある。また、チェックコードによってある一定レベルの誤り検出が可能となるデータ数と転送されるデータのデータ数とを比較し、その比較結果に応じて転送されるデータについてのデータ転送の休止要求を出力するデータ転送制御方法がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−２４９７２９号公報
【特許文献２】特開平１１−２５００８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、従来技術では、ストレージ装置内のＩＯＣやプロセッサでメモリＤＩＦ制御を実行する場合、ＩＯＣやプロセッサにかかる負荷のバランスが不均等となり、ストレージ装置の性能低下を招くという問題がある。
【０００９】
例えば、従来技術では、ストレージ装置内のどのＩＯＣやプロセッサにメモリＤＩＦ制御を割り当てれば効率良く実行できるのか判断することが困難なため、Ｉ／Ｏの種類や用途ごとに固定箇所のＩＯＣやプロセッサを使用してメモリＤＩＦ制御を実行していた。この場合、ストレージ装置内で処理するＩ／Ｏの種類や用途に片寄りがあると、ＩＯＣやプロセッサにかかる負荷のバランスが不均等となり、ストレージ装置の性能が低下してしまう。
【００１０】
一つの側面では、本発明は、ストレージ装置の性能低下を抑制することができるストレージ制御装置、制御プログラムおよび制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明の一側面によれば、データの正当性を検証する検証処理を実行可能な複数の制御部のいずれかの制御部が、前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定するストレージ制御装置、制御プログラムおよび制御方法が提案される。
【発明の効果】
【００１２】
本発明の一態様によれば、ストレージ装置の性能低下を抑制することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施の形態１にかかるストレージ制御装置１００の一実施例を示す説明図である。
【図２】図２は、実施の形態２にかかるストレージ装置２００のシステム構成例を示す説明図である。
【図３】図３は、実施の形態２にかかるストレージ制御装置２０１のハードウェア構成例を示すブロック図である。
【図４】図４は、ＤＩＦ構造の一例を示す説明図である。
【図５】図５は、実施の形態２にかかるＩＯＣ負荷特性テーブル５００の一例を示す説明図である。
【図６】図６は、実施の形態２にかかるコア負荷特性テーブル６００の一例を示す説明図である。
【図７】図７は、実施の形態２にかかるＩＯＣ起動量テーブル７００の一例を示す説明図である。
【図８】図８は、実施の形態２にかかるコア起動量テーブル８００の一例を示す説明図である。
【図９】図９は、実施の形態２にかかるストレージ制御装置２０１の機能的構成例を示すブロック図である。
【図１０】図１０は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ負荷特性テーブル５００の作成処理手順の一例を示すフローチャートである。
【図１１】図１１は、実施の形態２にかかるストレージ制御装置２０１のＩ／Ｏ処理手順の一例を示すフローチャートである。
【図１２】図１２は、実施の形態２にかかるストレージ制御装置２０１のメモリＤＩＦ制御処理手順の一例を示すフローチャートである。
【図１３】図１３は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ選択処理手順の一例を示すフローチャートである。
【図１４】図１４は、実施の形態２にかかるストレージ制御装置２０１のコア選択処理手順の一例を示すフローチャートである。
【図１５】図１５は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ３０３とコア３１１の選択処理の一実施例を示す説明図である。
【発明を実施するための形態】
【００１４】
以下に図面を参照して、本発明にかかるストレージ制御装置、制御プログラムおよび制御方法の実施の形態を詳細に説明する。
【００１５】
（実施の形態１）
図１は、実施の形態１にかかるストレージ制御装置１００の一実施例を示す説明図である。図１において、ストレージ制御装置１００は、複数の制御部１０１（図１の例では、制御部１０１−１〜１０１−３）と、第１の記憶部１０２と、第２の記憶部１０３とを有する。
【００１６】
ストレージ制御装置１００は、ストレージ装置の構成要素の一つであり、ストレージ装置全体の制御を行うコンピュータである。ストレージ制御装置１００は、ホストコンピュータからのＩ／Ｏ要求を受け付け、ホストコンピュータからのデータをストレージに書き込む、または、ストレージからデータを読み出す。ストレージは、データを記憶する記憶装置であり、例えば、ハードディスク、光ディスク、フラッシュメモリ、磁気テープなどである。
【００１７】
制御部１０１は、メモリＤＩＦ制御機能を有する。メモリＤＩＦ制御機能とは、メモリ上のデータに対してＤＩＦ制御を行う機能である。ＤＩＦ制御とは、ストレージ内で保持するデータの保全性を保証するために、各データブロック（５１２ｂｙｔｅ）に、８バイトのチェックコードを付加し、データの正当性を検証する機能である。データの正当性とは、すべてのデータ値が正しく適切であることをアプリケーション等に対して保証することである。
【００１８】
例えば、制御部１０１は、ＩＯＣまたはプロセッサもしくはプロセッサに含まれるコアで実現することができる。ＩＯＣは、ハードディスク等の周辺機器とメモリとの間のデータの入出力を制御する入出力コントローラである。例えば、ＩＯＣには、ＦｉｂｒｅＣｈａｎｎｅｌ制御チップ、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）制御チップ、ｉＳＣＳＩ（Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）チップなどが存在する。プロセッサは、ストレージ制御装置１００を制御するものであり、例えば、複数のコアを有するマルチコアプロセッサである。
【００１９】
第１の記憶部１０２は、負荷特性テーブル１１２を記憶する。負荷特性テーブル１１２は、メモリＤＩＦ制御を起動した際に制御部１０１にかかる負荷を表す指標値を、制御部１０１の使用率と制御部１０１のメモリＤＩＦ制御の起動率との組み合わせに応じて記憶する。
【００２０】
負荷特性テーブル１１２は、例えば、ストレージ制御装置１００の起動時に制御部１０１によって作成される。また、工場出荷時に、負荷特性テーブル１１２を予め作成しておき、ストレージ制御装置１００に保存しておくこともできる。この場合、例えば、ストレージ制御装置１００の構成変更（例えば、制御部１０１の総数や性能を変更）が行われた際に、制御部１０１が負荷特性テーブル１１２を再作成することにしてもよい。
【００２１】
ここで、制御部１０１の使用率とは、制御部１０１が単位時間当たりに実行可能な最大処理量に対する実行中の処理量の割合である。具体的には、例えば、制御部１０１の使用率は、制御部１０１がＩＯＣである場合、ＩＯＣが単位時間当たりに実行可能な最大のＩ／Ｏ数に対する起動中のＩ／Ｏ数の割合で表すことができる。
【００２２】
また、制御部１０１のメモリＤＩＦ制御の起動率とは、制御部１０１が単位時間当たりに処理可能なメモリＤＩＦ制御の最大データ量に対する起動中のメモリＤＩＦ制御のデータ量の割合である。例えば、制御部１０１がＩＯＣである場合、ＩＯＣが単位時間当たりに処理可能なメモリＤＩＦ制御の最大データ量に対する起動中のＤＩＦ制御のデータ量の割合で表すことができる。
【００２３】
負荷を表す指標値とは、ある使用率の制御部１０１で、ある起動率のメモリＤＩＦ制御を起動した場合の制御部１０１の性能低下率を表すものである。例えば、負荷を表す指標値は、ある使用率の制御部１０１で、ある起動率のメモリＤＩＦ制御を起動した場合において、起動したメモリＤＩＦ制御のデータ量に対する単位時間内で実行を完了できなかったメモリＤＩＦ制御のデータ量の割合である。
【００２４】
具体的には、例えば、制御部１０１の使用率が１０％、制御部１０１のメモリＤＩＦ制御の起動率が２０％であったとする。この場合、図１の例では、負荷を表す指標値は４であるため、起動したメモリＤＩＦ制御のデータ量が１００である場合、単位時間内で実行が完了したメモリＤＩＦ制御のデータ量は９６となる。
【００２５】
第２の記憶部１０３は、起動量テーブル１１３を記憶する。起動量テーブル１１３は、制御部１０１（制御部１０１−１〜１０１−３）ごとに、現在の制御部１０１の使用率とメモリＤＩＦ制御の転送量とを対応付けて記憶するテーブルである。具体的には、例えば、起動量テーブル１１３は、制御部ＩＤ、使用率、およびメモリＤＩＦ制御の転送量のフィールドを有し、各フィールドに情報を設定することで、メモリＤＩＦ制御起動量情報（例えば、メモリＤＩＦ制御起動量情報１１３−１〜１１３−３）をレコードとして記憶する。
【００２６】
ここで、制御部ＩＤは、制御部１０１の識別子である。使用率は、制御部１０１の使用率である。メモリＤＩＦ制御の転送量は、制御部１０１で起動したメモリＤＩＦ制御で処理するデータ量である。メモリＤＩＦ制御で処理するデータ量は、ブロック単位で表される。１ブロックは、例えば、５１２バイトまたは５２０バイトである。
【００２７】
実施の形態１では、複数の制御部１０１のいずれかの制御部１０１（ここでは、「制御部１０１−１」とする）が、各制御部１０１にメモリＤＩＦ制御を起動した際の負荷特性（負荷特性テーブル１１２）を参照して、装置運用中の各制御部１０１の負荷状況（起動量テーブル１１３）を基に実行対象となるメモリＤＩＦ制御を起動した際の負荷を予測し、実行対象となるメモリＤＩＦ制御の起動先を決定する。以下、実施の形態１にかかるストレージ制御装置１００のデータ処理例について説明する。
【００２８】
（１）制御部１０１−１は、実行対象となるメモリＤＩＦ制御を起動する起動先の制御部１０１を決定する。具体的には、例えば、まず、制御部１０１−１は、実行対象のメモリＤＩＦ制御の転送量を特定する。次に、制御部１０１−１は、制御部１０１−１〜１０１−３ごとに、特定したメモリＤＩＦ制御の転送量と起動量テーブル１１３のメモリＤＩＦ制御の転送量とを加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。
【００２９】
次に、制御部１０１−１は、制御部１０１−１〜１０１−３ごとに、負荷特性テーブル１１２を参照して、算出したメモリＤＩＦ制御の起動率と起動量テーブル１１３の使用率とに対応する負荷を表す指標値を特定する。そして、制御部１０１−１は、制御部１０１−１〜１０１−３ごとに特定した負荷を表す指標値が最小である制御部１０１を、実行対象のメモリＤＩＦ制御を起動する起動先の制御部１０１に決定する。
【００３０】
図１の例では、実行対象のメモリＤＩＦ制御の転送量が５０であり、制御部１０１−１〜１０１−３が単位時間当たりに処理可能なメモリＤＩＦ制御の最大転送量が５００であるとする。また、起動量テーブル１１３に記憶された制御部１０１−１のメモリＤＩＦ制御の転送量は４００である。このため、実行対象のメモリＤＩＦ制御の転送量と制御部１０１−１−のメモリＤＩＦ制御の転送量の加算結果は４５０となる。
【００３１】
また、制御部１０１−１が単位時間当たりに処理可能なメモリＤＩＦ制御の最大データ量が５００であるため、メモリＤＩＦ制御の起動率は９０％となる。また、起動量テーブル１１３に記憶された制御部１０１−１の使用率は１０％であるため、負荷特性テーブル１１２の使用率１０％、起動率９０％より、制御部１０１−１の負荷を表す指標値は１０となる。
【００３２】
同様にして、制御部１０１−２の負荷を表す指標値は６となり、制御部１０１−３の負荷を表す指標値は２５となる。この場合、制御部１０１−１は、制御部１０１−１〜１０−３ごとの負荷を表す指標値が最小である制御部１０１−２を、実行対象のメモリＤＩＦ制御を起動する起動先の制御部１０１に決定する。
【００３３】
（２）制御部１０１−１は、決定した起動先の制御部１０１に対応する起動量テーブル１１３内のレコードを更新する。図１の例では、起動先の制御部１０１は制御部１０１−２であり、実行対象のメモリＤＩＦ制御の転送量は５０である。このため、制御部１０１−１は、起動量テーブル１１３内のメモリＤＩＦ制御起動量情報１１３−２のメモリＤＩＦ制御の転送量を１００に更新する。
【００３４】
（３）制御部１０１は、起動先の制御部１０１による実行対象のメモリＤＩＦ制御の実行が完了したことに応じて、起動先の制御部１０１に対応する起動量テーブル１１３内のレコードを更新する。図１の例では、起動先の制御部１０１は制御部１０１−２であり、実行対象のメモリＤＩＦ制御の転送量は５０である。このため、制御部１０１−１は、起動量テーブル１１３内のメモリＤＩＦ制御起動量情報１１３−２のメモリＤＩＦ制御の転送量を５０に更新する。
【００３５】
以上説明したように、実施の形態１にかかるストレージ制御装置１００によれば、複数の制御部１０１の各制御部１０１で実行対象となるメモリＤＩＦ制御を起動した場合の負荷を予測することができる。そして、ストレージ制御装置１００によれば、予測した各制御部１０１の負荷に基づいて、複数の制御部１０１の中から、ストレージ装置の性能を低下させることの少ない、メモリＤＩＦ制御を起動する起動先の制御部１０１を決定することができる。
【００３６】
（実施の形態２）
実施の形態２では、複数の制御部１０１は、ストレージのＩ／Ｏを制御する複数のＩＯＣと複数のコアを有するプロセッサから構成される。各ＩＯＣおよび各コアが、メモリＤＩＦ制御機能を有する。プロセッサのコアの１つが、メモリＤＩＦ制御を起動するＩＯＣまたはコアを決定する。
【００３７】
（ストレージ装置２００のシステム構成例）
図２は、実施の形態２にかかるストレージ装置２００のシステム構成例を示す説明図である。図２において、ストレージ装置２００は、複数のストレージ制御装置２０１と、複数のストレージ２１０とを有する。ストレージ装置２００は、例えば、ＦｉｂｒｅＣｈａｎｎｅｌ、ＳＡＳ、ｉＳＣＳＩ等のインターフェースで複数のホストコンピュータ２２０に接続される。また、ストレージ装置２００は、例えば、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークを介して複数のホストコンピュータ２２０に接続されてもよい。
【００３８】
ストレージ制御装置２０１は、ストレージ装置２００全体の制御を行うコンピュータである。ストレージ２１０は、磁気ディスクドライブ（ＨＤＤ：Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）と、磁気ディスクとを有する。磁気ディスクドライブは、ストレージ制御装置２０１の制御にしたがって磁気ディスクに対するデータのリード／ライトを制御する。磁気ディスクは、磁気ディスクドライブの制御で書き込まれたデータを記憶する。ストレージ２１０は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を備えてもよい。なお、ストレージ制御装置２０１は、図１のストレージ制御装置１００に対応する。
【００３９】
（ストレージ制御装置２０１のハードウェア構成例）
図３は、実施の形態２にかかるストレージ制御装置２０１のハードウェア構成例を示すブロック図である。ストレージ制御装置２０１は、複数のコア３１１−１〜３１１−ｎを有するプロセッサ３０１と、メモリ３０２と、複数のＩＯＣ３０３−１〜３０３−３とを有する。複数のＩＯＣ３０３は、ＩＯＣ（ホスト接続）３０３−１と、ＩＯＣ（ＨＤＤ接続）３０３−２と、ＩＯＣ（通信）３０３−３とを有する。また、各構成部は、バス３００によってそれぞれ接続される。コア３１１とＩＯＣ３０３は、メモリＤＩＦ制御機能を有する。
【００４０】
ここで、プロセッサ３０１は、ストレージ制御装置２０１の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがプロセッサ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、プロセッサ３０１にロードされることで、コーディングされている処理をプロセッサ３０１に実行させる。
【００４１】
ＩＯＣ（ホスト接続）３０３−１は、ホストコンピュータ２２０に接続され、ホストコンピュータ２２０とデータのＩ／Ｏの制御を行う。ＩＯＣ（ＨＤＤ接続）３０３−２は、ＨＤＤに接続され、ＨＤＤとデータのＩ／Ｏの制御を行う。ＩＯＣ（通信）３０３−３は、他のストレージ制御装置２０１に接続され、ストレージ制御装置２０１間でデータのＩ／Ｏの制御を行う。
【００４２】
なお、プロセッサ３０１とＩＯＣ３０３は、図１の制御部１０１に対応し、メモリ３０２は、図１の第１の記憶部１０２と第２の記憶部１０３とに対応する。
【００４３】
（ＤＩＦ構造の一例）
図４は、ＤＩＦ構造の一例を示す説明図である。ストレージ装置２００において、ホストコンピュータ２２０からのデータのＩ／ＯおよびＨＤＤ等のストレージ２１０に記憶するデータのＩ／Ｏは、ブロック単位に行われる。図４の例では、５１２バイト単位で行われる。ＤＩＦ制御機能は、データの正当性を検証するため、元データ４００の各ブロックに８バイトのチェックコードを付加することにより、ＤＩＦ付加データ４０１が作成される。
【００４４】
８バイトのチェックコードは、データブロック４１１のＣＲＣ４１２（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ：巡回冗長検査）と、リファレンスタグ４１３と、アプリケーションが定義するアプリケーション・タグ４１４を有している。
【００４５】
ＣＲＣ４１２は、データブロック４１１を入力とした誤り検出関数の出力値である。なお、誤り検出関数とは、任意長のデータストリームを入力とし、例えば３２ビット整数などの固定サイズの値を出力する関数である。メモリＤＩＦ制御機能は、ＣＲＣ４１２によって、データブロック４１１の正当性を検証する。リファレンスタグ４１３には、例えば、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）が設定される。ＬＢＡとは、ＨＤＤ等のストレージ２１０内のデータ位置を示す値である。アプリケーション・タグ４１４には、例えば、ＩＯＣ３０３の識別子であるＩＯＣＩＤが設定される。
【００４６】
（ＩＯＣ負荷特性テーブル５００の一例）
図５は、実施の形態２にかかるＩＯＣ負荷特性テーブル５００の一例を示す説明図である。ＩＯＣ負荷特性テーブル５００は、例えば、後述する作成部９０１によって作成され、メモリ３０２に記憶される。
【００４７】
ＩＯＣ負荷特性テーブル５００は、ＩＯＣ３０３の使用率とＩＯＣ３０３のメモリＤＩＦ制御の起動率との組み合わせにおけるメモリＤＩＦ制御を起動した際にＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを記憶する。図５の例では、ＩＯＣ負荷特性テーブル５００は、ＩＯＣ３０３の使用率とＩＯＣ３０３のメモリＤＩＦ制御の起動率、それぞれ１０％ごとに０％から１００％まで、ＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを記憶する。
【００４８】
なお、ＩＯＣ３０３の使用率とは、ＩＯＣ３０３が単位時間当たりに実行可能な最大のＩ／Ｏ数に対する起動中のＩ／Ｏ数の割合である。また、ＩＯＣ３０３のメモリＤＩＦ制御の起動率とは、ＩＯＣ３０３が単位時間当たりに処理可能なメモリＤＩＦ制御の最大データ量に対する起動中のメモリＤＩＦ制御のデータ量の割合である。
【００４９】
ＩＯＣ３０３にかかる負荷を表す指標値ＬＦIとは、ある使用率のＩＯＣ３０３で、ある起動率のメモリＤＩＦ制御を起動した場合のＩＯＣ３０３の性能低下率を表すものである。例えば、負荷を表す指標値ＬＦIは、ある使用率のＩＯＣ３０３で、ある起動率のメモリＤＩＦ制御を起動した場合において、起動したメモリＤＩＦ制御のデータ量に対する単位時間内で実行を完了できなかったメモリＤＩＦ制御のデータ量の割合である。
【００５０】
（コア負荷特性テーブル６００の一例）
図６は、実施の形態２にかかるコア負荷特性テーブル６００の一例を示す説明図である。コア負荷特性テーブル６００は、例えば、後述する作成部９０１によって作成され、メモリ３０２に記憶される。
【００５１】
コア負荷特性テーブル６００は、コア３１１のＢｕｓｙ率とコア３１１のメモリＤＩＦ制御の起動率との組み合わせにおけるメモリＤＩＦ制御を起動した際にコア３１１にかかる負荷を表す指標値ＬＦCを記憶する。図６の例では、コア負荷特性テーブル６００は、コア３１１のＢｕｓｙ率とコア３１１のメモリＤＩＦ制御の起動率、それぞれ１０％ごとに０％から１００％まで、コア３１１にかかる負荷を表す指標値ＬＦCを記憶する。
【００５２】
なお、コア３１１のＢｕｓｙ率とは、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）やアプリケーションソフトウェアが何らかの処理を実行する時間の割合である。コア３１１のメモリＤＩＦ制御の起動率とは、コア３１１が単位時間当たりに処理可能なメモリＤＩＦ制御の最大データ量に対する起動中のメモリＤＩＦ制御のデータ量の割合である。
【００５３】
コア３１１にかかる負荷を表す指標値ＬＦCとは、あるＢｕｓｙ率のコア３１１で、ある起動率のメモリＤＩＦ制御を起動した場合のコア３１１の性能低下率を表すものである。例えば、負荷を表す指標値は、あるＢｕｓｙ率のコア３１１で、ある起動率のメモリＤＩＦ制御を起動する場合において、起動したメモリＤＩＦ制御のデータ量に対する単位時間内で実行を完了できなかったメモリＤＩＦ制御のデータ量の割合である。例えば、コア３１１のＢｕｓｙ率が１０％、コア３１１のメモリＤＩＦ制御の起動率が２０％であったとする。この場合、図６の例では、負荷を表す指標値ＬＦCは４であるため、実行したメモリＤＩＦ制御のデータ量が１００である場合、単位時間内に実行が完了したＤＩＦ制御のデータ量は９６となる。
【００５４】
（ＩＯＣ起動量テーブル７００の一例）
図７は、実施の形態２にかかるＩＯＣ起動量テーブル７００の一例を示す説明図である。ＩＯＣ起動量テーブル７００は、ＩＯＣ３０３ごとに、現在のＩＯＣ３０３の使用率とメモリＤＩＦ制御の転送量とを対応付けて記憶するテーブルである。ＩＯＣ起動量テーブル７００は、例えば、後述する作成部９０１によって作成され、メモリ３０２に記憶され、後述する更新部９０２によって更新される。ＩＯＣ起動量テーブル７００は、ＩＯＣＩＤ、Ｉ／Ｏの起動数、Ｉ／Ｏの総転送量、メモリＤＩＦ制御の起動数、およびメモリＤＩＦ制御の総転送量のフィールドを有する。ＩＯＣ起動量テーブル７００は、各フィールドに情報を設定することで、ＩＯＣ起動量情報（例えば、ＩＯＣ起動量情報７００−１〜７００−ｎ）をレコードとして記憶する。
【００５５】
ここでＩＯＣＩＤは、ＩＯＣ３０３の識別子である。Ｉ／Ｏの起動数は、ＩＯＣ３０３で起動したＩ／Ｏの数である。Ｉ／Ｏの総転送量は、ＩＯＣ３０３で起動されたＩ／Ｏで処理するデータ量である。メモリＤＩＦ制御の起動数は、ＩＯＣ３０３で起動されるメモリＤＩＦ制御の起動の数である。メモリＤＩＦ制御の総転送量は、ＩＯＣ３０３で起動されたメモリＤＩＦ制御で処理するデータ量である。図７の例で、ＩＯＣ起動量情報７００−１は、ＩＯＣ３０３のＩＯＣＩＤ「１」、Ｉ／Ｏの起動数「２」、Ｉ／Ｏの総転送量「４００」、メモリＤＩＦ制御の起動数「１１」、メモリＤＩＦ制御の総転送量「１１００」を示す。
【００５６】
（コア起動量テーブル８００の一例）
図８は、実施の形態２にかかるコア起動量テーブル８００の一例を示す説明図である。コア起動量テーブル８００は、コア３１１ごとに、現在のコア３１１のＢｕｓｙ率とメモリＤＩＦ制御の転送量とを対応付けて記憶するテーブルである。コア起動量テーブル８００は、例えば、後述する作成部９０１によって作成され、メモリ３０２に記憶され、後述する更新部９０２によって更新される。コア起動量テーブル８００は、コアＩＤ、Ｂｕｓｙ率、メモリＤＩＦ制御の起動数、およびメモリＤＩＦ制御の総転送量のフィールドを有する。コア起動量テーブル８００は、各フィールドに情報を設定することで、コア起動量情報（例えばコア起動量情報８００−１〜８００−ｎ）をレコードとして記憶する。
【００５７】
ここでコアＩＤは、コア３１１の識別子である。Ｂｕｓｙ率は、コア３１１のＢｕｓｙ率である。メモリＤＩＦ制御の起動数は、コア３１１で起動するメモリＤＩＦ制御の起動の数である。メモリＤＩＦ制御の総転送量は、コア３１１で起動するメモリＤＩＦ制御で処理するデータ量である。図８の例で、コア起動量情報８００−１は、コア３１１のコアＩＤ「１」、Ｂｕｓｙ率「１０％」、メモリＤＩＦ制御の起動数「４」、メモリＤＩＦ制御の総転送量「２５０」を示す。
【００５８】
（ストレージ制御装置２０１の機能的構成例）
図９は、実施の形態２にかかるストレージ制御装置２０１の機能的構成例を示すブロック図である。図９において、ストレージ制御装置２０１は、作成部９０１と、更新部９０２と、決定部９０３とを含む構成である。各機能部は、具体的には、例えば、図３に示したメモリ３０２などの記憶装置に記憶されたプログラムをプロセッサ３０１に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図３に示したメモリ３０２などの記憶装置に記憶される。
【００５９】
作成部９０１は、ＩＯＣ負荷特性テーブル５００およびコア負荷特性テーブル６００を作成して、メモリ３０２に記憶する機能を有する。例えば、作成部９０１は、ストレージ制御装置２０１の工場出荷時、ストレージ制御装置２０１の起動時、またはストレージ制御装置２０１の構成変更が行われた際に、ＩＯＣ負荷特性テーブル５００およびコア負荷特性テーブル６００を作成する。
【００６０】
また、作成部９０１は、ＩＯＣ３０３ごとに、ＩＯＣ起動量テーブル７００のレコードを作成し、コア３１１ごとに、コア起動量テーブル８００のレコードを作成して、メモリ３０２に記憶する機能を有する。例えば、作成部９０１は、ストレージ制御装置２０１の起動時、ＩＯＣ起動量テーブル７００およびコア起動量テーブル８００を作成する。なお、作成部９０１の具体的な処理内容については後述する。
【００６１】
更新部９０２は、メモリ３０２に記憶されるＩＯＣ起動量テーブル７００およびコア起動量テーブル８００を更新する機能を有する。なお、更新部９０２の具体的な処理内容については後述する。
【００６２】
決定部９０３は、実行対象となるメモリＤＩＦ制御を起動するＩＯＣ３０３またはコア３１１を決定する機能を有する。具体的には、例えば、決定部９０３は、負荷を表す指標値ＬＦIが最小であるＩＯＣ３０３を決定し、負荷を表す指標値ＬＦCが最小であるコア３１１を決定する。この後、決定部９０３は、負荷を表す指標値ＬＦI、ＬＦCが小さい方を、メモリＤＩＦ制御を起動するＩＯＣ３０３またはコア３１１と決定する。
【００６３】
決定部９０３は、実行対象のメモリＤＩＦ制御の転送量を特定する。決定部９０３は、ＩＯＣ３０３ごとに、特定したメモリＤＩＦ制御の転送量と、ＩＯＣ起動量テーブル７００のメモリＤＩＦ制御の総転送量を加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。例えば、加算した総転送量を、ＩＯＣ３０３が単位時間当たりに起動可能なＤＩＦ制御の最大転送量で割ることにより、決定部９０３は、加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。
【００６４】
次に、決定部９０３は、ＩＯＣ３０３ごとに、ＩＯＣ起動量テーブル７００のＩ／Ｏの総転送量に基づいて、ＩＯＣ３０３の使用率を算出する。例えば、ＩＯＣ起動量テーブル７００のＩ／Ｏの総転送量を、ＩＯＣ３０３が単位時間当たりに実行可能な最大のＩ／Ｏの総転送量で割ることにより、決定部９０３は、ＩＯＣ起動量テーブル７００のＩ／Ｏの総転送量に基づいて、ＩＯＣ３０３の使用率を算出する。
【００６５】
次に、決定部９０３は、ＩＯＣ負荷特性テーブル５００から、算出したメモリＤＩＦ制御の起動率と算出したＩＯＣ３０３の使用率に対応するＩＯＣ３０３の負荷を表す指標値ＬＦIを特定する。決定部９０３は、ＩＯＣ３０３ごとに求めたＩＯＣ３０３の負荷を表す指標値ＬＦIが最小であるＩＯＣ３０３を決定する。
【００６６】
決定部９０３は、コア３１１ごとに、特定したメモリＤＩＦ制御の転送量と、コア起動量テーブル８００のメモリＤＩＦ制御の総転送量を加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。例えば、加算した総転送量を、コア３１１が単位時間当たりに起動可能なメモリＤＩＦ制御の最大の転送量で割ることにより、決定部９０３は、加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。
【００６７】
次に、決定部９０３は、コア負荷特性テーブル６００から、算出したメモリＤＩＦ制御の起動率とコア起動量テーブル８００のＢｕｓｙ率に対応するコア３１１の負荷を表す指標値ＬＦCを特定する。決定部９０３は、コア３１１ごとに求めたコア３１１の負荷を表す指標値ＬＦCが最小であるコア３１１を決定する。
【００６８】
決定部９０３は、上記で決定したＩＯＣ３０３の負荷を表す指標値ＬＦIとコア３１１の負荷を表す指標値ＬＦCとを比較して、負荷を表す指標値ＬＦI、ＬＦCが小さい方を、メモリＤＩＦ制御を起動する起動先のＩＯＣ３０３またはコア３１１と決定する。
【００６９】
（作成部９０１の具体的な処理内容）
ここで、作成部９０１の具体的な処理内容について説明する。
【００７０】
＜ＩＯＣ負荷特性テーブル５００の作成＞
ＩＯＣ３０３は、メモリＤＩＦ制御以外に、ＨＤＤのリード、ライト処理やホストコンピュータからのデータ転送などＩ／Ｏ制御も実施している。ＩＯＣ３０３に、Ｉ／Ｏ制御とメモリＤＩＦ制御を同時に動作させると、ＩＯＣ３０３内の共有資源が競合することで、それぞれを単独に起動するより、Ｉ／Ｏの遅延やメモリＤＩＦ制御の性能低下が発生する。
【００７１】
また、性能低下の特性はＩＯＣ３０３ごとにＩ／Ｏ数やメモリＤＩＦ制御の起動量により変動する。この性能低下の特性を把握するために、作成部９０１は、ＩＯＣ３０３ごとに実際にＩ／ＯとメモリＤＩＦ制御を起動し、ＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを記憶するＩＯＣ負荷特性テーブル５００を作成する。作成部９０１は、以下の手順でＩＯＣ負荷特性テーブル５００を作成する。
【００７２】
（１）作成部９０１は、ＩＯＣ３０３に所定の量のＩ／Ｏを継続的に起動し続け、ＩＯＣ３０３の使用率を所定の使用率（ｊ％）にする。例えば、ＩＯＣ３０３が単位時間に１００回Ｉ／Ｏの実行を行う性能を有する場合、単位時間に１０回Ｉ／Ｏを起動することにより、ＩＯＣ３０３の使用率を１０％にする。
【００７３】
（２）作成部９０１は、ＩＯＣ３０３に所定のデータ量（ｍブロック）を処理するメモリＤＩＦ制御を起動させ、ＩＯＣ３０３のメモリＤＩＦ制御の起動率を所定の起動率（ｋ％）にする。例えば、ＩＯＣ３０３が単位時間に５００ブロックのデータ量のメモリＤＩＦ制御の実行を行う性能を有するとする。この場合、作成部９０１は、単位時間に５０ブロックのデータ量のメモリＤＩＦ制御を起動することにより、ＩＯＣ３０３のメモリＤＩＦ制御の起動率を１０％にする。
【００７４】
（３）作成部９０１は、単位時間内でＩＯＣ３０３がメモリＤＩＦ制御で処理できなかったデータ量（ｎブロック）を検出する。
【００７５】
（４）作成部９０１は、下記式（１）を用いて、ＩＯＣ３０３の使用率（ｊ％）、ＩＯＣ３０３のメモリＤＩＦ制御の起動率（ｋ％）におけるＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを算出する。
【００７６】
ＬＦI＝（ｎ／ｍ）×１００      ・・・（１）
【００７７】
（５）作成部９０１は、ＩＯＣ３０３の使用率（ｊ％）、ＩＯＣ３０３のメモリＤＩＦ制御の起動率（ｋ％）を所定の間隔、例えば１０％で変動させ、（１）〜（４）を繰り返す。これにより、作成部９０１は、ＩＯＣ３０３の使用率（ｊ％）、ＩＯＣ３０３のメモリＤＩＦ制御の起動率（ｋ％）、それぞれ０％〜１００％までＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを算出する。作成部９０１は、算出した指標値ＬＦIをＩＯＣ負荷特性テーブル５００に記憶する。
【００７８】
（６）作成部９０１は、すべてのＩＯＣ３０３に対して、（１）〜（５）を繰り返し、ＩＯＣ３０３ごとのＩＯＣ負荷特性テーブル５００を作成する。
【００７９】
＜コア負荷特性テーブル６００の作成＞
プロセッサ３０１の各コア３１１は、メモリＤＩＦ制御以外に、ストレージ制御装置２０１の制御も実施している。このため、コア３１１でメモリＤＩＦ制御を起動した場合、コア３１１のメモリＤＩＦ制御の起動率とコア３１１のＢｕｓｙ率によりメモリＤＩＦ制御の性能は変動する。この低下特性を把握するために、作成部９０１は、コア３１１ごとに所定のＢｕｓｙ率でメモリＤＩＦ制御を起動し、コア３１１にかかる負荷を表す指標値ＬＦCを記憶するコア負荷特性テーブル６００を作成する。作成部９０１は、以下の手順でコア負荷特性テーブル６００を作成する。
【００８０】
（１’）作成部９０１は、コア３１１のＢｕｓｙ率を所定のＢｕｓｙ率（ｊ％）にする。例えば、作成部９０１は、コア３１１に負荷を与えるプログラムを起動させることでコア３１１のＢｕｓｙ率を所定のＢｕｓｙ率にする。
【００８１】
（２’）作成部９０１は、コア３１１に所定のデータ量（ｍ’ブロック）を処理するメモリＤＩＦ制御を起動させ、コア３１１のメモリＤＩＦ制御の起動率を所定の起動率（ｋ％）にする。例えば、コア３１１が単位時間に５００ブロックのデータ量のメモリＤＩＦ制御の実行を行う性能を有するとする。この場合、作成部９０１は、単位時間に５０ブロックのデータ量のメモリＤＩＦ制御を起動することにより、コア３１１のメモリＤＩＦ制御の起動率を１０％にする。
【００８２】
（３’）作成部９０１は、単位時間内でコア３１１がメモリＤＩＦ制御で処理しなかったデータ量（ｎ’ブロック）を検出する。
【００８３】
（４’）作成部９０１は、下記式（２）を用いて、コア３１１のＢｕｓｙ率（ｊ％）、コア３１１のメモリＤＩＦ制御の起動率（ｋ％）におけるコア３１１にかかる負荷を表す指標値ＬＦCを算出する。
【００８４】
ＬＦC＝（ｎ’／ｍ’）×１００      ・・・（２）
【００８５】
（５’）作成部９０１は、コア３１１のＢｕｓｙ率（ｊ％）、コア３１１のメモリＤＩＦ制御の起動率（ｋ％）を所定の間隔、例えば１０％で変動させ、（１’）〜（４’）を繰り返す。これにより、作成部９０１は、コア３１１のＢｕｓｙ率（ｊ％）、コア３１１のメモリＤＩＦ制御の起動率（ｋ％）、それぞれ０％〜１００％までコア３１１にかかる負荷を表す指標値ＬＦCを算出する。作成部９０１は、算出した指標値ＬＦCをコア負荷特性テーブル６００に記憶する。
【００８６】
（６’）作成部９０１は、すべてのコア３１１に対して、（１’）〜（５’）を繰り返し、コア３１１ごとのコア負荷特性テーブル６００を作成する。
【００８７】
（更新部９０２の具体的な処理内容）
ここで、更新部９０２の具体的な処理内容について説明する。
【００８８】
＜ＩＯＣ起動量テーブル７００の更新＞
（１）更新部９０２は、ＩＯＣ３０３がＩ／Ｏ要求を受け付けたとき、ＩＯＣ起動量テーブル７００のＩ／Ｏ要求を受け付けたＩＯＣ３０３のレコードのＩ／Ｏの起動数を１加算する。さらに、更新部９０２は、当該Ｉ／Ｏ要求でのデータ転送量を、Ｉ／Ｏ要求を受け付けたＩＯＣ３０３のレコードのＩ／Ｏの総転送量に加算する。
【００８９】
（２）更新部９０２は、ＩＯＣ３０３が要求を受け付けたＩ／Ｏを完了したとき、ＩＯＣ起動量テーブル７００のＩ／Ｏ要求を受け付けたＩＯＣ３０３のレコードのＩ／Ｏの起動数を１減算する。さらに、更新部９０２は、当該Ｉ／Ｏ要求でのデータ転送量を、Ｉ／Ｏ要求を受け付けたＩＯＣ３０３のレコードのＩ／Ｏの総転送量から減算する。
【００９０】
（３）更新部９０２は、決定部９０３でＩＯＣ３０３がメモリＤＩＦ制御を起動することに決定したとき、ＩＯＣ起動量テーブル７００のメモリＤＩＦ制御を起動したＩＯＣ３０３のレコードのメモリＤＩＦ制御の起動数を１加算する。さらに、更新部９０２は、当該メモリＤＩＦ制御でのデータ転送量を、メモリＤＩＦ制御を起動したＩＯＣ３０３のレコードのメモリＤＩＦ制御の総転送量に加算する。
【００９１】
（４）更新部９０２は、ＩＯＣ３０３でのメモリＤＩＦ制御の実行が完了したとき、ＩＯＣ起動量テーブル７００のメモリＤＩＦ制御を起動したＩＯＣ３０３のレコードのメモリＤＩＦ制御の起動数を１減算する。さらに、更新部９０２は、当該メモリＤＩＦ制御でのデータ転送量を、メモリＤＩＦ制御を起動したＩＯＣ３０３のレコードのメモリＤＩＦ制御の総転送量から減算する。
【００９２】
＜コア起動量テーブル８００の更新＞
（１’）更新部９０２は、コア３１１上で動作するＯＳのＢｕｓｙ率採取機能を使用して、コア起動量テーブル８００のＢｕｓｙ率を定期的に更新する。または、更新部９０２は、定期的な割込みをコア３１１上で動作するＯＳに対して行い、タスクの動作状態またはアイドル状態を定期的に収集することでＢｕｓｙ率を求めることもできる。タスクとはＯＳから見た処理の実行単位であり、タスクの動作状態とは、コア３１１がプログラムを実行する状態であり、タスクのアイドル状態とは、実行するプログラムがない状態である。
【００９３】
（２’）更新部９０２は、決定部９０３でコア３１１がメモリＤＩＦ制御を起動することを決定したとき、コア起動量テーブル８００のメモリＤＩＦ制御を起動したコア３１１のレコードのメモリＤＩＦ制御の起動数を１加算する。さらに、更新部９０２は、当該メモリＤＩＦ制御でのデータ転送量を、メモリＤＩＦ制御を起動したコア３１１のレコードのメモリＤＩＦ制御の総転送量に加算する。
【００９４】
（３’）更新部９０２は、コア３１１でのメモリＤＩＦ制御の実行が完了したとき、コア起動量テーブル８００のメモリＤＩＦ制御を起動したるコア３１１のレコードのメモリＤＩＦ制御の起動数を１減算する。さらに、更新部９０２は、当該メモリＤＩＦ制御でのデータ転送量を、メモリＤＩＦ制御を起動したコア３１１のレコードのメモリＤＩＦ制御の総転送量から減算する。
【００９５】
（ストレージ制御装置２０１のＩＯＣ負荷特性テーブル５００作成処理）
図１０は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ負荷特性テーブル５００の作成処理手順の一例を示すフローチャートである。図１０のフローチャートにおいて、まず、作成部９０１は、ＩＯＣ３０３のＩＤを示すｉを１に設定する（ステップＳ１００１）。その後、作成部９０１は、ＩＯＣ３０３の使用率を示すｊを０に設定し（ステップＳ１００２）、メモリＤＩＦ制御の起動率を示すｋを０に設定する（ステップＳ１００３）。
【００９６】
次に、作成部９０１は、ＩＯＣ３０３に所定の量のＩ／Ｏを継続的に起動し続け、ＩＯＣ３０３の使用率を所定の使用率（ｊ％）にする（ステップＳ１００４）。作成部９０１は、ＩＯＣ３０３に所定のデータ量を処理するメモリＤＩＦ制御を起動させ、ＩＯＣ３０３のメモリＤＩＦ制御の起動率を所定の起動率（ｋ％）にする（ステップＳ１００５）。
【００９７】
次に、作成部９０１は、単位時間内にＩＯＣ３０３がメモリＤＩＦ制御で処理できなかったデータ量を検出する（ステップＳ１００６）。作成部９０１は、所定のデータ量に対する、単位時間内にＩＯＣ３０３が処理できなかったデータ量の割合を、ＩＯＣ３０３にかかる負荷を表す指標値ＬＦIとして算出する（ステップＳ１００７）。
【００９８】
作成部９０１は、ｋに１０を加算し（ステップＳ１００８）、ｋが１００より大きいか否かを確認する（ステップＳ１００９）。ｋが１００より大きくない場合（ステップＳ１００９：Ｎｏ）、ステップＳ１００４に移行して、作成部９０１は、加算したメモリＤＩＦ制御の起動率（ｋ％）でのＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを算出する。
【００９９】
ｋが１００より大きい場合（ステップＳ１００９：Ｙｅｓ）、作成部９０１は、ｊに１０を加算し（ステップＳ１０１０）、ｊが１００より大きいか否かを確認する（ステップＳ１０１１）。ｊが１００より大きくない場合（ステップＳ１０１１：Ｎｏ）、ステップＳ１００３に移行して、作成部９０１は、加算したＩＯＣ３０３の使用率（ｊ％）でのＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを算出する。
【０１００】
ｊが１００より大きい場合（ステップＳ１０１１：Ｙｅｓ）、作成部９０１は、ｉに１を加算し（ステップＳ１０１２）、ｉがＩＯＣ数のｎより大きいか否かを確認する（ステップＳ１０１３）。ｉがｎより大きくない場合（ステップＳ１０１３：Ｎｏ）、ステップＳ１００２に移行して、作成部９０１は、加算したＩＯＣＩＤ「ｉ」でのＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを算出する。
【０１０１】
ｉがｎより大きい場合（ステップＳ１０１３：Ｙｅｓ）、作成部９０１は、ＩＯＣ負荷特性テーブル５００の作成処理を終了する。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置２０１のＩＯＣ負荷特性テーブル５００が作成される。
【０１０２】
ストレージ制御装置２０１のコア負荷特性テーブル６００は、ＩＯＣ負荷特性テーブル５００作成のフローチャートに記載された手順と同様に作成される。例えば、ステップＳ１００４で作成部９０１は、コア３１１に負荷を与えるプログラムを起動させることで、コアＩＤ「ｉ」のＢｕｓｙ率をｊ％にする。次に、ステップＳ１００５で、作成部９０１は、コア３１１に所定のデータ量を処理するメモリＤＩＦ制御を起動させ、コア３１１のメモリＤＩＦ制御の起動率を所定の起動率（ｋ％）にする。次に、ステップＳ１００６で、作成部９０１は、単位時間内にコア３１１がメモリＤＩＦ制御で処理できなかったデータ量を検出する。次に、ステップＳ１００７で、作成部９０１は、所定のデータ量に対する、単位時間内にコア３１１が処理できなかったデータ量の割合を、コア３１１にかかる負荷を表す指標値ＬＦCとして算出する。これにより、ストレージ制御装置２０１のコア負荷特性テーブル６００が作成される。
【０１０３】
（ストレージ制御装置２０１のＩ／Ｏ処理）
図１１は、実施の形態２にかかるストレージ制御装置２０１のＩ／Ｏ処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、ストレージ制御装置２０１は、Ｉ／Ｏ要求を受け、他のストレージ制御装置２０１からのデータをＩＯＣ３０３が受信する（ステップＳ１１０１）。受信したデータは、メモリ３０２に記憶される。次に、ストレージ制御装置２０１は、メモリ３０２に記憶されたデータに対して、メモリＤＩＦ制御を実行するか否かを判定する（ステップＳ１１０２）。
【０１０４】
メモリＤＩＦ制御を実行する場合（ステップＳ１１０２：Ｙｅｓ）、ストレージ制御装置２０１は、メモリＤＩＦ制御の処理を行う（ステップＳ１１０３）。ストレージ制御装置２０１によるメモリＤＩＦ制御処理の詳細は以下の図１２で説明される。ストレージ制御装置２０１は、メモリＤＩＦ制御の処理を完了後、ステップＳ１１０４に移行する。
【０１０５】
メモリＤＩＦ制御を実行しない場合（ステップＳ１１０２：Ｎｏ）、ストレージ制御装置２０１は、メモリ３０２に記憶されたデータをストレージ２１０に書き込む処理を行う（ステップＳ１１０４）。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置２０１のＩ／Ｏ処理が行われる。
【０１０６】
図１２は、実施の形態２にかかるストレージ制御装置２０１のメモリＤＩＦ制御処理手順の一例を示すフローチャートである。図１２のフローチャートにおいて、まず、決定部９０３は、最小負荷のＩＯＣ３０３を選択する（ステップＳ１２０１）。決定部９０３による最小負荷のＩＯＣ３０３の選択処理の詳細は以下の図１３で説明される。次に、決定部９０３は、最小負荷のコア３１１を選択する（ステップＳ１２０２）。決定部９０３による最小負荷のコア３１１の選択処理の詳細は以下の図１４で説明される。
【０１０７】
決定部９０３は、ＩＯＣ３０３の最小負荷がコア３１１の最小負荷より小さいか否かを判定する（ステップＳ１２０３）。具体的には、ステップＳ１２０１で最小負荷のＩＯＣ３０３を選択するために算出されたＩＯＣ３０３の負荷を表す指標値ＬＦIと、ステップＳ１２０２で最小負荷のコア３１１を選択するために算出されたコア３１１の負荷を表す指標値ＬＦCとを比較する。ＩＯＣ３０３の負荷を表す指標値ＬＦIが小さい場合、ＩＯＣ３０３の最小負荷がコア３１１の最小負荷より小さいと判定する。
【０１０８】
ＩＯＣ３０３の最小負荷がコア３１１の最小負荷より小さい場合（ステップＳ１２０３：Ｙｅｓ）、決定部９０３は、ＩＯＣ起動量テーブル７００の最小負荷のＩＯＣ３０３のレコードを更新する（ステップＳ１２０４）。具体的には最小負荷のＩＯＣ３０３のメモリＤＩＦ制御の起動数を１加算して、最小負荷のＩＯＣ３０３のメモリＤＩＦ制御の総転送量に、実行対象のメモリＤＩＦ制御の転送量を加算する。
【０１０９】
この後、決定部９０３は、最小負荷のＩＯＣ３０３にメモリＤＩＦ制御を起動させ（ステップＳ１２０５）、最小負荷のＩＯＣ３０３によるメモリＤＩＦ制御が完了するのを待つ（ステップＳ１２０６）。最小負荷のＩＯＣ３０３によるメモリＤＩＦ制御が完了後、決定部９０３は、ＩＯＣ起動量テーブル７００の最小負荷のＩＯＣ３０３のレコードを更新する（ステップＳ１２０７）。具体的には最小負荷のＩＯＣ３０３のメモリＤＩＦ制御の起動数を１減算して、最小負荷のＩＯＣ３０３のメモリＤＩＦ制御の総転送量から、起動されたメモリＤＩＦ制御の転送量を減算する。
【０１１０】
ＩＯＣ３０３の最小負荷がコア３１１の最小負荷より小さくない場合（ステップＳ１２０３：Ｎｏ）、決定部９０３は、コア起動量テーブル８００の最小負荷のコア３１１のレコードを更新する（ステップＳ１２０８）。具体的には最小負荷のコア３１１のメモリＤＩＦ制御の起動数を１加算して、最小負荷のコア３１１のメモリＤＩＦ制御の総転送量に、実行対象のメモリＤＩＦ制御の転送量を加算する。
【０１１１】
この後、決定部９０３は、最小負荷のコア３１１にメモリＤＩＦ制御を起動させ（ステップＳ１２０９）、最小負荷のコア３１１によるメモリＤＩＦ制御が完了するのを待つ（ステップＳ１２１０）。最小負荷のコア３１１によるメモリＤＩＦ制御が完了後、決定部９０３は、コア起動量テーブル８００の最小負荷のコア３１１のレコードを更新する（ステップＳ１２１１）。具体的には最小負荷のコア３１１のメモリＤＩＦ制御の起動数を１減算して、最小負荷のコア３１１のメモリＤＩＦ制御の総転送量から、起動されたメモリＤＩＦ制御の転送量を減算する。
【０１１２】
これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置２０１のメモリＤＩＦ制御の処理が行われる。
【０１１３】
図１３は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ選択処理手順の一例を示すフローチャートである。まず、決定部９０３は、ＩＯＣ３０３のＩＤを示すｉを１に設定する（ステップＳ１３０１）。決定部９０３は、ＩＯＣ起動量テーブル７００のＩＯＣＩＤ「ｉ」のレコードのメモリＤＩＦ制御の総転送量に、実行対象のメモリＤＩＦ制御の転送量を加算することでＩＯＣＩＤ「ｉ」のメモリＤＩＦ制御の総転送量を算出する（ステップＳ１３０２）。次に、決定部９０３は、算出した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する（ステップＳ１３０３）。例えば、決定部９０３は、ＩＯＣＩＤ「ｉ」が単位時間で実行可能な最大のメモリＤＩＦ制御の総転送量で、算出したメモリＤＩＦ制御の総転送量を割ることにより、メモリＤＩＦ制御の起動率を算出する。
【０１１４】
決定部９０３は、ＩＯＣ起動量テーブル７００のＩＯＣＩＤ「ｉ」のＩ／Ｏの総転送量に基づき、ＩＯＣ３０３の使用率を算出する（ステップＳ１３０４）。例えば、決定部９０３は、ＩＯＣＩＤ「ｉ」が単位時間で実行可能な最大のＩ／Ｏの総転送量で、ＩＯＣ起動量テーブル７００のＩＯＣＩＤ「ｉ」のＩ／Ｏの総転送量を割ることにより、ＩＯＣＩＤ「ｉ」の使用率を算出する。決定部９０３は、算出されたメモリＤＩＦ制御の起動率と算出された使用率に対応するＩＯＣＩＤ「ｉ」の負荷を表す指標値ＬＦIをＩＯＣ負荷特性テーブル５００から特定する（ステップＳ１３０５）。
【０１１５】
決定部９０３は、ｉに１を加算し（ステップＳ１３０６）、ｉがＩＯＣ数のｎより大きいか否かを確認する（ステップＳ１３０７）。ｉがｎより大きくない場合（ステップＳ１３０７：Ｎｏ）、ステップＳ１３０２に移行して、決定部９０３は、加算したＩＯＣＩＤ「ｉ」でのＩＯＣ３０３にかかる負荷を表す指標値ＬＦIを特定する。
【０１１６】
ｉがｎより大きい場合（ステップＳ１３０７：Ｙｅｓ）、決定部９０３は、特定した各ＩＯＣ３０３の負荷を表す指標値ＬＦIのなかで、最小の指標値ＬＦIのＩＯＣ３０３を最小負荷のＩＯＣ３０３として選択する（ステップＳ１３０８）。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、決定部９０３は、最小負荷のＩＯＣ３０３を選択する。
【０１１７】
図１４は、実施の形態２にかかるストレージ制御装置２０１のコア選択処理手順の一例を示すフローチャートである。まず、決定部９０３は、コア３１１のＩＤを示すｉを１に設定する（ステップＳ１４０１）。決定部９０３は、コア起動量テーブル８００のコアＩＤ「ｉ」のレコードのメモリＤＩＦ制御の総転送量に、実行対象のメモリＤＩＦ制御の転送量を加算することでコアＩＤ「ｉ」のメモリＤＩＦ制御の総転送量を算出する（ステップＳ１４０２）。次に、決定部９０３は、算出した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する（ステップＳ１４０３）。例えば、決定部９０３は、コアＩＤ「ｉ」が単位時間で実行可能な最大のメモリＤＩＦ制御の総転送量で、算出したメモリＤＩＦ制御の総転送量を割ることにより、メモリＤＩＦ制御の起動率を算出する。
【０１１８】
決定部９０３は、算出されたメモリＤＩＦ制御の起動率とコア起動量テーブル８００のコアＩＤ「ｉ」のＢｕｓｙ率に対応するコアＩＤ「ｉ」の負荷を表す指標値ＬＦCをコア負荷特性テーブル６００から特定する（ステップＳ１４０４）。
【０１１９】
決定部９０３は、ｉに１を加算し（ステップＳ１４０５）、ｉがコア数のｎより大きいか否かを確認する（ステップＳ１４０６）。ｉがｎより大きくない場合（ステップＳ１４０６：Ｎｏ）、ステップＳ１４０２に移行して、決定部９０３は、加算したコアＩＤ「ｉ」でのコア３１１にかかる負荷を表す指標値ＬＦCを特定する。
【０１２０】
ｉがｎより大きい場合（ステップＳ１４０６：Ｙｅｓ）、決定部９０３は、特定した各コア３１１の負荷を表す指標値ＬＦCのなかで、最小の指標値ＬＦCのコア３１１を最小負荷のコア３１１として選択する（ステップＳ１４０７）。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、決定部９０３は、最小負荷のコア３１１を選択する。
【０１２１】
図１５は、実施の形態２にかかるストレージ制御装置２０１のＩＯＣ３０３とコア３１１の選択処理の一実施例を示す説明図である。図１５において、ストレージ制御装置２０１は、メモリＤＩＦ制御を実行可能な３つのＩＯＣ３０３と３つのコア３１１を有する。３つのＩＯＣ３０３のＩＯＣ負荷特性テーブル５００は図５に示されるものであり、３つのコア３１１のコア負荷特性テーブル６００は図６に示されるものである。また、実行対象のメモリＤＩＦ制御の転送量が５０であり、各ＩＯＣ３０３が１秒間に実行可能な最大のＩ／Ｏの総転送量が５００であり、各ＩＯＣ３０３および各コア３１１が１秒間に実行可能な最大のメモリＤＩＦ制御の総転送量が５００であるとする。
【０１２２】
図１５の例では、決定部９０３は、最小負荷のＩＯＣ３０３を選択して、次に最小負荷のコア３１１を決定する。決定部９０３は、最小負荷のＩＯＣ３０３と最小負荷のコア３１１を比較して、実行対象のメモリＤＩＦ制御を起動する最小負荷のＩＯＣ３０３を決定する。更新部９０２は、ＩＯＣ起動量テーブル１５００の決定したＩＯＣ３０３のレコードを更新する。該メモリＤＩＦ制御が完了したとき、更新部９０２は、ＩＯＣ起動量テーブル１５００の決定したＩＯＣ３０３のレコードを更新する。
【０１２３】
（１）決定部９０３は、最小負荷のＩＯＣ３０３を選択する。決定部９０３は、ＩＯＣ３０３ごとに、実行対象のメモリＤＩＦ制御の転送量とＩＯＣ起動量テーブル１５００のメモリＤＩＦ制御の総転送量を加算した総転送量に基づいて、ＤＩＦ制御の起動率を算出する。また、決定部９０３は、ＩＯＣ３０３ごとに、ＩＯＣ起動量テーブル１５００のＩ／Ｏの総転送量に基づいて、ＩＯＣ３０３の使用率を算出する。決定部９０３は、ＩＯＣ３０３ごとに、ＩＯＣ負荷特性テーブル５００から、算出したメモリＤＩＦ制御の起動率と算出した使用率とに対応する負荷を表す指標値ＬＦIを求める。決定部９０３は、ＩＯＣ３０３ごとに求めた負荷を表す指標値ＬＦIが最小であるＩＯＣ３０３を最小負荷のＩＯＣ３０３として選択する。
【０１２４】
図１５の例では、レコード１５００−１のＩＯＣＩＤ「１」でメモリＤＩＦの総転送量は４００であり、実行対象のメモリＤＩＦ制御の転送量が５０であるため、メモリＤＩＦ制御の起動率は、（４００＋５０）／５００＝０．９から９０％となる。レコードの１５００−１のＩＯＣＩＤ「１」でＩ／Ｏの総転送量は１００であるため、ＩＯＣ３０３の使用率は、１００／５００＝０．２から２０％となる。ＩＯＣ負荷特性テーブル５００から、起動率９０％と使用率２０％とに対応する負荷を表す指標値ＬＦI「１５」が求められる。
【０１２５】
レコード１５００−２のＩＯＣＩＤ「２」でも同様にして、ＩＯＣＩＤ「２」の負荷を表す指標値ＬＦI「２５」が求められる。また、レコード１５００−３のＩＯＣＩＤ「３」でも同様にして、ＩＯＣＩＤ「３」の負荷を表す指標値ＬＦI「６」が求められる。決定部９０３は、負荷を表す指標値ＬＦIが最小であるＩＯＣＩＤ「３」を最小負荷のＩＯＣ３０３として選択する。
【０１２６】
（２）決定部９０３は、最小負荷のコア３１１を選択する。決定部９０３は、コア３１１ごとに、実行対象のメモリＤＩＦ制御の転送量とコア起動量テーブル１５０１のメモリＤＩＦ制御の総転送量を加算した総転送量に基づいて、メモリＤＩＦ制御の起動率を算出する。決定部９０３は、コア３１１ごとに、コア負荷特性テーブル６００から、算出したメモリＤＩＦ制御の起動率とＢｕｓｙ率とに対応する負荷を表す指標値ＬＦCを求める。決定部９０３は、コア３１１ごとに求めた負荷を表す指標値ＬＦCが最小であるコア３１１を最小負荷のコア３１１として選択する。
【０１２７】
図１５の例では、レコード１５０１−１のコアＩＤ「１」でメモリＤＩＦの総転送量は４００であり、実行対象のＩＦ制御の転送量が５０であるため、メモリＤＩＦ制御の起動率は、（４００＋５０）／５００＝０．９から９０％となる。コア負荷特性テーブル６００から、起動率９０％とＢｕｓｙ率１０％とに対応する負荷を表す指標値ＬＦC「１０」が求められる。
【０１２８】
レコード１５０１−２のコアＩＤ「２」でも同様にして、コアＩＤ「２」の負荷を表す指標値ＬＦC「１５」が求められる。また、レコード１５０１−３のコアＩＤ「３」でも同様にして、コアＩＤ「３」の負荷を表す指標値ＬＦC「２５」が求められる。決定部９０３は、負荷を表す指標値ＬＦCが最小であるコアＩＤ「１」を最小負荷のコア３１１として選択する。
【０１２９】
（３）決定部９０３は、最小負荷のＩＯＣＩＤ「３」の負荷を表す指標値ＬＦI「６」と最小負荷のコアＩＤ「１」の負荷を表す指標値ＬＦC「１０」とを比較して、メモリＤＩＦ制御を起動する起動先の最小負荷のＩＯＣＩＤ「３」を決定する。更新部９０２は、ＩＯＣ起動量テーブル１５００の起動先のＩＯＣＩＤ「３」のレコード１５００−３を更新する。図１５の例では、レコード１５００−３のメモリＤＩＦ制御の起動数が１加算されて、４になり、メモリＤＩＦ制御の総転送量が５０加算されて１３０になる。
【０１３０】
（４）更新部９０２は、メモリＤＩＦ制御が完了したとき、ＩＯＣ起動量テーブル１５００の起動先のＩＯＣＩＤ「３」のレコード１５００−３を更新する。図１５の例では、レコード１５００−３のメモリＤＩＦ制御の起動数が１減算されて、３になり、メモリＤＩＦ制御の総転送量が５０減算されて８０になる。
【０１３１】
以上説明したように、実施の形態２にかかるストレージ制御装置２０１によれば、プロセッサ３０１のいずれかのコア３１１で実行対象となるメモリＤＩＦ制御を起動した場合の負荷を予測することができる。そして、ストレージ制御装置２０１によれば、予測した各ＩＯＣ３０３または各コア３１１の負荷に基づいて、ＩＯＣ３０３またはコア３１１の中から、ストレージ装置の性能を低下させることの少ない、メモリＤＩＦ制御を起動する起動先のＩＯＣ３０３またはコア３１１を決定することができる。
【０１３２】
また、プロセッサ３０１のいずれかのコア３１１は、メモリＤＩＦ制御の起動にＩＯＣ３０３を使用するのが一番効率良いか、または、コア３１１で起動したのが一番効率良いか判断することが可能となる。
【０１３３】
また、ストレージ制御装置２０１の工場出荷時または起動時に、ＩＯＣ負荷特性テーブル５００およびコア負荷特性テーブル６００を作成する。このため、ストレージ制御装置２０１は、各ＩＯＣ３０３および各コア３１１の負荷を表す指標値ＬＦI、ＬＦCを、メモリＤＩＦ制御を起動する前に知ることができる。
【０１３４】
また、ストレージ制御装置２０１は、メモリＤＩＦ制御を起動するコア３１１またはＩＯＣ３０３を選択後、ＩＯＣ起動量テーブル７００またはコア起動量テーブル８００を更新する。このため、ＩＯＣ起動量テーブル７００またはコア起動量テーブル８００は常に最新の値に保たれる。
【０１３５】
なお、本実施の形態で説明した制御プログラムは、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１３６】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１３７】
（付記１）データの正当性を検証する検証処理を実行可能な複数の制御部と、
前記複数の制御部に含まれる制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する第１の記憶部と、
前記制御部に対応して、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とを対応付けて記憶する第２の記憶部と、を有し、
前記複数の制御部のいずれかの制御部は、
前記制御部に対応して、実行対象となる検証処理で処理するデータ量と前記第２の記憶部の記憶内容とに基づき前記第１の記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した当該指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
ことを特徴とするストレージ制御装置。
【０１３８】
（付記２）前記いずれかの制御部は、
前記制御部に対応して、前記第１の記憶部の記憶内容を参照して、前記第２の記憶部に記憶された前記制御部の使用率と、前記第２の記憶部に記憶された前記制御部で起動中の前記検証処理で処理するデータ量に前記実行対象の検証処理で処理するデータ量を加算したデータ量との組み合わせに対応する指標値を特定することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定することを特徴とする付記１に記載のストレージ制御装置。
【０１３９】
（付記３）前記いずれかの制御部は、
前記起動先の制御部を決定したことに応じて、前記第２の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量に、前記実行対象の検証処理で処理するデータ量を加算し、
前記起動先の制御部による前記実行対象の検証処理の実行が完了したことに応じて、前記第２の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量から、前記実行対象の検証処理で処理するデータ量を減算することを特徴とする付記１または２に記載のストレージ制御装置。
【０１４０】
（付記４）前記いずれかの制御部は、
所定の使用率の前記制御部に所定のデータ量を処理する検証処理を実行させ、前記所定のデータ量に対する、前記所定のデータ量のうちの所定の時間内に前記制御部が処理できなかったデータ量の割合を、前記制御部にかかる負荷を表す指標値として算出し、算出した前記制御部にかかる負荷を表す指標値を、前記所定のデータ量と前記所定の使用率との組み合わせに対応付けて前記第１の記憶部に記憶することを特徴とする付記１〜３のいずれか一つに記載のストレージ制御装置。
【０１４１】
（付記５）前記制御部は、ストレージの入出力を制御する入出力コントローラまたは前記入出力コントローラを制御するプロセッサもしくは前記プロセッサに含まれるコアであることを特徴とする付記１〜４のいずれか一つに記載のストレージ制御装置。
【０１４２】
（付記６）前記いずれかの制御部は、
特定した前記指標値が最小である前記制御部を、前記実行対象の検証処理を起動する制御部として決定する、
ことを特徴とする付記１〜５のいずれか一つに記載のストレージ制御装置。
【０１４３】
（付記７）データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムであって、
前記複数の制御部のいずれかの制御部に、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行させることを特徴とする制御プログラム。
【０１４４】
（付記８）データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御方法であって、
前記複数の制御部のいずれかの制御部が、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行することを特徴とする制御方法。
【０１４５】
（付記９）データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムを記録したコンピュータに読み取り可能な記録媒体であって、
前記複数の制御部のいずれかの制御部に、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行させる制御プログラムを記録したことを特徴とするコンピュータに読み取り可能な記録媒体。
【符号の説明】
【０１４６】
１００  ストレージ制御装置
１０１  制御部
１０２  第１の記憶部
１０３  第２の記憶部
２００  ストレージ装置
２０１  ストレージ制御装置
２１０  ストレージ
９０１  作成部
９０２  更新部
９０３  決定部
【図１】
2015075845.tif 000003
【図２】
2015075845.tif 000004
【図３】
2015075845.tif 000005
【図４】
2015075845.tif 000006
【図５】
2015075845.tif 000007
【図６】
2015075845.tif 000008
【図７】
2015075845.tif 000009
【図８】
2015075845.tif 000010
【図９】
2015075845.tif 000011
【図１０】
2015075845.tif 000012
【図１１】
2015075845.tif 000013
【図１２】
2015075845.tif 000014
【図１３】
2015075845.tif 000015
【図１４】
2015075845.tif 000016
【図１５】
2015075845.tif 000017