JP6136834B2 - ストレージ制御装置、制御プログラムおよび制御方法 - Google Patents

ストレージ制御装置、制御プログラムおよび制御方法 Download PDF

Info

Publication number
JP6136834B2
JP6136834B2 JP2013210556A JP2013210556A JP6136834B2 JP 6136834 B2 JP6136834 B2 JP 6136834B2 JP 2013210556 A JP2013210556 A JP 2013210556A JP 2013210556 A JP2013210556 A JP 2013210556A JP 6136834 B2 JP6136834 B2 JP 6136834B2
Authority
JP
Japan
Prior art keywords
control
control unit
memory
storage
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2013210556A
Other languages
English (en)
Other versions
JP2015075845A (ja
Inventor
祐司 野田
祐司 野田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013210556A priority Critical patent/JP6136834B2/ja
Priority to US14/479,865 priority patent/US20150100865A1/en
Publication of JP2015075845A publication Critical patent/JP2015075845A/ja
Application granted granted Critical
Publication of JP6136834B2 publication Critical patent/JP6136834B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0727Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a storage system, e.g. in a DASD or network based storage system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy

Description

本発明は、ストレージ制御装置、制御プログラムおよび制御方法に関する。
多くの企業向けストレージ装置は、データの保全性を保証するための機能として、DIF(Data Integrity Feature)制御機能をサポートしている。DIF制御機能とは、ストレージ装置が、ストレージ内で保持する各種データの保全性を保証するために、各データブロック(512byte)に、8バイトのチェックコードを付加し、データの正当性を検証する機能である。
DIF制御機能は、ANSI(American National Standards Institute)のT10で規格化され、企業向けストレージ装置の標準的な機能となっている。このため、ストレージ装置向けの汎用I/O(Input Output)コントローラ(以下、「IOC(IO Controller)」と称する)の多くは、I/Oのデータ転送中のDIF制御機能を実行可能である。
また、IOCは、メモリ上のデータのDIF制御機能を行うためのDIF制御機能(以下、「メモリDIF制御機能」と称する)を別途有しているものがある。さらに、企業向けの大型のストレージ装置は、高機能化および高性能化に伴い、メモリDIF制御機能を有するIOCを複数搭載しているものがある。
また、ストレージ装置の高性能化が進み、ストレージ装置が、装置内に、高性能なマルチコアプロセッサや、複数のプロセッサを搭載するようになっている。複数のプロセッサの一部を使って、プログラムでメモリDIF制御機能を実行する方法も採用されている。さらに、自動バックアップや仮想化などのストレージ装置の高機能化に伴い、ストレージ装置内のデータ移動方法や格納場所は多岐にわたり、メモリDIF制御によるデータの正当性の検証は、ますます重要になり、実行頻度も非常に多くなっている。
関連する先行技術としては、例えば、I/O処理を行うマイクロプロセッサが、自分の負荷が第一の負荷以上の場合に、I/O処理を、他のマイクロプロセッサに割り振るものがある。また、チェックコードによってある一定レベルの誤り検出が可能となるデータ数と転送されるデータのデータ数とを比較し、その比較結果に応じて転送されるデータについてのデータ転送の休止要求を出力するデータ転送制御方法がある。
特開2007−249729号公報 特開平11−25008号公報
しかしながら、従来技術では、ストレージ装置内のIOCやプロセッサでメモリDIF制御を実行する場合、IOCやプロセッサにかかる負荷のバランスが不均等となり、ストレージ装置の性能低下を招くという問題がある。
例えば、従来技術では、ストレージ装置内のどのIOCやプロセッサにメモリDIF制御を割り当てれば効率良く実行できるのか判断することが困難なため、I/Oの種類や用途ごとに固定箇所のIOCやプロセッサを使用してメモリDIF制御を実行していた。この場合、ストレージ装置内で処理するI/Oの種類や用途に片寄りがあると、IOCやプロセッサにかかる負荷のバランスが不均等となり、ストレージ装置の性能が低下してしまう。
一つの側面では、本発明は、ストレージ装置の性能低下を抑制することができるストレージ制御装置、制御プログラムおよび制御方法を提供することを目的とする。
本発明の一側面によれば、データの正当性を検証する検証処理を実行可能な複数の制御部のいずれかの制御部が、前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定するストレージ制御装置、制御プログラムおよび制御方法が提案される。
本発明の一態様によれば、ストレージ装置の性能低下を抑制することができるという効果を奏する。
図1は、実施の形態1にかかるストレージ制御装置100の一実施例を示す説明図である。 図2は、実施の形態2にかかるストレージ装置200のシステム構成例を示す説明図である。 図3は、実施の形態2にかかるストレージ制御装置201のハードウェア構成例を示すブロック図である。 図4は、DIF構造の一例を示す説明図である。 図5は、実施の形態2にかかるIOC負荷特性テーブル500の一例を示す説明図である。 図6は、実施の形態2にかかるコア負荷特性テーブル600の一例を示す説明図である。 図7は、実施の形態2にかかるIOC起動量テーブル700の一例を示す説明図である。 図8は、実施の形態2にかかるコア起動量テーブル800の一例を示す説明図である。 図9は、実施の形態2にかかるストレージ制御装置201の機能的構成例を示すブロック図である。 図10は、実施の形態2にかかるストレージ制御装置201のIOC負荷特性テーブル500の作成処理手順の一例を示すフローチャートである。 図11は、実施の形態2にかかるストレージ制御装置201のI/O処理手順の一例を示すフローチャートである。 図12は、実施の形態2にかかるストレージ制御装置201のメモリDIF制御処理手順の一例を示すフローチャートである。 図13は、実施の形態2にかかるストレージ制御装置201のIOC選択処理手順の一例を示すフローチャートである。 図14は、実施の形態2にかかるストレージ制御装置201のコア選択処理手順の一例を示すフローチャートである。 図15は、実施の形態2にかかるストレージ制御装置201のIOC303とコア311の選択処理の一実施例を示す説明図である。
以下に図面を参照して、本発明にかかるストレージ制御装置、制御プログラムおよび制御方法の実施の形態を詳細に説明する。
(実施の形態1)
図1は、実施の形態1にかかるストレージ制御装置100の一実施例を示す説明図である。図1において、ストレージ制御装置100は、複数の制御部101(図1の例では、制御部101−1〜101−3)と、第1の記憶部102と、第2の記憶部103とを有する。
ストレージ制御装置100は、ストレージ装置の構成要素の一つであり、ストレージ装置全体の制御を行うコンピュータである。ストレージ制御装置100は、ホストコンピュータからのI/O要求を受け付け、ホストコンピュータからのデータをストレージに書き込む、または、ストレージからデータを読み出す。ストレージは、データを記憶する記憶装置であり、例えば、ハードディスク、光ディスク、フラッシュメモリ、磁気テープなどである。
制御部101は、メモリDIF制御機能を有する。メモリDIF制御機能とは、メモリ上のデータに対してDIF制御を行う機能である。DIF制御とは、ストレージ内で保持するデータの保全性を保証するために、各データブロック(512byte)に、8バイトのチェックコードを付加し、データの正当性を検証する機能である。データの正当性とは、すべてのデータ値が正しく適切であることをアプリケーション等に対して保証することである。
例えば、制御部101は、IOCまたはプロセッサもしくはプロセッサに含まれるコアで実現することができる。IOCは、ハードディスク等の周辺機器とメモリとの間のデータの入出力を制御する入出力コントローラである。例えば、IOCには、FibreChannel制御チップ、SAS(Serial Attached Small Computer System Interface)制御チップ、iSCSI(Internet Small Computer System Interface)チップなどが存在する。プロセッサは、ストレージ制御装置100を制御するものであり、例えば、複数のコアを有するマルチコアプロセッサである。
第1の記憶部102は、負荷特性テーブル112を記憶する。負荷特性テーブル112は、メモリDIF制御を起動した際に制御部101にかかる負荷を表す指標値を、制御部101の使用率と制御部101のメモリDIF制御の起動率との組み合わせに応じて記憶する。
負荷特性テーブル112は、例えば、ストレージ制御装置100の起動時に制御部101によって作成される。また、工場出荷時に、負荷特性テーブル112を予め作成しておき、ストレージ制御装置100に保存しておくこともできる。この場合、例えば、ストレージ制御装置100の構成変更(例えば、制御部101の総数や性能を変更)が行われた際に、制御部101が負荷特性テーブル112を再作成することにしてもよい。
ここで、制御部101の使用率とは、制御部101が単位時間当たりに実行可能な最大処理量に対する実行中の処理量の割合である。具体的には、例えば、制御部101の使用率は、制御部101がIOCである場合、IOCが単位時間当たりに実行可能な最大のI/O数に対する起動中のI/O数の割合で表すことができる。
また、制御部101のメモリDIF制御の起動率とは、制御部101が単位時間当たりに処理可能なメモリDIF制御の最大データ量に対する起動中のメモリDIF制御のデータ量の割合である。例えば、制御部101がIOCである場合、IOCが単位時間当たりに処理可能なメモリDIF制御の最大データ量に対する起動中のDIF制御のデータ量の割合で表すことができる。
負荷を表す指標値とは、ある使用率の制御部101で、ある起動率のメモリDIF制御を起動した場合の制御部101の性能低下率を表すものである。例えば、負荷を表す指標値は、ある使用率の制御部101で、ある起動率のメモリDIF制御を起動した場合において、起動したメモリDIF制御のデータ量に対する単位時間内で実行を完了できなかったメモリDIF制御のデータ量の割合である。
具体的には、例えば、制御部101の使用率が10%、制御部101のメモリDIF制御の起動率が20%であったとする。この場合、図1の例では、負荷を表す指標値は4であるため、起動したメモリDIF制御のデータ量が100である場合、単位時間内で実行が完了したメモリDIF制御のデータ量は96となる。
第2の記憶部103は、起動量テーブル113を記憶する。起動量テーブル113は、制御部101(制御部101−1〜101−3)ごとに、現在の制御部101の使用率とメモリDIF制御の転送量とを対応付けて記憶するテーブルである。具体的には、例えば、起動量テーブル113は、制御部ID、使用率、およびメモリDIF制御の転送量のフィールドを有し、各フィールドに情報を設定することで、メモリDIF制御起動量情報(例えば、メモリDIF制御起動量情報113−1〜113−3)をレコードとして記憶する。
ここで、制御部IDは、制御部101の識別子である。使用率は、制御部101の使用率である。メモリDIF制御の転送量は、制御部101で起動したメモリDIF制御で処理するデータ量である。メモリDIF制御で処理するデータ量は、ブロック単位で表される。1ブロックは、例えば、512バイトまたは520バイトである。
実施の形態1では、複数の制御部101のいずれかの制御部101(ここでは、「制御部101−1」とする)が、各制御部101にメモリDIF制御を起動した際の負荷特性(負荷特性テーブル112)を参照して、装置運用中の各制御部101の負荷状況(起動量テーブル113)を基に実行対象となるメモリDIF制御を起動した際の負荷を予測し、実行対象となるメモリDIF制御の起動先を決定する。以下、実施の形態1にかかるストレージ制御装置100のデータ処理例について説明する。
(1)制御部101−1は、実行対象となるメモリDIF制御を起動する起動先の制御部101を決定する。具体的には、例えば、まず、制御部101−1は、実行対象のメモリDIF制御の転送量を特定する。次に、制御部101−1は、制御部101−1〜101−3ごとに、特定したメモリDIF制御の転送量と起動量テーブル113のメモリDIF制御の転送量とを加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。
次に、制御部101−1は、制御部101−1〜101−3ごとに、負荷特性テーブル112を参照して、算出したメモリDIF制御の起動率と起動量テーブル113の使用率とに対応する負荷を表す指標値を特定する。そして、制御部101−1は、制御部101−1〜101−3ごとに特定した負荷を表す指標値が最小である制御部101を、実行対象のメモリDIF制御を起動する起動先の制御部101に決定する。
図1の例では、実行対象のメモリDIF制御の転送量が50であり、制御部101−1〜101−3が単位時間当たりに処理可能なメモリDIF制御の最大転送量が500であるとする。また、起動量テーブル113に記憶された制御部101−1のメモリDIF制御の転送量は400である。このため、実行対象のメモリDIF制御の転送量と制御部101−1−のメモリDIF制御の転送量の加算結果は450となる。
また、制御部101−1が単位時間当たりに処理可能なメモリDIF制御の最大データ量が500であるため、メモリDIF制御の起動率は90%となる。また、起動量テーブル113に記憶された制御部101−1の使用率は10%であるため、負荷特性テーブル112の使用率10%、起動率90%より、制御部101−1の負荷を表す指標値は10となる。
同様にして、制御部101−2の負荷を表す指標値は6となり、制御部101−3の負荷を表す指標値は25となる。この場合、制御部101−1は、制御部101−1〜10−3ごとの負荷を表す指標値が最小である制御部101−2を、実行対象のメモリDIF制御を起動する起動先の制御部101に決定する。
(2)制御部101−1は、決定した起動先の制御部101に対応する起動量テーブル113内のレコードを更新する。図1の例では、起動先の制御部101は制御部101−2であり、実行対象のメモリDIF制御の転送量は50である。このため、制御部101−1は、起動量テーブル113内のメモリDIF制御起動量情報113−2のメモリDIF制御の転送量を100に更新する。
(3)制御部101は、起動先の制御部101による実行対象のメモリDIF制御の実行が完了したことに応じて、起動先の制御部101に対応する起動量テーブル113内のレコードを更新する。図1の例では、起動先の制御部101は制御部101−2であり、実行対象のメモリDIF制御の転送量は50である。このため、制御部101−1は、起動量テーブル113内のメモリDIF制御起動量情報113−2のメモリDIF制御の転送量を50に更新する。
以上説明したように、実施の形態1にかかるストレージ制御装置100によれば、複数の制御部101の各制御部101で実行対象となるメモリDIF制御を起動した場合の負荷を予測することができる。そして、ストレージ制御装置100によれば、予測した各制御部101の負荷に基づいて、複数の制御部101の中から、ストレージ装置の性能を低下させることの少ない、メモリDIF制御を起動する起動先の制御部101を決定することができる。
(実施の形態2)
実施の形態2では、複数の制御部101は、ストレージのI/Oを制御する複数のIOCと複数のコアを有するプロセッサから構成される。各IOCおよび各コアが、メモリDIF制御機能を有する。プロセッサのコアの1つが、メモリDIF制御を起動するIOCまたはコアを決定する。
(ストレージ装置200のシステム構成例)
図2は、実施の形態2にかかるストレージ装置200のシステム構成例を示す説明図である。図2において、ストレージ装置200は、複数のストレージ制御装置201と、複数のストレージ210とを有する。ストレージ装置200は、例えば、FibreChannel、SAS、iSCSI等のインターフェースで複数のホストコンピュータ220に接続される。また、ストレージ装置200は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークを介して複数のホストコンピュータ220に接続されてもよい。
ストレージ制御装置201は、ストレージ装置200全体の制御を行うコンピュータである。ストレージ210は、磁気ディスクドライブ(HDD:Hard Disk Drive)と、磁気ディスクとを有する。磁気ディスクドライブは、ストレージ制御装置201の制御にしたがって磁気ディスクに対するデータのリード/ライトを制御する。磁気ディスクは、磁気ディスクドライブの制御で書き込まれたデータを記憶する。ストレージ210は、SSD(Solid State Drive)を備えてもよい。なお、ストレージ制御装置201は、図1のストレージ制御装置100に対応する。
(ストレージ制御装置201のハードウェア構成例)
図3は、実施の形態2にかかるストレージ制御装置201のハードウェア構成例を示すブロック図である。ストレージ制御装置201は、複数のコア311−1〜311−nを有するプロセッサ301と、メモリ302と、複数のIOC303−1〜303−3とを有する。複数のIOC303は、IOC(ホスト接続)303−1と、IOC(HDD接続)303−2と、IOC(通信)303−3とを有する。また、各構成部は、バス300によってそれぞれ接続される。コア311とIOC303は、メモリDIF制御機能を有する。
ここで、プロセッサ301は、ストレージ制御装置201の全体の制御を司る。メモリ302は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがプロセッサ301のワークエリアとして使用される。メモリ302に記憶されるプログラムは、プロセッサ301にロードされることで、コーディングされている処理をプロセッサ301に実行させる。
IOC(ホスト接続)303−1は、ホストコンピュータ220に接続され、ホストコンピュータ220とデータのI/Oの制御を行う。IOC(HDD接続)303−2は、HDDに接続され、HDDとデータのI/Oの制御を行う。IOC(通信)303−3は、他のストレージ制御装置201に接続され、ストレージ制御装置201間でデータのI/Oの制御を行う。
なお、プロセッサ301とIOC303は、図1の制御部101に対応し、メモリ302は、図1の第1の記憶部102と第2の記憶部103とに対応する。
(DIF構造の一例)
図4は、DIF構造の一例を示す説明図である。ストレージ装置200において、ホストコンピュータ220からのデータのI/OおよびHDD等のストレージ210に記憶するデータのI/Oは、ブロック単位に行われる。図4の例では、512バイト単位で行われる。DIF制御機能は、データの正当性を検証するため、元データ400の各ブロックに8バイトのチェックコードを付加することにより、DIF付加データ401が作成される。
8バイトのチェックコードは、データブロック411のCRC412(Cyclic Redundancy Check:巡回冗長検査)と、リファレンスタグ413と、アプリケーションが定義するアプリケーション・タグ414を有している。
CRC412は、データブロック411を入力とした誤り検出関数の出力値である。なお、誤り検出関数とは、任意長のデータストリームを入力とし、例えば32ビット整数などの固定サイズの値を出力する関数である。メモリDIF制御機能は、CRC412によって、データブロック411の正当性を検証する。リファレンスタグ413には、例えば、LBA(Logical Block Addressing)が設定される。LBAとは、HDD等のストレージ210内のデータ位置を示す値である。アプリケーション・タグ414には、例えば、IOC303の識別子であるIOCIDが設定される。
(IOC負荷特性テーブル500の一例)
図5は、実施の形態2にかかるIOC負荷特性テーブル500の一例を示す説明図である。IOC負荷特性テーブル500は、例えば、後述する作成部901によって作成され、メモリ302に記憶される。
IOC負荷特性テーブル500は、IOC303の使用率とIOC303のメモリDIF制御の起動率との組み合わせにおけるメモリDIF制御を起動した際にIOC303にかかる負荷を表す指標値LFIを記憶する。図5の例では、IOC負荷特性テーブル500は、IOC303の使用率とIOC303のメモリDIF制御の起動率、それぞれ10%ごとに0%から100%まで、IOC303にかかる負荷を表す指標値LFIを記憶する。
なお、IOC303の使用率とは、IOC303が単位時間当たりに実行可能な最大のI/O数に対する起動中のI/O数の割合である。また、IOC303のメモリDIF制御の起動率とは、IOC303が単位時間当たりに処理可能なメモリDIF制御の最大データ量に対する起動中のメモリDIF制御のデータ量の割合である。
IOC303にかかる負荷を表す指標値LFIとは、ある使用率のIOC303で、ある起動率のメモリDIF制御を起動した場合のIOC303の性能低下率を表すものである。例えば、負荷を表す指標値LFIは、ある使用率のIOC303で、ある起動率のメモリDIF制御を起動した場合において、起動したメモリDIF制御のデータ量に対する単位時間内で実行を完了できなかったメモリDIF制御のデータ量の割合である。
(コア負荷特性テーブル600の一例)
図6は、実施の形態2にかかるコア負荷特性テーブル600の一例を示す説明図である。コア負荷特性テーブル600は、例えば、後述する作成部901によって作成され、メモリ302に記憶される。
コア負荷特性テーブル600は、コア311のBusy率とコア311のメモリDIF制御の起動率との組み合わせにおけるメモリDIF制御を起動した際にコア311にかかる負荷を表す指標値LFCを記憶する。図6の例では、コア負荷特性テーブル600は、コア311のBusy率とコア311のメモリDIF制御の起動率、それぞれ10%ごとに0%から100%まで、コア311にかかる負荷を表す指標値LFCを記憶する。
なお、コア311のBusy率とは、OS(Operating System)やアプリケーションソフトウェアが何らかの処理を実行する時間の割合である。コア311のメモリDIF制御の起動率とは、コア311が単位時間当たりに処理可能なメモリDIF制御の最大データ量に対する起動中のメモリDIF制御のデータ量の割合である。
コア311にかかる負荷を表す指標値LFCとは、あるBusy率のコア311で、ある起動率のメモリDIF制御を起動した場合のコア311の性能低下率を表すものである。例えば、負荷を表す指標値は、あるBusy率のコア311で、ある起動率のメモリDIF制御を起動する場合において、起動したメモリDIF制御のデータ量に対する単位時間内で実行を完了できなかったメモリDIF制御のデータ量の割合である。例えば、コア311のBusy率が10%、コア311のメモリDIF制御の起動率が20%であったとする。この場合、図6の例では、負荷を表す指標値LFCは4であるため、実行したメモリDIF制御のデータ量が100である場合、単位時間内に実行が完了したDIF制御のデータ量は96となる。
(IOC起動量テーブル700の一例)
図7は、実施の形態2にかかるIOC起動量テーブル700の一例を示す説明図である。IOC起動量テーブル700は、IOC303ごとに、現在のIOC303の使用率とメモリDIF制御の転送量とを対応付けて記憶するテーブルである。IOC起動量テーブル700は、例えば、後述する作成部901によって作成され、メモリ302に記憶され、後述する更新部902によって更新される。IOC起動量テーブル700は、IOCID、I/Oの起動数、I/Oの総転送量、メモリDIF制御の起動数、およびメモリDIF制御の総転送量のフィールドを有する。IOC起動量テーブル700は、各フィールドに情報を設定することで、IOC起動量情報(例えば、IOC起動量情報700−1〜700−n)をレコードとして記憶する。
ここでIOCIDは、IOC303の識別子である。I/Oの起動数は、IOC303で起動したI/Oの数である。I/Oの総転送量は、IOC303で起動されたI/Oで処理するデータ量である。メモリDIF制御の起動数は、IOC303で起動されるメモリDIF制御の起動の数である。メモリDIF制御の総転送量は、IOC303で起動されたメモリDIF制御で処理するデータ量である。図7の例で、IOC起動量情報700−1は、IOC303のIOCID「1」、I/Oの起動数「2」、I/Oの総転送量「400」、メモリDIF制御の起動数「11」、メモリDIF制御の総転送量「1100」を示す。
(コア起動量テーブル800の一例)
図8は、実施の形態2にかかるコア起動量テーブル800の一例を示す説明図である。コア起動量テーブル800は、コア311ごとに、現在のコア311のBusy率とメモリDIF制御の転送量とを対応付けて記憶するテーブルである。コア起動量テーブル800は、例えば、後述する作成部901によって作成され、メモリ302に記憶され、後述する更新部902によって更新される。コア起動量テーブル800は、コアID、Busy率、メモリDIF制御の起動数、およびメモリDIF制御の総転送量のフィールドを有する。コア起動量テーブル800は、各フィールドに情報を設定することで、コア起動量情報(例えばコア起動量情報800−1〜800−n)をレコードとして記憶する。
ここでコアIDは、コア311の識別子である。Busy率は、コア311のBusy率である。メモリDIF制御の起動数は、コア311で起動するメモリDIF制御の起動の数である。メモリDIF制御の総転送量は、コア311で起動するメモリDIF制御で処理するデータ量である。図8の例で、コア起動量情報800−1は、コア311のコアID「1」、Busy率「10%」、メモリDIF制御の起動数「4」、メモリDIF制御の総転送量「250」を示す。
(ストレージ制御装置201の機能的構成例)
図9は、実施の形態2にかかるストレージ制御装置201の機能的構成例を示すブロック図である。図9において、ストレージ制御装置201は、作成部901と、更新部902と、決定部903とを含む構成である。各機能部は、具体的には、例えば、図3に示したメモリ302などの記憶装置に記憶されたプログラムをプロセッサ301に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図3に示したメモリ302などの記憶装置に記憶される。
作成部901は、IOC負荷特性テーブル500およびコア負荷特性テーブル600を作成して、メモリ302に記憶する機能を有する。例えば、作成部901は、ストレージ制御装置201の工場出荷時、ストレージ制御装置201の起動時、またはストレージ制御装置201の構成変更が行われた際に、IOC負荷特性テーブル500およびコア負荷特性テーブル600を作成する。
また、作成部901は、IOC303ごとに、IOC起動量テーブル700のレコードを作成し、コア311ごとに、コア起動量テーブル800のレコードを作成して、メモリ302に記憶する機能を有する。例えば、作成部901は、ストレージ制御装置201の起動時、IOC起動量テーブル700およびコア起動量テーブル800を作成する。なお、作成部901の具体的な処理内容については後述する。
更新部902は、メモリ302に記憶されるIOC起動量テーブル700およびコア起動量テーブル800を更新する機能を有する。なお、更新部902の具体的な処理内容については後述する。
決定部903は、実行対象となるメモリDIF制御を起動するIOC303またはコア311を決定する機能を有する。具体的には、例えば、決定部903は、負荷を表す指標値LFIが最小であるIOC303を決定し、負荷を表す指標値LFCが最小であるコア311を決定する。この後、決定部903は、負荷を表す指標値LFI、LFCが小さい方を、メモリDIF制御を起動するIOC303またはコア311と決定する。
決定部903は、実行対象のメモリDIF制御の転送量を特定する。決定部903は、IOC303ごとに、特定したメモリDIF制御の転送量と、IOC起動量テーブル700のメモリDIF制御の総転送量を加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。例えば、加算した総転送量を、IOC303が単位時間当たりに起動可能なDIF制御の最大転送量で割ることにより、決定部903は、加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。
次に、決定部903は、IOC303ごとに、IOC起動量テーブル700のI/Oの総転送量に基づいて、IOC303の使用率を算出する。例えば、IOC起動量テーブル700のI/Oの総転送量を、IOC303が単位時間当たりに実行可能な最大のI/Oの総転送量で割ることにより、決定部903は、IOC起動量テーブル700のI/Oの総転送量に基づいて、IOC303の使用率を算出する。
次に、決定部903は、IOC負荷特性テーブル500から、算出したメモリDIF制御の起動率と算出したIOC303の使用率に対応するIOC303の負荷を表す指標値LFIを特定する。決定部903は、IOC303ごとに求めたIOC303の負荷を表す指標値LFIが最小であるIOC303を決定する。
決定部903は、コア311ごとに、特定したメモリDIF制御の転送量と、コア起動量テーブル800のメモリDIF制御の総転送量を加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。例えば、加算した総転送量を、コア311が単位時間当たりに起動可能なメモリDIF制御の最大の転送量で割ることにより、決定部903は、加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。
次に、決定部903は、コア負荷特性テーブル600から、算出したメモリDIF制御の起動率とコア起動量テーブル800のBusy率に対応するコア311の負荷を表す指標値LFCを特定する。決定部903は、コア311ごとに求めたコア311の負荷を表す指標値LFCが最小であるコア311を決定する。
決定部903は、上記で決定したIOC303の負荷を表す指標値LFIとコア311の負荷を表す指標値LFCとを比較して、負荷を表す指標値LFI、LFCが小さい方を、メモリDIF制御を起動する起動先のIOC303またはコア311と決定する。
(作成部901の具体的な処理内容)
ここで、作成部901の具体的な処理内容について説明する。
<IOC負荷特性テーブル500の作成>
IOC303は、メモリDIF制御以外に、HDDのリード、ライト処理やホストコンピュータからのデータ転送などI/O制御も実施している。IOC303に、I/O制御とメモリDIF制御を同時に動作させると、IOC303内の共有資源が競合することで、それぞれを単独に起動するより、I/Oの遅延やメモリDIF制御の性能低下が発生する。
また、性能低下の特性はIOC303ごとにI/O数やメモリDIF制御の起動量により変動する。この性能低下の特性を把握するために、作成部901は、IOC303ごとに実際にI/OとメモリDIF制御を起動し、IOC303にかかる負荷を表す指標値LFIを記憶するIOC負荷特性テーブル500を作成する。作成部901は、以下の手順でIOC負荷特性テーブル500を作成する。
(1)作成部901は、IOC303に所定の量のI/Oを継続的に起動し続け、IOC303の使用率を所定の使用率(j%)にする。例えば、IOC303が単位時間に100回I/Oの実行を行う性能を有する場合、単位時間に10回I/Oを起動することにより、IOC303の使用率を10%にする。
(2)作成部901は、IOC303に所定のデータ量(mブロック)を処理するメモリDIF制御を起動させ、IOC303のメモリDIF制御の起動率を所定の起動率(k%)にする。例えば、IOC303が単位時間に500ブロックのデータ量のメモリDIF制御の実行を行う性能を有するとする。この場合、作成部901は、単位時間に50ブロックのデータ量のメモリDIF制御を起動することにより、IOC303のメモリDIF制御の起動率を10%にする。
(3)作成部901は、単位時間内でIOC303がメモリDIF制御で処理できなかったデータ量(nブロック)を検出する。
(4)作成部901は、下記式(1)を用いて、IOC303の使用率(j%)、IOC303のメモリDIF制御の起動率(k%)におけるIOC303にかかる負荷を表す指標値LFIを算出する。
LFI=(n/m)×100 ・・・(1)
(5)作成部901は、IOC303の使用率(j%)、IOC303のメモリDIF制御の起動率(k%)を所定の間隔、例えば10%で変動させ、(1)〜(4)を繰り返す。これにより、作成部901は、IOC303の使用率(j%)、IOC303のメモリDIF制御の起動率(k%)、それぞれ0%〜100%までIOC303にかかる負荷を表す指標値LFIを算出する。作成部901は、算出した指標値LFIをIOC負荷特性テーブル500に記憶する。
(6)作成部901は、すべてのIOC303に対して、(1)〜(5)を繰り返し、IOC303ごとのIOC負荷特性テーブル500を作成する。
<コア負荷特性テーブル600の作成>
プロセッサ301の各コア311は、メモリDIF制御以外に、ストレージ制御装置201の制御も実施している。このため、コア311でメモリDIF制御を起動した場合、コア311のメモリDIF制御の起動率とコア311のBusy率によりメモリDIF制御の性能は変動する。この低下特性を把握するために、作成部901は、コア311ごとに所定のBusy率でメモリDIF制御を起動し、コア311にかかる負荷を表す指標値LFCを記憶するコア負荷特性テーブル600を作成する。作成部901は、以下の手順でコア負荷特性テーブル600を作成する。
(1’)作成部901は、コア311のBusy率を所定のBusy率(j%)にする。例えば、作成部901は、コア311に負荷を与えるプログラムを起動させることでコア311のBusy率を所定のBusy率にする。
(2’)作成部901は、コア311に所定のデータ量(m’ブロック)を処理するメモリDIF制御を起動させ、コア311のメモリDIF制御の起動率を所定の起動率(k%)にする。例えば、コア311が単位時間に500ブロックのデータ量のメモリDIF制御の実行を行う性能を有するとする。この場合、作成部901は、単位時間に50ブロックのデータ量のメモリDIF制御を起動することにより、コア311のメモリDIF制御の起動率を10%にする。
(3’)作成部901は、単位時間内でコア311がメモリDIF制御で処理しなかったデータ量(n’ブロック)を検出する。
(4’)作成部901は、下記式(2)を用いて、コア311のBusy率(j%)、コア311のメモリDIF制御の起動率(k%)におけるコア311にかかる負荷を表す指標値LFCを算出する。
LFC=(n’/m’)×100 ・・・(2)
(5’)作成部901は、コア311のBusy率(j%)、コア311のメモリDIF制御の起動率(k%)を所定の間隔、例えば10%で変動させ、(1’)〜(4’)を繰り返す。これにより、作成部901は、コア311のBusy率(j%)、コア311のメモリDIF制御の起動率(k%)、それぞれ0%〜100%までコア311にかかる負荷を表す指標値LFCを算出する。作成部901は、算出した指標値LFCをコア負荷特性テーブル600に記憶する。
(6’)作成部901は、すべてのコア311に対して、(1’)〜(5’)を繰り返し、コア311ごとのコア負荷特性テーブル600を作成する。
(更新部902の具体的な処理内容)
ここで、更新部902の具体的な処理内容について説明する。
<IOC起動量テーブル700の更新>
(1)更新部902は、IOC303がI/O要求を受け付けたとき、IOC起動量テーブル700のI/O要求を受け付けたIOC303のレコードのI/Oの起動数を1加算する。さらに、更新部902は、当該I/O要求でのデータ転送量を、I/O要求を受け付けたIOC303のレコードのI/Oの総転送量に加算する。
(2)更新部902は、IOC303が要求を受け付けたI/Oを完了したとき、IOC起動量テーブル700のI/O要求を受け付けたIOC303のレコードのI/Oの起動数を1減算する。さらに、更新部902は、当該I/O要求でのデータ転送量を、I/O要求を受け付けたIOC303のレコードのI/Oの総転送量から減算する。
(3)更新部902は、決定部903でIOC303がメモリDIF制御を起動することに決定したとき、IOC起動量テーブル700のメモリDIF制御を起動したIOC303のレコードのメモリDIF制御の起動数を1加算する。さらに、更新部902は、当該メモリDIF制御でのデータ転送量を、メモリDIF制御を起動したIOC303のレコードのメモリDIF制御の総転送量に加算する。
(4)更新部902は、IOC303でのメモリDIF制御の実行が完了したとき、IOC起動量テーブル700のメモリDIF制御を起動したIOC303のレコードのメモリDIF制御の起動数を1減算する。さらに、更新部902は、当該メモリDIF制御でのデータ転送量を、メモリDIF制御を起動したIOC303のレコードのメモリDIF制御の総転送量から減算する。
<コア起動量テーブル800の更新>
(1’)更新部902は、コア311上で動作するOSのBusy率採取機能を使用して、コア起動量テーブル800のBusy率を定期的に更新する。または、更新部902は、定期的な割込みをコア311上で動作するOSに対して行い、タスクの動作状態またはアイドル状態を定期的に収集することでBusy率を求めることもできる。タスクとはOSから見た処理の実行単位であり、タスクの動作状態とは、コア311がプログラムを実行する状態であり、タスクのアイドル状態とは、実行するプログラムがない状態である。
(2’)更新部902は、決定部903でコア311がメモリDIF制御を起動することを決定したとき、コア起動量テーブル800のメモリDIF制御を起動したコア311のレコードのメモリDIF制御の起動数を1加算する。さらに、更新部902は、当該メモリDIF制御でのデータ転送量を、メモリDIF制御を起動したコア311のレコードのメモリDIF制御の総転送量に加算する。
(3’)更新部902は、コア311でのメモリDIF制御の実行が完了したとき、コア起動量テーブル800のメモリDIF制御を起動したるコア311のレコードのメモリDIF制御の起動数を1減算する。さらに、更新部902は、当該メモリDIF制御でのデータ転送量を、メモリDIF制御を起動したコア311のレコードのメモリDIF制御の総転送量から減算する。
(ストレージ制御装置201のIOC負荷特性テーブル500作成処理)
図10は、実施の形態2にかかるストレージ制御装置201のIOC負荷特性テーブル500の作成処理手順の一例を示すフローチャートである。図10のフローチャートにおいて、まず、作成部901は、IOC303のIDを示すiを1に設定する(ステップS1001)。その後、作成部901は、IOC303の使用率を示すjを0に設定し(ステップS1002)、メモリDIF制御の起動率を示すkを0に設定する(ステップS1003)。
次に、作成部901は、IOC303に所定の量のI/Oを継続的に起動し続け、IOC303の使用率を所定の使用率(j%)にする(ステップS1004)。作成部901は、IOC303に所定のデータ量を処理するメモリDIF制御を起動させ、IOC303のメモリDIF制御の起動率を所定の起動率(k%)にする(ステップS1005)。
次に、作成部901は、単位時間内にIOC303がメモリDIF制御で処理できなかったデータ量を検出する(ステップS1006)。作成部901は、所定のデータ量に対する、単位時間内にIOC303が処理できなかったデータ量の割合を、IOC303にかかる負荷を表す指標値LFIとして算出する(ステップS1007)。
作成部901は、kに10を加算し(ステップS1008)、kが100より大きいか否かを確認する(ステップS1009)。kが100より大きくない場合(ステップS1009:No)、ステップS1004に移行して、作成部901は、加算したメモリDIF制御の起動率(k%)でのIOC303にかかる負荷を表す指標値LFIを算出する。
kが100より大きい場合(ステップS1009:Yes)、作成部901は、jに10を加算し(ステップS1010)、jが100より大きいか否かを確認する(ステップS1011)。jが100より大きくない場合(ステップS1011:No)、ステップS1003に移行して、作成部901は、加算したIOC303の使用率(j%)でのIOC303にかかる負荷を表す指標値LFIを算出する。
jが100より大きい場合(ステップS1011:Yes)、作成部901は、iに1を加算し(ステップS1012)、iがIOC数のnより大きいか否かを確認する(ステップS1013)。iがnより大きくない場合(ステップS1013:No)、ステップS1002に移行して、作成部901は、加算したIOCID「i」でのIOC303にかかる負荷を表す指標値LFIを算出する。
iがnより大きい場合(ステップS1013:Yes)、作成部901は、IOC負荷特性テーブル500の作成処理を終了する。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置201のIOC負荷特性テーブル500が作成される。
ストレージ制御装置201のコア負荷特性テーブル600は、IOC負荷特性テーブル500作成のフローチャートに記載された手順と同様に作成される。例えば、ステップS1004で作成部901は、コア311に負荷を与えるプログラムを起動させることで、コアID「i」のBusy率をj%にする。次に、ステップS1005で、作成部901は、コア311に所定のデータ量を処理するメモリDIF制御を起動させ、コア311のメモリDIF制御の起動率を所定の起動率(k%)にする。次に、ステップS1006で、作成部901は、単位時間内にコア311がメモリDIF制御で処理できなかったデータ量を検出する。次に、ステップS1007で、作成部901は、所定のデータ量に対する、単位時間内にコア311が処理できなかったデータ量の割合を、コア311にかかる負荷を表す指標値LFCとして算出する。これにより、ストレージ制御装置201のコア負荷特性テーブル600が作成される。
(ストレージ制御装置201のI/O処理)
図11は、実施の形態2にかかるストレージ制御装置201のI/O処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、ストレージ制御装置201は、I/O要求を受け、他のストレージ制御装置201からのデータをIOC303が受信する(ステップS1101)。受信したデータは、メモリ302に記憶される。次に、ストレージ制御装置201は、メモリ302に記憶されたデータに対して、メモリDIF制御を実行するか否かを判定する(ステップS1102)。
メモリDIF制御を実行する場合(ステップS1102:Yes)、ストレージ制御装置201は、メモリDIF制御の処理を行う(ステップS1103)。ストレージ制御装置201によるメモリDIF制御処理の詳細は以下の図12で説明される。ストレージ制御装置201は、メモリDIF制御の処理を完了後、ステップS1104に移行する。
メモリDIF制御を実行しない場合(ステップS1102:No)、ストレージ制御装置201は、メモリ302に記憶されたデータをストレージ210に書き込む処理を行う(ステップS1104)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置201のI/O処理が行われる。
図12は、実施の形態2にかかるストレージ制御装置201のメモリDIF制御処理手順の一例を示すフローチャートである。図12のフローチャートにおいて、まず、決定部903は、最小負荷のIOC303を選択する(ステップS1201)。決定部903による最小負荷のIOC303の選択処理の詳細は以下の図13で説明される。次に、決定部903は、最小負荷のコア311を選択する(ステップS1202)。決定部903による最小負荷のコア311の選択処理の詳細は以下の図14で説明される。
決定部903は、IOC303の最小負荷がコア311の最小負荷より小さいか否かを判定する(ステップS1203)。具体的には、ステップS1201で最小負荷のIOC303を選択するために算出されたIOC303の負荷を表す指標値LFIと、ステップS1202で最小負荷のコア311を選択するために算出されたコア311の負荷を表す指標値LFCとを比較する。IOC303の負荷を表す指標値LFIが小さい場合、IOC303の最小負荷がコア311の最小負荷より小さいと判定する。
IOC303の最小負荷がコア311の最小負荷より小さい場合(ステップS1203:Yes)、決定部903は、IOC起動量テーブル700の最小負荷のIOC303のレコードを更新する(ステップS1204)。具体的には最小負荷のIOC303のメモリDIF制御の起動数を1加算して、最小負荷のIOC303のメモリDIF制御の総転送量に、実行対象のメモリDIF制御の転送量を加算する。
この後、決定部903は、最小負荷のIOC303にメモリDIF制御を起動させ(ステップS1205)、最小負荷のIOC303によるメモリDIF制御が完了するのを待つ(ステップS1206)。最小負荷のIOC303によるメモリDIF制御が完了後、決定部903は、IOC起動量テーブル700の最小負荷のIOC303のレコードを更新する(ステップS1207)。具体的には最小負荷のIOC303のメモリDIF制御の起動数を1減算して、最小負荷のIOC303のメモリDIF制御の総転送量から、起動されたメモリDIF制御の転送量を減算する。
IOC303の最小負荷がコア311の最小負荷より小さくない場合(ステップS1203:No)、決定部903は、コア起動量テーブル800の最小負荷のコア311のレコードを更新する(ステップS1208)。具体的には最小負荷のコア311のメモリDIF制御の起動数を1加算して、最小負荷のコア311のメモリDIF制御の総転送量に、実行対象のメモリDIF制御の転送量を加算する。
この後、決定部903は、最小負荷のコア311にメモリDIF制御を起動させ(ステップS1209)、最小負荷のコア311によるメモリDIF制御が完了するのを待つ(ステップS1210)。最小負荷のコア311によるメモリDIF制御が完了後、決定部903は、コア起動量テーブル800の最小負荷のコア311のレコードを更新する(ステップS1211)。具体的には最小負荷のコア311のメモリDIF制御の起動数を1減算して、最小負荷のコア311のメモリDIF制御の総転送量から、起動されたメモリDIF制御の転送量を減算する。
これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、ストレージ制御装置201のメモリDIF制御の処理が行われる。
図13は、実施の形態2にかかるストレージ制御装置201のIOC選択処理手順の一例を示すフローチャートである。まず、決定部903は、IOC303のIDを示すiを1に設定する(ステップS1301)。決定部903は、IOC起動量テーブル700のIOCID「i」のレコードのメモリDIF制御の総転送量に、実行対象のメモリDIF制御の転送量を加算することでIOCID「i」のメモリDIF制御の総転送量を算出する(ステップS1302)。次に、決定部903は、算出した総転送量に基づいて、メモリDIF制御の起動率を算出する(ステップS1303)。例えば、決定部903は、IOCID「i」が単位時間で実行可能な最大のメモリDIF制御の総転送量で、算出したメモリDIF制御の総転送量を割ることにより、メモリDIF制御の起動率を算出する。
決定部903は、IOC起動量テーブル700のIOCID「i」のI/Oの総転送量に基づき、IOC303の使用率を算出する(ステップS1304)。例えば、決定部903は、IOCID「i」が単位時間で実行可能な最大のI/Oの総転送量で、IOC起動量テーブル700のIOCID「i」のI/Oの総転送量を割ることにより、IOCID「i」の使用率を算出する。決定部903は、算出されたメモリDIF制御の起動率と算出された使用率に対応するIOCID「i」の負荷を表す指標値LFIをIOC負荷特性テーブル500から特定する(ステップS1305)。
決定部903は、iに1を加算し(ステップS1306)、iがIOC数のnより大きいか否かを確認する(ステップS1307)。iがnより大きくない場合(ステップS1307:No)、ステップS1302に移行して、決定部903は、加算したIOCID「i」でのIOC303にかかる負荷を表す指標値LFIを特定する。
iがnより大きい場合(ステップS1307:Yes)、決定部903は、特定した各IOC303の負荷を表す指標値LFIのなかで、最小の指標値LFIのIOC303を最小負荷のIOC303として選択する(ステップS1308)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、決定部903は、最小負荷のIOC303を選択する。
図14は、実施の形態2にかかるストレージ制御装置201のコア選択処理手順の一例を示すフローチャートである。まず、決定部903は、コア311のIDを示すiを1に設定する(ステップS1401)。決定部903は、コア起動量テーブル800のコアID「i」のレコードのメモリDIF制御の総転送量に、実行対象のメモリDIF制御の転送量を加算することでコアID「i」のメモリDIF制御の総転送量を算出する(ステップS1402)。次に、決定部903は、算出した総転送量に基づいて、メモリDIF制御の起動率を算出する(ステップS1403)。例えば、決定部903は、コアID「i」が単位時間で実行可能な最大のメモリDIF制御の総転送量で、算出したメモリDIF制御の総転送量を割ることにより、メモリDIF制御の起動率を算出する。
決定部903は、算出されたメモリDIF制御の起動率とコア起動量テーブル800のコアID「i」のBusy率に対応するコアID「i」の負荷を表す指標値LFCをコア負荷特性テーブル600から特定する(ステップS1404)。
決定部903は、iに1を加算し(ステップS1405)、iがコア数のnより大きいか否かを確認する(ステップS1406)。iがnより大きくない場合(ステップS1406:No)、ステップS1402に移行して、決定部903は、加算したコアID「i」でのコア311にかかる負荷を表す指標値LFCを特定する。
iがnより大きい場合(ステップS1406:Yes)、決定部903は、特定した各コア311の負荷を表す指標値LFCのなかで、最小の指標値LFCのコア311を最小負荷のコア311として選択する(ステップS1407)。これにより、本フローチャートによる一連の処理は終了する。本フローチャートを実行することにより、決定部903は、最小負荷のコア311を選択する。
図15は、実施の形態2にかかるストレージ制御装置201のIOC303とコア311の選択処理の一実施例を示す説明図である。図15において、ストレージ制御装置201は、メモリDIF制御を実行可能な3つのIOC303と3つのコア311を有する。3つのIOC303のIOC負荷特性テーブル500は図5に示されるものであり、3つのコア311のコア負荷特性テーブル600は図6に示されるものである。また、実行対象のメモリDIF制御の転送量が50であり、各IOC303が1秒間に実行可能な最大のI/Oの総転送量が500であり、各IOC303および各コア311が1秒間に実行可能な最大のメモリDIF制御の総転送量が500であるとする。
図15の例では、決定部903は、最小負荷のIOC303を選択して、次に最小負荷のコア311を決定する。決定部903は、最小負荷のIOC303と最小負荷のコア311を比較して、実行対象のメモリDIF制御を起動する最小負荷のIOC303を決定する。更新部902は、IOC起動量テーブル1500の決定したIOC303のレコードを更新する。該メモリDIF制御が完了したとき、更新部902は、IOC起動量テーブル1500の決定したIOC303のレコードを更新する。
(1)決定部903は、最小負荷のIOC303を選択する。決定部903は、IOC303ごとに、実行対象のメモリDIF制御の転送量とIOC起動量テーブル1500のメモリDIF制御の総転送量を加算した総転送量に基づいて、DIF制御の起動率を算出する。また、決定部903は、IOC303ごとに、IOC起動量テーブル1500のI/Oの総転送量に基づいて、IOC303の使用率を算出する。決定部903は、IOC303ごとに、IOC負荷特性テーブル500から、算出したメモリDIF制御の起動率と算出した使用率とに対応する負荷を表す指標値LFIを求める。決定部903は、IOC303ごとに求めた負荷を表す指標値LFIが最小であるIOC303を最小負荷のIOC303として選択する。
図15の例では、レコード1500−1のIOCID「1」でメモリDIFの総転送量は400であり、実行対象のメモリDIF制御の転送量が50であるため、メモリDIF制御の起動率は、(400+50)/500=0.9から90%となる。レコードの1500−1のIOCID「1」でI/Oの総転送量は100であるため、IOC303の使用率は、100/500=0.2から20%となる。IOC負荷特性テーブル500から、起動率90%と使用率20%とに対応する負荷を表す指標値LFI「15」が求められる。
レコード1500−2のIOCID「2」でも同様にして、IOCID「2」の負荷を表す指標値LFI「25」が求められる。また、レコード1500−3のIOCID「3」でも同様にして、IOCID「3」の負荷を表す指標値LFI「6」が求められる。決定部903は、負荷を表す指標値LFIが最小であるIOCID「3」を最小負荷のIOC303として選択する。
(2)決定部903は、最小負荷のコア311を選択する。決定部903は、コア311ごとに、実行対象のメモリDIF制御の転送量とコア起動量テーブル1501のメモリDIF制御の総転送量を加算した総転送量に基づいて、メモリDIF制御の起動率を算出する。決定部903は、コア311ごとに、コア負荷特性テーブル600から、算出したメモリDIF制御の起動率とBusy率とに対応する負荷を表す指標値LFCを求める。決定部903は、コア311ごとに求めた負荷を表す指標値LFCが最小であるコア311を最小負荷のコア311として選択する。
図15の例では、レコード1501−1のコアID「1」でメモリDIFの総転送量は400であり、実行対象のIF制御の転送量が50であるため、メモリDIF制御の起動率は、(400+50)/500=0.9から90%となる。コア負荷特性テーブル600から、起動率90%とBusy率10%とに対応する負荷を表す指標値LFC「10」が求められる。
レコード1501−2のコアID「2」でも同様にして、コアID「2」の負荷を表す指標値LFC「15」が求められる。また、レコード1501−3のコアID「3」でも同様にして、コアID「3」の負荷を表す指標値LFC「25」が求められる。決定部903は、負荷を表す指標値LFCが最小であるコアID「1」を最小負荷のコア311として選択する。
(3)決定部903は、最小負荷のIOCID「3」の負荷を表す指標値LFI「6」と最小負荷のコアID「1」の負荷を表す指標値LFC「10」とを比較して、メモリDIF制御を起動する起動先の最小負荷のIOCID「3」を決定する。更新部902は、IOC起動量テーブル1500の起動先のIOCID「3」のレコード1500−3を更新する。図15の例では、レコード1500−3のメモリDIF制御の起動数が1加算されて、4になり、メモリDIF制御の総転送量が50加算されて130になる。
(4)更新部902は、メモリDIF制御が完了したとき、IOC起動量テーブル1500の起動先のIOCID「3」のレコード1500−3を更新する。図15の例では、レコード1500−3のメモリDIF制御の起動数が1減算されて、3になり、メモリDIF制御の総転送量が50減算されて80になる。
以上説明したように、実施の形態2にかかるストレージ制御装置201によれば、プロセッサ301のいずれかのコア311で実行対象となるメモリDIF制御を起動した場合の負荷を予測することができる。そして、ストレージ制御装置201によれば、予測した各IOC303または各コア311の負荷に基づいて、IOC303またはコア311の中から、ストレージ装置の性能を低下させることの少ない、メモリDIF制御を起動する起動先のIOC303またはコア311を決定することができる。
また、プロセッサ301のいずれかのコア311は、メモリDIF制御の起動にIOC303を使用するのが一番効率良いか、または、コア311で起動したのが一番効率良いか判断することが可能となる。
また、ストレージ制御装置201の工場出荷時または起動時に、IOC負荷特性テーブル500およびコア負荷特性テーブル600を作成する。このため、ストレージ制御装置201は、各IOC303および各コア311の負荷を表す指標値LFI、LFCを、メモリDIF制御を起動する前に知ることができる。
また、ストレージ制御装置201は、メモリDIF制御を起動するコア311またはIOC303を選択後、IOC起動量テーブル700またはコア起動量テーブル800を更新する。このため、IOC起動量テーブル700またはコア起動量テーブル800は常に最新の値に保たれる。
なお、本実施の形態で説明した制御プログラムは、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本制御プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)データの正当性を検証する検証処理を実行可能な複数の制御部と、
前記複数の制御部に含まれる制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する第1の記憶部と、
前記制御部に対応して、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とを対応付けて記憶する第2の記憶部と、を有し、
前記複数の制御部のいずれかの制御部は、
前記制御部に対応して、実行対象となる検証処理で処理するデータ量と前記第2の記憶部の記憶内容とに基づき前記第1の記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した当該指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
ことを特徴とするストレージ制御装置。
(付記2)前記いずれかの制御部は、
前記制御部に対応して、前記第1の記憶部の記憶内容を参照して、前記第2の記憶部に記憶された前記制御部の使用率と、前記第2の記憶部に記憶された前記制御部で起動中の前記検証処理で処理するデータ量に前記実行対象の検証処理で処理するデータ量を加算したデータ量との組み合わせに対応する指標値を特定することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定することを特徴とする付記1に記載のストレージ制御装置。
(付記3)前記いずれかの制御部は、
前記起動先の制御部を決定したことに応じて、前記第2の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量に、前記実行対象の検証処理で処理するデータ量を加算し、
前記起動先の制御部による前記実行対象の検証処理の実行が完了したことに応じて、前記第2の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量から、前記実行対象の検証処理で処理するデータ量を減算することを特徴とする付記1または2に記載のストレージ制御装置。
(付記4)前記いずれかの制御部は、
所定の使用率の前記制御部に所定のデータ量を処理する検証処理を実行させ、前記所定のデータ量に対する、前記所定のデータ量のうちの所定の時間内に前記制御部が処理できなかったデータ量の割合を、前記制御部にかかる負荷を表す指標値として算出し、算出した前記制御部にかかる負荷を表す指標値を、前記所定のデータ量と前記所定の使用率との組み合わせに対応付けて前記第1の記憶部に記憶することを特徴とする付記1〜3のいずれか一つに記載のストレージ制御装置。
(付記5)前記制御部は、ストレージの入出力を制御する入出力コントローラまたは前記入出力コントローラを制御するプロセッサもしくは前記プロセッサに含まれるコアであることを特徴とする付記1〜4のいずれか一つに記載のストレージ制御装置。
(付記6)前記いずれかの制御部は、
特定した前記指標値が最小である前記制御部を、前記実行対象の検証処理を起動する制御部として決定する、
ことを特徴とする付記1〜5のいずれか一つに記載のストレージ制御装置。
(付記7)データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムであって、
前記複数の制御部のいずれかの制御部に、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行させることを特徴とする制御プログラム。
(付記8)データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御方法であって、
前記複数の制御部のいずれかの制御部が、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行することを特徴とする制御方法。
(付記9)データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムを記録したコンピュータに読み取り可能な記録媒体であって、
前記複数の制御部のいずれかの制御部に、
前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
処理を実行させる制御プログラムを記録したことを特徴とするコンピュータに読み取り可能な記録媒体。
100 ストレージ制御装置
101 制御部
102 第1の記憶部
103 第2の記憶部
200 ストレージ装置
201 ストレージ制御装置
210 ストレージ
901 作成部
902 更新部
903 決定部

Claims (7)

  1. データの正当性を検証する検証処理を実行可能な複数の制御部と、
    前記複数の制御部に含まれる制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する第1の記憶部と、
    前記制御部に対応して、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とを対応付けて記憶する第2の記憶部と、を有し、
    前記複数の制御部のいずれかの制御部は、
    前記制御部に対応して、実行対象となる検証処理で処理するデータ量と前記第2の記憶部の記憶内容とに基づき前記第1の記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、特定した当該指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
    ことを特徴とするストレージ制御装置。
  2. 前記いずれかの制御部は、
    前記制御部に対応して、前記第1の記憶部の記憶内容を参照して、前記第2の記憶部に記憶された前記制御部の使用率と、前記第2の記憶部に記憶された前記制御部で起動中の前記検証処理で処理するデータ量に前記実行対象の検証処理で処理するデータ量を加算したデータ量との組み合わせに対応する指標値を特定することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定することを特徴とする請求項1に記載のストレージ制御装置。
  3. 前記いずれかの制御部は、
    前記起動先の制御部を決定したことに応じて、前記第2の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量に、前記実行対象の検証処理で処理するデータ量を加算し、
    前記起動先の制御部による前記実行対象の検証処理の実行が完了したことに応じて、前記第2の記憶部に記憶された、前記起動先の制御部で起動中の前記検証処理で処理するデータ量から、前記実行対象の検証処理で処理するデータ量を減算することを特徴とする請求項1または2に記載のストレージ制御装置。
  4. 前記いずれかの制御部は、
    所定の使用率の前記制御部に所定のデータ量を処理する検証処理を実行させ、前記所定のデータ量に対する、前記所定のデータ量のうちの所定の時間内に前記制御部が処理できなかったデータ量の割合を、前記制御部にかかる負荷を表す指標値として算出し、算出した前記制御部にかかる負荷を表す指標値を、前記所定のデータ量と前記所定の使用率との組み合わせに対応付けて前記第1の記憶部に記憶することを特徴とする請求項1〜3のいずれか一つに記載のストレージ制御装置。
  5. 前記制御部は、ストレージの入出力を制御する入出力コントローラまたは前記入出力コントローラを制御するプロセッサもしくは前記プロセッサに含まれるコアであることを特徴とする請求項1〜4のいずれか一つに記載のストレージ制御装置。
  6. データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御プログラムであって、
    前記複数の制御部のいずれかの制御部に、
    前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
    特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
    処理を実行させることを特徴とする制御プログラム。
  7. データの正当性を検証する検証処理を実行可能な複数の制御部を有するストレージ制御装置の制御方法であって、
    前記複数の制御部のいずれかの制御部が、
    前記複数の制御部に含まれる制御部に対応して、実行対象となる検証処理で処理するデータ量と、前記制御部で起動中の前記検証処理で処理するデータ量と前記制御部の使用率とに基づき、前記制御部に対応して、前記検証処理を起動した際に前記制御部にかかる負荷を表す指標値を、前記検証処理で処理するデータ量と前記制御部の使用率との組み合わせに応じて記憶する記憶部の記憶内容を参照することにより、前記実行対象の検証処理を起動した際に前記制御部にかかる負荷を表す指標値を特定し、
    特定した前記制御部にかかる負荷を表す指標値に基づいて、前記複数の制御部の中から、前記実行対象の検証処理を起動する起動先の制御部を決定する、
    処理を実行することを特徴とする制御方法。
JP2013210556A 2013-10-07 2013-10-07 ストレージ制御装置、制御プログラムおよび制御方法 Expired - Fee Related JP6136834B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013210556A JP6136834B2 (ja) 2013-10-07 2013-10-07 ストレージ制御装置、制御プログラムおよび制御方法
US14/479,865 US20150100865A1 (en) 2013-10-07 2014-09-08 Apparatus and method for determining one of control units to perform a verification process on data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2013210556A JP6136834B2 (ja) 2013-10-07 2013-10-07 ストレージ制御装置、制御プログラムおよび制御方法

Publications (2)

Publication Number Publication Date
JP2015075845A JP2015075845A (ja) 2015-04-20
JP6136834B2 true JP6136834B2 (ja) 2017-05-31

Family

ID=52777973

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013210556A Expired - Fee Related JP6136834B2 (ja) 2013-10-07 2013-10-07 ストレージ制御装置、制御プログラムおよび制御方法

Country Status (2)

Country Link
US (1) US20150100865A1 (ja)
JP (1) JP6136834B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6453457B2 (ja) * 2015-06-04 2019-01-16 株式会社日立製作所 ストレージ装置
KR102567224B1 (ko) 2016-07-25 2023-08-16 삼성전자주식회사 데이터 저장 장치 및 이를 포함하는 컴퓨팅 시스템

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3405244B2 (ja) * 1998-12-28 2003-05-12 日本電気株式会社 データ処理負荷分散システム
US7020835B2 (en) * 2000-10-19 2006-03-28 Oracle International Corporation Enhancements to data integrity verification mechanism
JP4406199B2 (ja) * 2002-11-19 2010-01-27 株式会社日立製作所 プロセッサ負荷制御機能をもつ記憶制御装置
JP2007004456A (ja) * 2005-06-23 2007-01-11 Toshiba Corp 携帯可能電子装置及び携帯可能電子装置のデータ出力方法
JP5089896B2 (ja) * 2006-03-17 2012-12-05 株式会社日立製作所 マイクロプロセッサの負荷分散機能を備えたストレージシステム
WO2010116538A1 (en) * 2009-04-06 2010-10-14 Hitachi, Ltd. Storage apparatus and data transfer method
JP5796447B2 (ja) * 2011-10-07 2015-10-21 株式会社リコー 情報処理装置、正当性検証方法、正当性検証プログラム
JP5776480B2 (ja) * 2011-10-07 2015-09-09 株式会社リコー 情報処理装置、正当性検証方法、正当性検証プログラム

Also Published As

Publication number Publication date
US20150100865A1 (en) 2015-04-09
JP2015075845A (ja) 2015-04-20

Similar Documents

Publication Publication Date Title
JP6113028B2 (ja) インデックス・パーティション内のデータ終端に格納される高解像度テープ・ディレクトリ(hrtd)を利用可能なテープ・ドライブ、方法、及びプログラム
US9632826B2 (en) Prioritizing deferred tasks in pending task queue based on creation timestamp
US8856469B2 (en) Apparatus and method for logging optimization using non-volatile memory
US8103847B2 (en) Storage virtual containers
US20170046091A1 (en) Storage tiering based on virtual machine operations and virtual volume type
US9053064B2 (en) Method for saving virtual machine state to a checkpoint file
JP2010535379A (ja) フラッシュメモリに最適化された入出力制御方法および装置
KR20220125198A (ko) 데이터의 추가 기록 방법, 장치, 전자 기기, 저장 매체 및 컴퓨터 프로그램매체
US9430168B2 (en) Recording medium storing a program for data relocation, data storage system and data relocating method
JP6136834B2 (ja) ストレージ制御装置、制御プログラムおよび制御方法
US9158550B2 (en) Caching based operating system installation
JP5729479B2 (ja) 仮想テープ装置及び仮想テープ装置の制御方法
US11210024B2 (en) Optimizing read-modify-write operations to a storage device by writing a copy of the write data to a shadow block
US20230289207A1 (en) Techniques for Concurrently Supporting Virtual NUMA and CPU/Memory Hot-Add in a Virtual Machine
KR102270789B1 (ko) 프로세서 및 프로세서의 명령어 처리 방법
US20130246842A1 (en) Information processing apparatus, program, and data allocation method
US8276041B2 (en) Data integrity validation using hierarchical volume management
US11132401B1 (en) Distributed hash table based logging service
JP7403465B2 (ja) 短絡高速化のための複合条件の並べ替え
US8977814B1 (en) Information lifecycle management for binding content
JP6881847B2 (ja) ストレージ装置、ファイル特定方法及びプログラム
JP6874348B2 (ja) ストレージ制御装置、およびストレージ制御プログラム
US9933944B2 (en) Information processing system and control method of information processing system
KR101619989B1 (ko) 메모리 관리 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
JP6900835B2 (ja) ストレージ制御装置、および制御プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160606

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170327

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170404

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170417

R150 Certificate of patent or registration of utility model

Ref document number: 6136834

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees