JP6251417B2 - ストレージシステム、及び、記憶制御方法 - Google Patents

ストレージシステム、及び、記憶制御方法 Download PDF

Info

Publication number
JP6251417B2
JP6251417B2 JP2016556061A JP2016556061A JP6251417B2 JP 6251417 B2 JP6251417 B2 JP 6251417B2 JP 2016556061 A JP2016556061 A JP 2016556061A JP 2016556061 A JP2016556061 A JP 2016556061A JP 6251417 B2 JP6251417 B2 JP 6251417B2
Authority
JP
Japan
Prior art keywords
queue
processor
data
shared
assigned
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
JP2016556061A
Other languages
English (en)
Other versions
JPWO2016067339A1 (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Publication of JPWO2016067339A1 publication Critical patent/JPWO2016067339A1/ja
Application granted granted Critical
Publication of JP6251417B2 publication Critical patent/JP6251417B2/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
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Multi Processors (AREA)
  • Information Transfer Systems (AREA)

Description

本発明は、ストレージシステム及び記憶制御方法の技術に関する。
ストレージシステムにおいて、プロセッサは、キューを介してI/F(インターフェイス)デバイスとデータを遣り取りする。複数のプロセッサが1つのキューを利用する構成において、プロセッサは、キューにデータを格納する際、他のプロセッサからそのキューが利用されないように、排他処理を行う必要がある。排他処理は、プロセッサの処理負荷を高めるので、できるだけ実行されないことが望ましい。そこで、複数のプロセッサを備える計算機において、I/Fデバイスに対して、複数のプロセッサの各々が専用に利用するキューを設けることにより、排他処理を不要とする技術が知られている(特許文献1、2、3)。
US8595385 US8578106 特開2010−128664号公報
しかしながら、I/Fデバイスに対して、複数のプロセッサの各々が専用に利用するキュー(「専有キュー」という)を設ける構成の場合、プロセッサの数が多いと、その分、専有キューの数も多く、延いては、I/Fデバイスにおけるリソース(レジスタなど)の使用量も大きい。したがって、プロセッサ数が多いと、I/Fデバイスのリソースが不足し、結果として、プロセッサ毎に専有キューを設けることができない場合もある。それを避けるために、I/Fデバイスに大きなリソースを載せることが考えられるが、I/Fデバイスに大きなリソースを載せると、I/Fデバイスのコストが増加してしまう。
そこで、本発明の目的は、I/Fデバイスのリソース使用量と排他処理の負荷の両方を抑制したストレージシステム及び記憶制御方法を提供することにある。
一実施形態に係るストレージシステムは、複数のプロセッサを含んだコントローラと、記憶デバイスが接続されるインターフェイスデバイスと、インターフェイスデバイスに関連付けられている複数のキューとを有する。複数のキューの各々には、そのキューに割り当てられているプロセッサからインターフェイスデバイスに送られるデータが格納され、複数のキューの各々からインターフェイスデバイスにデータが送られるようになっている。複数のキューは、専有キューと共有キューとを含む。専有キューは、複数のプロセッサの内の1つのプロセッサである第1プロセッサだけが割り当てられているキューであり、データの格納時に排他処理が不要なキューである。共有キューは、複数のプロセッサの内の2以上の第2プロセッサが割り当てられるキューであり、データの格納時に排他処理が必要なキューである。第2プロセッサは、第1プロセッサ以外のいずれかのプロセッサである。
本発明によれば、I/Fデバイスのリソース使用量と排他処理の負荷の両方を抑制できる。
第1の実施形態に係るストレージシステムの動作概要を示す。 第1の実施形態に係るストレージシステムの構成例を示す。 キュー管理テーブルの構成例を示す。 プロセッサ別I/O(Input/Output)数テーブルの構成例を示す。 I/O要求をキューに格納する処理の例を示すフローチャートである。 専有キューを何れのプロセッサに割り当てるかを決定する処理の例を示すフローチャートである。 I/Fデバイスに関する複数のキューの内、何れを専有キューとするかを決定する処理の例を示すフローチャートである。 キュー割り当て変更処理の例を示すフローチャートである。本処理は、図7のS310に相当する。 第2の実施形態に係るストレージシステムの動作概要を示す。 第2の実施形態に係るストレージシステムの構成例を示す。 プロセス別I/O数テーブルの構成例を示す。 プロセスを何れのプロセッサで実行するかを決定する処理の例を示すフローチャートである。
以下、実施形態を説明する。以下の説明では、「xxxテーブル」の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「xxxテーブル」を「xxx情報」と呼ぶことができる。
また、以下の説明では、「xxx部」を主語として処理を説明する場合があるが、「xxx部」は、コンピュータプログラム(「プログラム」という)の一種であってもよい。プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶資源(例えばメモリ)及びネットワークインターフェイスデバイスの内の少なくとも1つを用いながら行うため、処理の主語が、プロセッサ、そのプロセッサを有する装置とされてもよい。プロセッサが行う処理の一部又は全部が、ハードウェア回路(例えば、ASIC(Application Specific Integrated Circuit)など)で行われてもよい。プログラムは、プログラムソースからインストールされてよい。プログラムソースは、プログラム配布サーバ又は記憶メディア(例えば可搬型の記憶メディア)であってもよい。また、プロセッサ及びメモリをまとめてコントローラと呼んでもよい。
また、以下の説明では、同種の要素を区別して説明する場合には、「xxx1a」、「xxx1b」のように、参照符号を使用し、同種の要素を区別しないで説明する場合には、「xxx1」のように参照符号の内の共通番号のみを使用することがある。
<第1の実施形態>
図1は、第1の実施形態に係るストレージシステム1aの動作概要を示す。
第1の実施形態に係るストレージシステム1aは、記憶装置14と、記憶装置14へのデータの入出力を制御するコントローラ2aとを有する。コントローラ2aは、複数のプロセッサ11(例えば11a〜11c)と、メモリ12aと、I/Fデバイス13(例えば13a)とを備える。
メモリ12aは、プロセッサ11がI/Fデバイス13へ発行するデータ(I/O要求など)が一時的に格納されるキュー20(例えばキュー20a及び20b)を有する。
各キュー20は、I/Fデバイス13に関連付けられている。プロセッサ11からI/Fデバイス13へ発行されたデータは、発行先であるI/Fデバイス13に関連付けられているキュー20に格納される。キュー20に格納されたデータは、順番に(例えばFIFOで)、I/Fデバイス13に渡されて処理される。
コントローラ2aは、I/Fデバイス13に複数のキュー20が関連付けられている場合、何れかのキュー20にデータを格納する。ここで、1つのI/Fデバイス13に関連付けられている複数のキューの内、一部のキュー(1又は2以上のキュー)は、それぞれ、専有キュー20aであり、残りのキュー(1又は2以上のキュー)は、それぞれ、共有キュー20bである。つまり、1つのI/Fデバイス13につき、少なくとも1つの専有キュー20aと少なくとも1つの共有キュー20bとが存在する。専用キュー20aは、複数のプロセッサ11のうちのいずれか1つのプロセッサだけが割り当てられたキュー20である。以下、専有キュー20aに割り当てられているプロセッサを、「第1のプロセッサ」と言い、第1のプロセッサ以外のプロセッサを「第2のプロセッサ」と言うことがある。共有キュー20bは、全ての第2のプロセッサのうちの2以上の第2のプロセッサが割り当てられているキュー20である。共有キュー20bと第2のプロセッサの対応関係については、様々な対応関係を採用可能である。例えば、全ての共有キュー20bの各々に、全ての第2のプロセッサの各々が割り当てられてもよいし、第1の共有キュー20bに、2以上の第2のプロセッサが割り当てられ、第2の共有キュー20bに、2以上の第2のプロセッサが割り当てられてもよい。第1のプロセッサも第2のプロセッサも、それぞれ、そのプロセッサが割り当てられているキューにデータを格納することになる。
共有キュー20bは、割り当てられている2以上の第2のプロセッサ11から利用され得る。よって、コントローラ2aは、第2のプロセッサがデータを共有キュー20bに格納する際、共有キュー20bついて排他処理を行う必要がある。
専有キュー20aは、第1のプロセッサ11以外のプロセッサ11から利用される可能性が無い。よって、コントローラ2aは、データを専有キュー20aに格納する際、専有キュー20aについて排他処理を行う必要が無い。
排他処理を行う場合は、排他処理を行わない場合と比較して、キュー20に対してデータを格納する処理に要する時間が長くなり、又、プロセッサ11の処理負荷も高くなる。なお、排他処理は、コントローラ2aにおいて、データを出力するプロセッサにより行われてもよいし、そのプロセッサに代えて又は加えて、所定のロジック(例えば、I/Fデバイス13との間でデータをやり取りする複数のプロセッサとは別に設けられたプロセッサであって排他処理等の所定処理を行うためのプロセッサ)により行われてもよい。
ストレージシステムが備えるプロセッサ11と同じ数の分、専有キュー20aを設けることが難しい場合もある。なぜなら、キュー20の数が多いと、その分I/Fデバイス13で使用されるリソース量(例えばレジスタ21の数)が大きく、故に、I/Fデバイス13のリソース量が不足してしまうことがあるからである。
そこで、本実施形態では、上述のとおり、複数のキュー20の内の一部のキュー20を、それぞれ、1つのプロセッサにのみ利用される専有キュー20aとし、残りのキューを、それぞれ、2以上のプロセッサに利用される共有キュー20bとする。
これにより、ストレージシステムが備えるプロセッサ11と同じ数の専有キュー20aを設けること無く(言い換えれば、1つのI/Fデバイス13に関連付けられるキュー20の数を、プロセッサ11の数より少なくでき、以って、I/Fデバイスのリソース使用量を抑え)、且つ、排他処理が発生する回数を抑制する(つまり、排他処理の負荷を抑制する)ことができる。このため、例えば、排他処理がプロセッサ11により行われるのであれば、プロセッサ11の処理負荷を低減することになる。
図1において、専有キュー20aはプロセッサ11cに割り当てられていて、共有キュー20bは、プロセッサ11a及び11bに割り当てられているとする(図1の細い破線を参照)。
その後、プロセッサ11a、11b及び11cの中で、プロセッサ11bのI/Fデバイス13に対するデータの発行頻度が最大になった場合、次の処理が行われて良い。すなわち、コントローラ2aは、専有キュー20aに、プロセッサ11cに代えてプロセッサ11bを割り当て(図1の太い破線矢印を参照)、プロセッサ11cを、専有キュー20aに代えて共有キュー20bに割り当てる(図1の太い実線矢印を参照)。これにより、共有キュー20bにデータが格納される頻度が減少するため、排他処理が実行される回数も減少する。以下、第1の実施形態を詳細に説明する。
図2は、第1の実施形態に係るストレージシステム1aの構成例を示す。
ストレージシステム1aは、1以上の記憶装置14と、それらの記憶装置14に接続されたコントローラ2aとを有する。コントローラ2aは、複数のプロセッサ(例えば11a〜11c)11と、メモリ12aと、I/Fデバイス13(例えば13a及び13b)とを備え、これらの要素11、12a、13は、内部バス15で接続されている。内部バス15は、双方向にデータの送信及び受信が可能である。内部バス15の一例としては、PCI Expressなどがある。
I/Fデバイス13は、プロセッサ11と記憶装置14との間のI/Oを制御するデバイスである。I/Fデバイス13は、プロセッサ11からライトコマンド、リードコマンド及び消去コマンドなどのデータ(例えばI/O要求)を受領し、そのデータを記憶装置14へ渡す。また、I/Fデバイス13は、記憶装置14からコマンド結果(例えばI/O要求の結果を含んだ応答)などのデータを受領し、そのデータをプロセッサ11へ渡す。I/Fデバイス13の一例としては、ホストバスアダプタ及びSATAコントローラなどがある。I/Fデバイス13は、I/Oデバイスと呼ばれてもよい。I/Fデバイス13に接続されるデバイスは、記憶装置14に限られない。I/Fデバイス13(例えば13a)は、リソースを有し、リソースには、そのI/Fデバイス13に関連付けられている複数のキュー(例えば20a及び20b)にそれぞれ対応付けられた複数のレジスタ21(例えば21a及び21b)が設けられる。レジスタ21は、I/Fデバイス13のリソースに設けられた記憶領域の一例である。
プロセッサ11は、メモリ12aに記憶されているコンピュータプログラムを実行する。プロセッサ11は、I/Fデバイス13へコマンドなどのデータを送信したり、I/Fデバイス13からコマンド結果などのデータを受信したりする。プロセッサの一例としては、CPU(Central Processing Unit)及びLSI(Large−Scale Integrated circuit)などがある。
メモリ12aには、プロセッサ11及びI/Fデバイス13などからアクセスされるコンピュータプログラム及びデータなどが格納される。メモリ12aの一例としては、DRAM(Dynamite Random Access Memory)、MRAM(Magnetic Random Access Memory)及びFeRAM(Ferroelectric Random Access Memory)などがある。
メモリ12aは、I/Fデバイス13毎に、I/Fデバイス13に関連付けられたキューセット(複数のキュー20)を有する。図2の例によれば、I/Fデバイス13aに対して、キュー20a及び20bが関連付けられており、I/Fデバイス13bに対して、キュー20c及び20dが関連付けられている。いずれのI/Fデバイス13についても、関連付けられているキュー20の数は、いずれかのキュー20に割り当てられ得るプロセッサ11の数より少なくてよい。また、キュー20の数は、全てのI/Fデバイス13について同じでもよいし異なっていてもよい。
メモリ12aは、複数のプロセス31(例えば31a〜31d)と、プロセススケジューラ32と、I/O制御部33と、キュー制御部34と、キュー割当部35とを記憶する。これらの要素31〜35は、プログラムであって、プロセッサ11によって読み出されて実行されてよい。I/O制御部33と、キュー制御部34及びキュー割当部35とが、それぞれ、複数のプロセッサ11の各々で実行されてもよいし、I/O制御部33が、複数のプロセッサ11の各々で実行され、キュー制御部34及びキュー割当部35のうちの少なくとも一方が、複数のプロセッサ11とは別のプロセッサ(図示せず)により実行されてもよい。
メモリ12aは、キュー管理テーブル100と、プロセッサ別I/O数テーブル120とを記憶する。これらの要素100、120は、データであって、プロセッサ11で実行されるプログラム31〜35によって読み出されたり、書き換えられたりしてよい。
プロセス31は、プロセッサ11で実行されるプログラムである。1つのプロセス31は、複数のプロセッサ11の内の1つのプロセッサ11で実行される。
プロセススケジューラ32は、各プロセッサ11における各プロセス31の処理時間をスケジューリングする。プロセススケジューラ32は、OS(Operating System)の機能として提供され、プロセス31は、そのOS上で実行されてよい。
I/O制御部33は、プロセス31のI/Oを制御する。例えば、I/O制御部33は、プロセス31から発行されたコマンドを解析して、所定のキュー20に格納したり、I/Fデバイス13から発行されたコマンド結果を、プロセス31に通知したりする。
キュー制御部34は、キュー20を制御する。キュー制御部34は、プロセッサ11がI/Fデバイス13へデータを送信する際、そのI/Fデバイス13に関連付いているキュー20にデータを格納する。キュー制御部34は、共有キュー20にデータを格納する際、排他処理を行う。例えば、排他処理は、(1)共有キュー20が他のプロセッサ11からロックされていないことを確認すること、(2)ロックがされていないことの確認が取れたら共有キュー20を他のプロセッサ11から書き込みできないようにロックすること、(3)共有キュー20へのデータの書き込みが完了した場合にロックを解除すること、を含んだ処理である。
キュー制御部34は、専有キュー20にデータを格納する際、上述の排他処理を行わない。すなわち、キュー制御部34は、キュー20のロック及びロック解除を行うこと無く、専有キュー20にデータを格納する。
I/Fデバイス13は、自己のレジスタ21を参照し、そのレジスタ21に対応付けられているキュー20からFIFOでデータを取得する。そして、I/Fデバイス13は、その取得したデータを、例えば、記憶装置14に送信する。
キュー割当部35は、キュー20とプロセッサ11との対応関係を制御する。具体的には、キュー割当部35は、専有キュー20に割り当てられる1つのプロセッサ11を決定したり、共有キュー20に割り当てられる2以上のプロセッサ11を決定したりする。又は、キュー割当部35は、複数のキュー20の内、何れを専有キューとするか(何れを共有キューとするか)を決定してもよい。
キュー管理テーブル100は、I/Fデバイス13とキュー20との対応関係と、キュー20とプロセッサ11との対応関係と、キュー20のモード(専有キュー又は共有キュー)と、を管理するためのテーブルである。キュー管理テーブル100の詳細については後述する(図3参照)。
プロセッサ別I/O数テーブル120は、プロセッサ11がI/Fデバイス13に対して発行したI/O要求の数を管理するためのテーブルである。プロセッサ別I/O数テーブル120の詳細については後述する(図4参照)。
図3は、キュー管理テーブル100の構成例を示す。
キュー管理テーブル100は、I/Fデバイス13とキュー20との対応関係と、キュー20とプロセッサ11との対応関係と、キュー20のモード(専有キュー又は共有キュー)と、を管理する。キュー管理テーブル100は、例えば、キュー20毎にレコードを有し、各レコードが、フィールド値として、デバイスID101と、キューID102と、プロセッサID103と、モード104とを有する。
デバイスID101は、キュー20が関連付けられているI/Fデバイス13を識別するための情報である。キューID102は、キュー20を識別するための情報である。プロセッサID103は、キュー20に割り当てられているプロセッサ11を識別するための情報である。
モード104は、キュー20が「専有キュー」であるか「共有キュー」であるかを示す情報である。モード104は、「専有」の場合は「ON」、「共有」の場合は「OFF」とするフラグであってもよい。
図3に示すキュー管理テーブル100の例によれば、次のことがわかる。すなわち、デバイスID101「D1」のI/Fデバイス13aには、キューID102「Q1」及び「Q2」のキュー20a、20bが関連付けられている。そして、キューID102「Q1」のキュー20aは、「専有キュー」(104)であり、プロセッサID103「U1」に割り当てられている。キューID102「Q2」のキュー20bは、「共有キュー」(104)であり、プロセッサID103「U2」及び「U3」のプロセッサ11b、11cに割り当てられている。
図4は、プロセッサ別I/O数テーブル120の構成例を示す。
プロセッサ別I/O数テーブル120は、プロセッサ11がI/Fデバイス13に対して発行したI/O要求の数を管理するためのテーブルである。
プロセッサ別I/O数テーブル120は、プロセッサ11毎にレコードを有し、各レコードが、フィールド値として、プロセッサID121と、デバイスID122と、I/O数123とを有する。プロセッサID121及びデバイスID122は、図3で説明したとおりである。
I/O数123は、プロセッサ11がI/Fデバイス13に対して所定期間に発行したI/O要求の数である。I/O数123は、IOPS(Input/Output Per Second)であってもよい。また、I/O数123において、シーケンシャルアクセスに係るI/O要求と、ランダムアクセスに係るI/O要求とが区別されてもよい。
図4に示すプロセッサ別I/O数テーブル120の例によれば、次のことがわかる。すなわち、プロセッサID121「U1」のプロセッサ11aは、デバイスID122「D1」のI/Fデバイス13aに対して、所定期間に「431回」のI/O要求を発行した。プロセッサID121「U1」のプロセッサ11aは、デバイスID122「D2」のI/Fデバイス13bに対して、所定期間に「5回」のI/O要求を発行した。
図5は、I/O要求をキュー20に格納する処理の例を示すフローチャートである。
I/O制御部33は、I/O要求を発行したプロセッサ11のプロセッサIDを特定する(S101)。そして、I/O制御部33は、I/O要求が指定するI/Fデバイス13のデバイスIDを特定する(S102)。
次に、I/O制御部33は、キュー管理テーブル100から、その特定したデバイスID101に対応するキューID102を特定する。そして、I/O制御部33は、キュー管理テーブル100から、その取得したキューID102に対応するモード104を特定する(S103)。
次に、I/O制御部33は、その特定したモード104が「専有」又は「共有」の何れであるかを判定する(S104)。
S104で特定したモード104が「共有」の場合(S104:共有)、I/O制御部33は、次の処理を行う。すなわち、I/O制御部33は、S103において特定したキューID102の共有キュー20をロックし(S105)、その後、その共有キュー20にI/O要求を格納する(S106)。そして、I/O制御部33は、共有キュー20のロックを解除し(S107)、本処理を終了する。すなわち、I/O制御部33は、共有キュー20に対して排他処理を行う。
S104で取得したモードが「専有」の場合(S104:専有)、I/O制御部33は、その専有キュー20にI/O要求を格納し(S111)、本処理を終了する。すなわち、I/O制御部33は、専有キュー20に対して排他処理を行わない。よって、専有キュー20が利用される方が、共有キュー20が利用される場合よりも、プロセッサ11の処理負荷が小さくなる。
図6は、専有キュー20を何れのプロセッサ11に割り当てるかを決定する処理の例を示すフローチャートである。
本処理は、I/Fデバイス13に関する複数のキュー20の内、専有キューとして利用されるキューの数が決まっている場合の例である。また、本処理は、1つのI/Fデバイス13に対する処理の例である。ストレージシステム1aが複数のI/Fデバイス13を備える場合、I/Fデバイス13毎に本処理が実行される。以下、1つのI/Fデバイス13を例に取り、図6の説明において、そのI/Fデバイス13を「対象I/Fデバイス」と言う。
キュー割当部35は、専有キュー20毎にループAの処理を実行する。以下、1つのループAの処理を例に取り、そのループAの処理の対象となる専有キュー20を「対象専有キュー」という。対象I/Fデバイス13に関連付けられている複数のキュー20の内、何れのキューが専有キューであるかは、キュー管理テーブル100のデバイスID101及びモード104を参照することによりわかる。
次に、キュー割当部35は、ループAの処理において、プロセッサ11のそれぞれについて、ループBの処理を実行する。以下、1つのループBの処理を例に取り、そのループBの処理の対象となるプロセッサ11を「対象プロセッサ」という。
次に、キュー割当部35は、プロセッサ別I/O数テーブル120を参照し、現状における対象I/Fデバイス13に関する排他数を算出する(S203)。ここで算出した排他数を「前排他数」という。
排他数とは、対象I/Fデバイス13に関連付けられているキュー20に、プロセッサ11から発行されたI/O要求を格納するにあたって、排他処理が実行された回数を示す。すなわち、専有キュー20にI/O要求が格納された場合、排他数はカウントされず、共有キュー20にI/O要求が格納された場合、排他数はカウントされる。現状におけるI/Fデバイス13に関する排他数は、対象I/Fデバイス13に関連付けられている全ての共有キュー20にそれぞれ対応したI/O数123の合計であってもよい。また、排他数は、共有キュー20にI/O要求が格納される頻度という観点から「共有頻度」と呼ばれてもよい。
前排他数は、次のように算出される。すなわち、例えば、図3のキュー管理テーブル100に示すように、デバイスID101「D1」の対象I/Fデバイス13aには、キューID102「Q1」の専有キュー20aと、キューID102「Q2」の共有キュー20bとが関連付けられている。そして、専有キュー20aには、プロセッサID103「U1」のプロセッサ11aが割り当てられており、共有キュー20bには、プロセッサID103「U2」及び「U3」のプロセッサ11b及び11cが割り当てられている。そして、図4のプロセッサ別I/O数テーブル120に示すように、プロセッサID121「U1」のプロセッサ11aから、デバイスID122「D1」のI/Fデバイス13aに対するI/O数123は「431回」である。プロセッサID121「U2」のプロセッサ11bから、I/Fデバイス13aに対するI/O数123は「19回」である。プロセッサID121「U3」のプロセッサ11cから、I/Fデバイス13aに対するI/O数123は「2回」である。この場合、対象I/Fデバイス13aに関する前排他数は、共有キュー20bに割り当てられているプロセッサ11b、11cからのI/O数123の合計「19+2=21」となる。
次に、キュー割当部35は、対象専有キューに対象プロセッサ11を割り当てたと仮定した場合における、対象I/Fデバイスに関する排他数を算出(推定)する(S204)。ここで算出した排他数を「後排他数」という。
前排他数は、次のように算出される。すなわち、例えば、仮に、専有キュー20aにプロセッサ11bを割り当てた場合、元々専有キュー20aに割り当てられていたプロセッサ11aは、共有キュー20bに割り当てられることになる。したがって、I/Fデバイス13a(デバイスID「D1」)に関する後排他数は、共有キュー20bに割り当てられることになるプロセッサ11a(プロセッサID「U1」)及びプロセッサ11c(プロセッサID「U3」)のI/O数123の合計「431+2=433」となる。
次に、キュー割当部35は、後排他数と前排他数との差Z1が所定の閾値C1(C1は0以下の値)未満であるか否かを判定する(S205)。つまり、キュー割当部35は、「Z1(=後排他数−前排他数)<閾値C≦0」であるか否かを判定する。
S205の判定が肯定的な場合(S205:YES)、キュー割当部35は、対象専有キューに、対象専用キューに割り当てられていたプロセッサに代えて対象プロセッサ11を割り当てる(S210)。すなわち、キュー割当部35は、キュー管理テーブル100において、キューID102が対象専有キューと一致するレコードにおけるプロセッサID103を、対象プロセッサ11に更新する処理を行う。なぜなら、対象専有キューに対象プロセッサ11を割り当てた方が、I/Fデバイス13に関する排他数が減少する可能性が高いと考えられるからである。そして、キュー割当部35は、ループBの処理を抜ける。
S205の判定が否定的な場合(S205:NO)、キュー割当部35は、次の処理を行う。キュー割当部35は、全てのプロセッサ11についてループBの処理を完了した場合、ループBの処理を抜け、まだ未処理のプロセッサ11が残っている場合、ループBの処理を繰り返す。すなわち、キュー割当部35は、対象専有キューに割り当てるプロセッサ11を現状のままとする。なぜなら、対象専有キューに割り当てるプロセッサ11を変更しても、I/Fデバイス13に関する排他数が減少する可能性が低いと考えられるからである。
キュー割当部35は、ループBの処理を抜けた後、次の処理を行う。キュー割当部35は、I/Fデバイスに関する全ての専有キューについてループAの処理を完了した場合、ループAの処理を抜けて本処理を終了し、まだ未処理の専有キューが残っている場合、ループAの処理を繰り返す。
図7は、I/Fデバイス13に関連付けられている複数のキューの内、何れを専有キューとするかを決定する処理の例を示すフローチャートである。
本処理は、I/Fデバイス13に関連付けられている複数のキューの内、専有キューとして利用されるキューの数が決まっていない場合の例である。すなわち、本処理の場合、必要に応じて専有キューの数が増減し得る。また、本処理は、1つのI/Fデバイス13に対する処理の例である。ストレージシステム1aが複数のI/Fデバイス13を備える場合、I/Fデバイス13毎に本処理が実行される。キュー割当部35は、図6に示す処理と図7に示す処理の何れかを採用しても良いし、所定のタイミングで図6に示す処理と図7に示す処理とを切り替えても良い。以下、1つのI/Fデバイス13を例に取り、図7の説明において、そのI/Fデバイス13を「対象I/Fデバイス」という。
キュー割当部35は、キュー管理テーブル100及びプロセッサ別I/O数テーブル120を参照し、対象I/Fデバイスに関連付いている各キュー20の利用指標を算出する(S301)。ここで算出した利用指標を、「前利用指標」という。利用指標とは、キュー20がプロセッサ11にどのように利用されているか(つまり、キューの利用態様)を示す指標である。利用指標は、キュー20に割り当てられているプロセッサ11の数と、各プロセッサ11からそのキュー20に発行されたI/O数とに基づいて算出されてよい。利用指標は、キュー20に発行されたI/O数が多くなると、大きくなる値であってよい。反対に、利用指標は、キュー20に割り当てられているプロセッサ11の数が多くなると、小さくなる値であってよい。例えば、利用指標は、キュー20に割り当てられている各プロセッサ11からそのキュー20に発行されたI/O数の合計が、そのキュー20に割り当てられているプロセッサ数の逆数によって重み付けされた値であってよい。この観点から、「利用指標」は、1のキュー20における1のプロセッサ11あたりの利用負荷指標と定義されてもよい。
例えば、キュー20に割り当てられているプロセッサ11の数が1つの場合に対する係数を「2.0」、プロセッサ11の数が2つの場合に対する係数を「1.5」、プロセッサ11の数が3つの場合に対する係数を「1.0」とする。そして、図3のキュー管理テーブル100に示すように、デバイスID101「D2」のI/Fデバイス13bに関連付いているキューID102「Q3」のキュー20cには、プロセッサID103「U3」のプロセッサ11cだけが割り当てられている。そして、図4のプロセッサ別I/O数テーブル120に示すように、プロセッサ11c(プロセッサID121「U3」)からデバイスID122「D2」のI/Fデバイス13bに発行されたI/O数123は「11回」である。この場合、キュー20cの前利用指標は、「2.0×11=22」と算出されてよい。
また、デバイスID「D2」のI/Fデバイス13bに関連付いているキューID102「Q4」のキュー20dには、プロセッサID103「U1」及び「U2」のプロセッサ11a及び11bが割り当てられている。そして、プロセッサ11a及び11bからキュー20dに発行されたI/O数123は、それぞれ「5回」及び「189回」である。この場合、キュー20dの前利用指標は、「1.5×(5+189)=291」と算出されてよい。
次に、キュー割当部35は、各キューの中から、前利用指標が最大のキュー(「第1のキュー」という)と、前利用指標が最小のキュー(「第2のキュー」という)を特定する(S302)。つまり、第1のキューは、少数のプロセッサ11から多数のI/O要求を受けているキューであるといえる。第2のキューは、多数のプロセッサ11から少数のI/O要求を受けているキューであるといえる。上記の例において、キュー20cの前利用指標は「22」、キュー20dの前利用指標は「291」であるので、キュー割当部35は、第1のキューとしてキュー20dを特定し、第2のキューとしてキュー20cを特定する。
次に、キュー割当部35は、I/Fデバイス13にI/O要求を発行する複数のプロセッサ11の中から、キューの割当の変更について検討するプロセッサ11を選択する。例えば、キュー割当部35は、プロセッサ別I/O数テーブル120を参照し、第1のキューに割り当てられている複数のプロセッサ11の中で、I/O数123が最小のプロセッサ11を選択してもよい(S303)。上記の例において、キュー割当部35は、第1のキュー20d(キューID「Q4」)に割り当てられているプロセッサ11a及び11b(プロセッサID「U1」及び「U2」)の中から、I/O数123が最小のプロセッサ11a(プロセッサID「U1」)を選択する。
次に、キュー割当部35は、キュー管理テーブル100及びプロセッサ別I/O数テーブル120を参照し、選択プロセッサ11(S303で選択したプロセッサ)を第2のキューに割り当てたと仮定した場合における各キューの利用指標を算出(推定)する(S304)。ここで算出した利用指標を、「後利用指標」という。
第2のキューに選択プロセッサ11を割り当てたと仮定した場合、第1のキューの後利用指標は、選択プロセッサ11の割り当てが解除される分、係数が大きくなり(プロセッサ数が減少するため)、I/O数が減少する。一方、第2のキューの後利用指標は、選択プロセッサ11が割り当てられる分、係数が小さくなり(プロセッサ数が増加するため)、I/O数が増加する。
上記の例の場合、第2のキュー20cに選択プロセッサ11aを割り当てた場合、第2のキュー20cに、プロセッサ11a、11c(プロセッサID「U1」、「U3」)が割り当てられることとなる。よって、第2のキュー20cの後利用指標は、「1.5×(5+11)=24」と算出される。一方、第1のキュー20dには、プロセッサ11b(プロセッサID「U2」)だけが割り当てられることとなる。よって、第1のキュー20dの後利用指標は、「2.0×189=378」と算出される。
次に、キュー割当部35は、第1のキューの後利用指標が、第2のキューの後利用指標以上であるか否かを判定する(S305)。すなわち、キュー割当部35は、仮に第2のキューに選択プロセッサ11を割り当てた場合において、第1のキューと第2のキューとの間における利用指標の大小関係が逆転するか否かを判定する。
第1のキューの後利用指標が第2のキューの後利用指標よりも小さい場合(S305:NO)、キュー割当部35は、本処理を終了する。すなわち、キュー割当部35は、第1のキューと第2のキューとの間において利用指標の大小関係が逆転する等により利用指標の差が一定以上減少しない場合、キューに対する選択プロセッサ11の割り当てを変更しない。なぜなら、変更したとしても、I/Fデバイス13に関連付いているキュー20の全体における排他処理の発生回数が減少する可能性が低いからである。
第1のキューの後利用指標が第2のキューの後利用指標以上である場合(S305:YES)、キュー割当部35は、キュー割り当て変更処理を実行し(S310)、本処理を終了する。すなわち、キュー割当部35は、第1のキューと第2のキューとの間において利用指標の大小関係が逆転等せずに利用指標の差が一定以上減少する場合、本処理を終了する。キュー割り当て変更処理(S310)の詳細については後述する(図8参照)。上記の例の場合、第1のキュー20dの後利用指標は「378」、第2のキュー20cの後利用指標は「24」と算出されるので、キュー割当部35は、キュー割り当て変更処理(S310)を実行する。
図8は、キュー割り当て変更処理の例を示すフローチャートである。本処理は、図7のS310に相当する。
キュー割当部35は、第2のキューに選択プロセッサ11を割り当てる(S401)。上記の例の場合、キュー割当部35は、キュー管理テーブル100において、選択プロセッサID103「U1」を、キューID102「Q4」との対応関係から、キューID102「Q3」(第2のキュー)との対応関係へ変更する。
次に、キュー割当部35は、第1のキューに割り当てられているプロセッサを特定する(S402)。上記の例の場合、キュー割当部35は、キュー管理テーブル100において、キューID102「Q4」(第1のキュー)と対応関係を有するプロセッサID103「U2」を特定する。
そして、キュー割当部35は、第1のキューに割り当てられているプロセッサの数が「1」であるか否かを判定する(S403)。
第1のキューに割り当てられているプロセッサの数が「1」でない場合(S403:NO)、キュー割当部35は、そのままS410へ進む。つまり、キュー割当部35は、キュー管理テーブル100において、第1のキューのモード104を「共有」のままとする。
第1のキューに割り当てられているプロセッサの数が「1」である場合(S403:YES)、キュー割当部35は、第1のキューを専有キューに変更する(S404)。つまり、キュー割当部35は、キュー管理テーブル100において、第1のキューのモード104を「専有」に変更する。そして、キュー割当部35は、S410へ進む。
上記の例の場合、第1のキュー20d(キューID102「Q4」)と対応関係を有するプロセッサの数は「1」(プロセッサID「U2」のみ)となるので、キュー割当部35は、キュー管理テーブル100において、キューID102「Q4」のモード104を「専有」に変更する。
次に、キュー割当部35は、第2のキューに割り当てられているプロセッサを特定する(S410)。上記の例の場合、キュー割当部35は、キュー管理テーブル100において、第2のキュー20c(キューID102「Q3」)と対応関係を有するプロセッサID103「U1」及び「U3」を特定する。
そして、キュー割当部35は、第2のキューに割り当てられているプロセッサの数が「2以上」であるか否かを判定する(S411)。
第2のキューに割り当てられているプロセッサの数が「2以上」でない場合(S411:NO)、キュー割当部35は、本処理を終了し、図7に示す処理へ戻る。つまり、キュー割当部35は、キュー管理テーブル100において、第2のキューのモード104を「専有」のままとする。
第2のキューに割り当てられているプロセッサの数が「2以上」である場合(S411:YES)、キュー割当部35は、第2のキューのモード104を「共有」に変更する(S412)。そして、キュー割当部35は、本処理を終了し、図7に示す処理に戻る。
上記の例の場合、第2のキュー20c(キューID102「Q3」)と対応関係を有するプロセッサの数は「2」(プロセッサID「U1」及び「U3」)となるので、キュー割当部35は、キュー管理テーブル100において、キューID102「Q3」のモード104を「共有」に変更する。
以上の第1の実施形態の説明によれば、例えば以下の説明をできる。
コントローラ2a(例えば、プロセッサ11で実行されるキュー制御部34(図2参照))は、I/Fデバイス13に関連付けられているキュー20に対するI/Oを制御する。コントローラ2aは、複数のプロセッサ11の各々のI/Fデバイス13に対するデータの発行頻度に基づいて、専有キュー20aに割り当てられるプロセッサ11(「第1のプロセッサ」)を決定してよい。第1のプロセッサとされるプロセッサ11は、複数のプロセッサ11の内、I/Fデバイス13に対するデータの発行頻度が最大のプロセッサ11であってよい。これにより、I/Fデバイス13に対するデータの発行頻度が最大のプロセッサ11から発行されるデータについて、排他処理が不要となる。
コントローラ2aは、共有キューにデータが格納される頻度である共有頻度に関する所定の条件が満たされた場合、共有キュー20bに割り当てられているプロセッサ(この段落で「第2のプロセッサ」)11を、専有キュー20aに割り当てられているプロセッサ(この段落で「第1のプロセッサ」)11に代えて専有キュー20aに割り当て、且つ、第2のプロセッサに代えて第1のプロセッサを共有キュー20bに割り当てる割当て切替えを実行してもよい。これにより、排他処理の発生状況が変化した場合に、専有キュー20aに割り当てるプロセッサを変更することができる。
所定の条件は、後共有頻度が前共有頻度よりも所定の閾値以上小さいことであってよい。ここで、後共有頻度とは、第2プロセッサを第1プロセッサに代えて専有キュー20aに割り当て、且つ、第2プロセッサに代えて第1プロセッサを共有キュー20bに割り当てる割当て切替えを実行したと仮定した場合の共有頻度(共有キューにデータが格納される頻度)であってよい。前共有頻度とは、その割当て切替え前の共有頻度であってよい。これにより、排他処理の発生状況が変化した場合に、専有キュー20aに、排他処理を発生させる可能性のより高いプロセッサ11を割り当てることができる。結果として、キュー20の全体における排他処理の発生回数を減少させることができる。
コントローラ2aは、複数のキュー20の各々について、専有及び共有の何れのキュー種別であるかを管理し、共有のキューについては、そのキューにロックをかけることを含んだ排他処理を行ってそのキューにデータを格納し、専有のキューについては、排他処理無しにそのキューにデータを格納してよい。また、コントローラ2aは、複数のプロセッサと複数のキューとの割当関係を繰り返し更新してよい。そして、コントローラ2aは、キューに割り当てられているプロセッサ数が1つだけになった場合に、そのキューのキュー種別を共有から専有に変更してよい。

コントローラ2aは、複数のキューの内の利用負荷指標が最大のキューである第1のキューについて、そのキューのキュー種別を、共有から専有に変更するか否か判定してよい。ここで、利用負荷指標とは、キューにおける1のプロセッサあたりの利用負荷の大きさを示す指標であって、そのキューに割り当てられているプロセッサ数が多くなると小さくなり、各プロセッサからそのキューにデータが格納された頻度が大きくなると大きくなる値であってよい。
コントローラ2aは、上記の第1のキューに割り当てられている複数のプロセッサ11の内、その第1のキューにデータを格納する頻度が最小のプロセッサ11を、複数のキューの内の利用負荷指標が最小のキューである第2のキューに割り当てる割当て切替えを実行したと仮定した場合の第1のキューの利用負荷指標及び第2のキューの利用負荷指標をそれぞれ推定し、その推定した第1のキューの利用負荷指標が、その推定された第2のキューの利用負荷指標よりも大きい場合に、第2のキューに最小のプロセッサを割り当てる割当て切替えを実行してもよい。
<第2の実施形態>
以下、第2の実施形態を説明する。その際、第1の実施形態の相違点を主に説明し、第1の実施形態との共通点については説明を省略又は簡略する。
図9は、第2の実施形態に係るストレージシステム1bの動作概要を示す。
第2の実施形態に係るストレージシステム1bは、複数のプロセッサ11と、メモリ12bと、I/Fデバイス13(例えば13b)と、キュー20(例えば20c及び20d)とを有する。しかし、ストレージシステム1bは、専有キュー20とプロセッサ11との割当て関係を変更せず、I/O要求を発行するプロセス31を、適切なプロセッサ11に移動させる。
コントローラ2bは、プロセス31のプロセッサ11への配置を制御する。プロセス31から発行されたデータは、そのプロセス31を実行するプロセッサ11が割り当てられているキュー20に格納される。そこで、コントローラ2bは、I/Fデバイス13に対するデータの発行頻度に基づいて、専有キュー20に割り当てられている第1のプロセッサ11で実行されるプロセス31を決定してもよい。これにより、排他処理を発生させる可能性のより高いプロセス31を、専有キュー20aに割り当てられているプロセッサ11で実行することができる。つまり、キュー20の全体における排他処理の発生回数が減少し得る。
コントローラ2bは、専有キューに割り当てられていて負荷が所定の閾値未満であるプロセッサ(この段落で「第1のプロセッサ」)11に、共有キューに割り当てられているプロセッサ(この段落で「第2のプロセッサ」)11で実行されている1以上のプロセス31を移動させるプロセス移動を実行したと仮定した場合の排他数(共有キューで排他処理が発生する回数)を推定する。コントローラ2bは、その推定した排他数が、プロセス移動前の排他数よりも所定の閾値以上小さい場合、そのプロセス移動を実行してもよい。これにより、排他処理の発生状況が変化した場合、排他処理を発生させる可能性のより高いプロセス31を、専有キュー20aに割り当てられているプロセッサ11に移動させることができる。
図9において、ストレージシステム1bは、I/Fデバイス13bに関連するキュー20c、20dを有する。キュー20cは「専有キュー」であり、キュー20dは「共有キュー」である。専有キュー20cには、プロセッサ11cが割り当てられている。共有キュー20dには、プロセッサ11a及び11cが割り当てられている。また、プロセッサ11aではプロセス31aが実行されており、プロセッサ11bではプロセス31bが実行されており、プロセッサ11cではプロセス31cが実行されている。
その後、プロセス31a、31b及び31cの中で、プロセス31bのI/Fデバイス13bに対するデータの発行頻度が最大になった場合、次の処理が行われて良い。すなわち、コントローラ1bは、プロセス31bを、専有キュー20cに割り当てられているプロセッサ11cへ移動させ、プロセス31cを、共有キュー20dに割り当てられているプロセッサ11bへ移動させる。これにより、共有キュー20dにデータが格納される頻度が減少し、その結果、排他処理の実行される回数も減少する。
図10は、第2の実施形態に係るストレージシステム1bの構成例を示す。
コントローラ1bのメモリ12bにおいて、キュー割当部35に代えて、プロセス配置部37が記憶される。プロセス配置部37は、プロセス31を実行するプロセッサ11を決定する。プロセス配置部37は、プロセス31を実行するプロセッサ11を変更する。すなわち、プロセス配置部37は、或るプロセッサ11で実行されているプロセス31を、別のプロセッサ11へ移動させることができる。
また、プロセッサ別I/O数テーブル140の構成は、第1の実施形態でのプロセッサ部I/O数テーブル120の構成と異なる。プロセス別I/O数テーブル140は、プロセス31がI/Fデバイス13に対して発行したI/O要求の数を管理するためのテーブルである。プロセス別I/O数テーブル140は、プロセス31が実行されているプロセッサ11と、プロセッサ11の使用率とを合わせて管理しても良い。プロセス別I/O数テーブル140の詳細については後述する(図11参照)。
図11は、プロセス別I/O数テーブル140の構成例を示す。
プロセス別I/O数テーブル140は、プロセス31がI/Fデバイス13に対して発行したI/O要求の数を管理する。さらに、プロセス別I/O数テーブル140は、プロセス31が処理されているプロセッサ11と、プロセッサ11の使用率も管理する。
プロセス別I/O数テーブル140は、例えば、プロセス31毎にレコードを有し、各レコードが、フィールド値として、プロセスID141と、プロセッサID142と、プロセッサ使用率143と、デバイスID144と、I/O数145とを有する。
プロセスID141は、プロセス31を識別するための情報である。プロセッサID142及びデバイスID144は、図3において説明したとおりである。I/O数145は、図4において説明したとおりである。
図11に示すプロセス別I/O数テーブル140の例によれば、次のことがわかる。すなわち、プロセスID141「1001」のプロセス31aは、プロセッサID142「U1」のプロセッサ11aで実行されている。そのプロセッサID142「U1」のプロセッサ使用率143は「36%」である。プロセスID141「1001」のプロセス31は、デバイスID144「D1」のI/Fデバイス13aに対して、所定期間に「244回」(145)のI/O要求を発行し、デバイスID144「D2」のI/Fデバイス14bに対して、所定期間に「5回」(145)のI/O要求を発行した。
図12は、プロセス31を何れのプロセッサ11で実行するかを決定する処理の例を示すフローチャートである。
本処理は、I/Fデバイス13に関する複数のキュー20の内、専有キューとして利用されるキューの数が決まっている構成の例である。また、本処理は、1つのI/Fデバイス13に対する処理の例である。ストレージシステム1bが複数のI/Fデバイス13を備える場合、I/Fデバイス13毎に本処理が実行される。以下、1つのI/Fデバイス13を例に取り、図12の説明において、そのI/Fデバイス13を「対象I/Fデバイス」と言う。
プロセス配置部37は、プロセス31毎にループAの処理を実行する。以下、1つのループAの処理を例に取り、そのループAの処理の対象となるプロセス31を「対象プロセス」という。どのようなプロセスが実行されているかについては、プロセススケジューラ32に問い合わせることによりわかる。
次に、プロセス配置部37は、ループAの処理において、プロセッサ11のそれぞれについて、ループBの処理を実行する。以下、1つのループBの処理を例に取り、そのループBの処理の対象となるプロセッサ11を「対象プロセッサ」という。
次に、キュー割当部35は、プロセス別I/O数テーブル140を参照し、現状における対象I/Fデバイス13に関する排他数(前排他数)を算出する(S603)。排他数については、図6において説明したとおりである。
前排他数は、次のように算出される。すなわち、例えば、図3のキュー管理テーブル100に示すように、デバイスID101「D2」の対象I/Fデバイス13bには、キューID102「Q3」の専有キュー20cと、キューID102「Q4」の共有キュー20dとが関連付けられている。そして、専有キュー20cには、プロセッサID「U3」のプロセッサ11cに割り当てられており、共有キュー20dには、プロセッサID「U1」及び「U2」のプロセッサ11a及び11bが割り当てられている。そして、図11のプロセス別I/O数テーブル140に示すように、プロセッサ11a(プロセッサID142「U1」)で実行されているプロセスID141「1001」のプロセス31aから、デバイスID144「D2」のI/Fデバイス13bに対するI/O数145は「5回」である。プロセッサ11b(プロセッサID142「U2」)で実行されているプロセスID141「1002」のプロセス31bから、デバイスID144「D2」のI/Fデバイス13bに対するI/O数145は「189回」である。プロセッサ11c(プロセッサID142「U3」)で実行されているプロセスID141「1003」のプロセス31cから、デバイスID144「D2」のI/Fデバイス13bに対するI/O数145は「11回」である。この場合、対象I/Fデバイス13bに関する前排他数は、共有キュー20dが割り当てられているプロセッサ11a及び11bで実行されているプロセス31a及び31bのI/O数145の合計「5+189=194」となる。
次に、プロセス配置部37は、対象プロセッサ11に対象プロセス31を移動させた場合における、対象I/Fデバイス13に関する排他数(後排他数)を算出する(S604)。
前排他数は、次のように算出される。すなわち、例えば、プロセス31bをプロセッサ11bからプロセッサ11cに移動させたと仮定した場合、プロセッサ11cが割り当てられているキュー20cは、プロセス31b及び31cから利用されることになる。したがって、I/Fデバイス13b(デバイスID「D2」)に関する後排他数は、共有キュー20dに割り当てられているプロセッサ11aで実行されているプロセス31a(プロセスID「1001」)のI/O数145の「5」となる。
次に、プロセス配置部37は、後排他数と前排他数との差Z2が所定の閾値C2(C2は0以下の値)未満であり、且つ、対象プロセッサ使用率143が閾値C3未満であるか否かを判定する(S605)。つまり、「Z2(=後排他数−前排他数)<閾値C2≦0」であり、且つ、「対象プロセッサ使用率143<閾値C3」であるか否かを判定する。
S605の判定が肯定的な場合(S605:YES)、プロセス配置部37は、対象プロセス31を対象プロセッサ11に移動させる(S610)。このとき、プロセス配置部37は、プロセス別I/O数テーブル140において、対象プロセスID141に対象プロセッサIDを対応付けるように更新する。なぜなら、プロセス31の移動先のプロセッサ11の使用率にも余裕があり、且つ、プロセス31を移動させた方が、I/Fデバイス13に関連する排他数が減少する可能性が高いと考えられるからである。そして、プロセス配置部37は、ループBの処理を抜ける。
S605の判定が否定的な場合(S605:NO)、プロセス配置部37は、次の処理を行う。プロセス配置部37は、全てのプロセッサ11についてループBの処理を完了した場合、ループBの処理を抜け、まだ未処理のプロセッサ11が残っている場合、ループBの処理を繰り返す。すなわち、プロセス配置部37は、対象プロセス31を移動させず、現状のままとする。なぜなら、プロセス31の移動先のプロセッサ11の使用率に余裕が無い、又は、プロセス31を移動してもI/Fデバイス13に関する排他数が減少する可能性が低いと考えられるからである。
プロセス配置部37は、ループBの処理を抜けた後、次の処理を行う。プロセス配置部37は、全てのプロセス31についてループAの処理を完了した場合、ループAの処理を抜けて本処理を終了し、まだ未処理のプロセス31が残っている場合、ループAの処理を繰り返す。
複数のプロセッサのそれぞれでプロセスを実行することによりデータが発行されるようになっている第2の実施形態の説明によれば、例えば以下の説明をできる。
コントローラ2bは、複数のプロセスにそれぞれ対応した複数のデータ発行頻度に基づいて、専有キューに割り当てられている第1のプロセッサで実行するプロセスを決定する。ここで、プロセスのデータ発行頻度は、そのプロセスがI/Fデバイスへデータを発行した頻度である。また、コントローラ2bは、その複数のデータ発行頻度のうち最大のデータ発行頻度に対応したプロセスを、専有キューに割り当てられている第1のプロセッサで実行するプロセスとしてよい。これにより、I/Fデバイス13に対するデータの発行頻度が最大のプロセス31から発行されるデータについて、排他処理が不要となる。
コントローラ2bは、共有キューにデータが格納される頻度である共有頻度及び第1のプロセッサの負荷に関する所定の条件が満たされた場合、いずれかの第2のプロセッサである対象第2プロセッサで実行されているプロセスを、第1のプロセッサに移動させるプロセス移動を実行する。コントローラ2bは、所定の条件として、後共有頻度が前共有頻度よりも所定の閾値以上小さく、且つ、第1のプロセッサの負荷が所定の閾値未満であることを設定してもよい。ここで、後共有頻度とは、第2のプロセッサで実行されているプロセスを第1のプロセッサに移動させるプロセス移動を実行したと仮定した場合の共有頻度であってよい。そして、前共有頻度とは、プロセス移動前の共有頻度であってよい。これにより、排他処理の発生状況が変化した場合に、専有キュー20に割り当てられており、且つ、負荷が所定未満のプロセッサ11に、排他処理を発生させる可能性のより高いプロセス31を実行させることができる。結果として、プロセッサの負荷を考慮しつつ、キュー20の全体における排他処理の発生回数を減少させることができる。
上述した実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。例えば、コントローラ2は、複数のプロセッサ11を含み、メモリ12及びI/Fデバイス13は、コントローラ2の外に設けられていてもよい。
例えば、複数のプロセッサ11は、一つの集積回路に含まれる複数のコア(マルチコア)であってもよい。例えば、複数のプロセッサ11は、マルチスレッドCPUにおける複数のスレッドであってもよい。
1a、1b:ストレージシステム 11a、11b、11c:プロセッサ 12a、12b:メモリ 13a、13b:I/Fデバイス 20a、20b、20c、20d:キュー


Claims (10)

  1. 複数プロセッサを含んだコントローラと、
    記憶デバイスが接続されるインターフェイスデバイスと、
    前記インターフェイスデバイスに関連付けられており専有キューと共有キューとを含んだ複数のキューと、
    を有し、
    前記複数のキューの各々には、そのキューに割り当てられているプロセッサから前記インターフェイスデバイスへ送られるデータが格納され、前記複数のキューの各々から前記インターフェイスデバイスにデータが送られるようになっており、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、データの格納時に排他処理が不要なキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、データの格納時に排他処理が必要なキューであり、
    前記コントローラは、
    前記専有キューに割り当てられたプロセッサと、前記共有キューに割り当てられたプロセッサと、の割当てを切替えた場合に、前記共有キューにデータが格納される共有頻度が所定の閾値以上小さくなる場合に、前記割当ての切替えを実行する
    ストレージシステム。
  2. 前記コントローラは、
    前記複数のプロセッサがそれぞれ前記インターフェイスデバイスへデータを発行したデータ発行頻度に基づいて、前記専有キューに割り当てるプロセッサを決定す
    請求項1記載のストレージシステム。
  3. 複数プロセッサを含んだコントローラと、
    記憶デバイスが接続されるインターフェイスデバイスと、
    前記インターフェイスデバイスに関連付けられており専有キューと共有キューとを含んだ複数のキューと、
    を有し、
    前記複数のキューの各々には、そのキューに割り当てられているプロセッサから前記インターフェイスデバイスへ送られるデータが格納され、前記複数のキューの各々から前記インターフェイスデバイスにデータが送られるようになっており、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、データの格納時に排他処理が不要なキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、データの格納時に排他処理が必要なキューであり、
    前記コントローラは、
    前記複数のキューの内の利用負荷指標が最大のキューである第1のキューについて、そのキューのキュー種別を、共有から専有に変更するか否か判定するようになっており、
    前記利用負荷指標は、キューにおける1のプロセッサあたりの利用負荷の大きさを示す指標であって、そのキューに割り当てられているプロセッサ数が多くなると小さくなり、各プロセッサからそのキューにデータが格納された頻度が大きくなると大きくなる値である
    ストレージシステム。
  4. 前記コントローラは、
    前記第1のキューに割り当てられている複数のプロセッサの内、前記第1のキューにデータを格納する頻度が最小のプロセッサを、前記複数のキューの内の前記利用負荷指標が最小のキューである第2のキューに割り当てる割当て切替えを実行したと仮定した場合の前記第1のキューの利用負荷指標及び前記第2のキューの利用負荷指標をそれぞれ推定し、
    前記推定された第1のキューの利用負荷指標が、前記推定された第2のキューの利用負荷指標よりも大きい場合、前記第2のキューに前記最小のプロセッサを割り当てる割当て切替えを実行する
    請求項記載のストレージシステム。
  5. 前記利用負荷指標は、キューに割り当てられているプロセッサ数の逆数と、各プロセッサからそのキューにデータが格納された頻度の合計との積に基づく値である
    請求項記載のストレージシステム。
  6. 複数プロセッサを含んだコントローラと、
    記憶デバイスが接続されるインターフェイスデバイスと、
    前記インターフェイスデバイスに関連付けられており専有キューと共有キューとを含んだ複数のキューと、
    を有し、
    前記複数のキューの各々には、そのキューに割り当てられているプロセッサから前記インターフェイスデバイスへ送られるデータが格納され、前記複数のキューの各々から前記インターフェイスデバイスにデータが送られるようになっており、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、データの格納時に排他処理が不要なキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、データの格納時に排他処理が必要なキューであり、
    前記複数のプロセッサのそれぞれでプロセスを実行することによりデータが発行されるようになっており、
    前記コントローラは、
    前記共有キューにデータが格納される頻度である共有頻度及び前記専有キューに割り当てられたプロセッサの負荷に関する所定の条件が満たされた場合、前記共有キューに割り当てられたいずれかのプロセッサで実行されているプロセスを、前記専有キューに割り当てられたプロセッサに移動させるプロセス移動を実行する
    ストレージシステム。
  7. 前記所定の条件とは、前記プロセスを移動させた場合に前記共有キューにデータが格納される共有頻度が所定の閾値以上小さくなり、且つ、前記専有キューに割り当てられたプロセッサの負荷が所定の閾値未満である
    請求項6記載のストレージシステム。
  8. ストレージシステムにおけるデータの記憶制御方法であって、
    前記ストレージシステムは、複数のプロセッサを含んだコントローラと、記憶デバイスが接続されるインターフェイスデバイスと、前記インターフェイスデバイスに関連付けられており専有キューと共有キューを含んだ複数のキューと、を有し、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、
    前記コントローラは、
    前記インターフェイスデバイスへ送られるデータが前記専有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行わずに前記データを前記専有キューに格納し、
    前記インターフェイスデバイスへ送られるデータが前記共有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行って前記データを前記共有キューに格納し、
    前記専有キューに割り当てられたプロセッサと、前記共有キューに割り当てられたプロセッサと、の割当てを切替えた場合に、前記共有キューにデータが格納される共有頻度が所定の閾値以上小さくなる場合に、前記割当ての切替えを実行する
    記憶制御方法。
  9. ストレージシステムにおけるデータの記憶制御方法であって、
    前記ストレージシステムは、複数のプロセッサを含んだコントローラと、記憶デバイスが接続されるインターフェイスデバイスと、前記インターフェイスデバイスに関連付けられており専有キューと共有キューを含んだ複数のキューと、を有し、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、
    前記コントローラは、
    前記インターフェイスデバイスへ送られるデータが前記専有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行わずに前記データを前記専有キューに格納し、
    前記インターフェイスデバイスへ送られるデータが前記共有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行って前記データを前記共有キューに格納し、
    前記複数のキューの内の利用負荷指標が最大のキューである第1のキューについて、そのキューのキュー種別を、共有から専有に変更するか否か判定するようになっており、
    前記利用負荷指標は、キューにおける1のプロセッサあたりの利用負荷の大きさを示す指標であって、そのキューに割り当てられているプロセッサ数が多くなると小さくなり、各プロセッサからそのキューにデータが格納された頻度が大きくなると大きくなる値である
    記憶制御方法。
  10. ストレージシステムにおけるデータの記憶制御方法であって、
    前記ストレージシステムは、複数のプロセッサを含んだコントローラと、記憶デバイスが接続されるインターフェイスデバイスと、前記インターフェイスデバイスに関連付けられており専有キューと共有キューを含んだ複数のキューと、を有し、
    前記専有キューは、1つのプロセッサだけが割り当てられているキューであり、
    前記共有キューは、複数の前記プロセッサが割り当てられているキューであり、
    前記複数のプロセッサのそれぞれでプロセスを実行することによりデータが発行されるようになっており、
    前記コントローラは、
    前記インターフェイスデバイスへ送られるデータが前記専有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行わずに前記データを前記専有キューに格納し、
    前記インターフェイスデバイスへ送られるデータが前記共有キューに割り当てられたプロセッサから発行されたものである場合、排他処理を行って前記データを前記共有キューに格納し、
    前記共有キューにデータが格納される頻度である共有頻度及び前記専有キューに割り当てられたプロセッサの負荷に関する所定の条件が満たされた場合、前記共有キューに割り当てられたいずれかのプロセッサで実行されているプロセスを、前記専有キューに割り当てられたプロセッサに移動させるプロセス移動を実行する
    記憶制御方法。
JP2016556061A 2014-10-27 2014-10-27 ストレージシステム、及び、記憶制御方法 Expired - Fee Related JP6251417B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2014/078497 WO2016067339A1 (ja) 2014-10-27 2014-10-27 ストレージシステム、及び、記憶制御方法

Publications (2)

Publication Number Publication Date
JPWO2016067339A1 JPWO2016067339A1 (ja) 2017-06-29
JP6251417B2 true JP6251417B2 (ja) 2017-12-20

Family

ID=55856734

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016556061A Expired - Fee Related JP6251417B2 (ja) 2014-10-27 2014-10-27 ストレージシステム、及び、記憶制御方法

Country Status (3)

Country Link
US (1) US10162571B2 (ja)
JP (1) JP6251417B2 (ja)
WO (1) WO2016067339A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220269540A1 (en) * 2021-02-25 2022-08-25 Seagate Technology Llc NVMe POLICY-BASED I/O QUEUE ALLOCATION

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5239649A (en) * 1989-10-30 1993-08-24 International Business Machines Corporation Channel path load balancing, through selection of storage volumes to be processed, for long running applications
US5506987A (en) * 1991-02-01 1996-04-09 Digital Equipment Corporation Affinity scheduling of processes on symmetric multiprocessing systems
US5185861A (en) * 1991-08-19 1993-02-09 Sequent Computer Systems, Inc. Cache affinity scheduler
US5217738A (en) * 1992-04-17 1993-06-08 Board Of Trustees Operating Michigan State University Method for the treatment of harvested plant parts with L(+) adenosine or 1-triacontanol
US5872972A (en) * 1996-07-05 1999-02-16 Ncr Corporation Method for load balancing a per processor affinity scheduler wherein processes are strictly affinitized to processors and the migration of a process from an affinitized processor to another available processor is limited
US5889989A (en) * 1996-09-16 1999-03-30 The Research Foundation Of State University Of New York Load sharing controller for optimizing monetary cost
US6292822B1 (en) * 1998-05-13 2001-09-18 Microsoft Corporation Dynamic load balancing among processors in a parallel computer
US6735769B1 (en) 2000-07-13 2004-05-11 International Business Machines Corporation Apparatus and method for initial load balancing in a multiple run queue system
JP4186575B2 (ja) 2002-09-30 2008-11-26 日本電気株式会社 メモリアクセス装置
JP4250989B2 (ja) * 2003-03-26 2009-04-08 日本電気株式会社 メモリアクセス制御装置
JP2006318139A (ja) * 2005-05-11 2006-11-24 Matsushita Electric Ind Co Ltd データ転送装置、データ転送方法およびプログラム
US8149708B2 (en) * 2006-04-20 2012-04-03 Cisco Technology, Inc. Dynamically switching streams of packets among dedicated and shared queues
JP2008276326A (ja) 2007-04-25 2008-11-13 Hitachi Ltd 記憶制御装置及び記憶制御装置の仮想メモリ制御方法
JP5347451B2 (ja) 2008-11-26 2013-11-20 富士通株式会社 マルチプロセッサシステム、競合回避プログラム及び競合回避方法
US8578106B1 (en) 2012-11-09 2013-11-05 DSSD, Inc. Method and system for queue demultiplexor with size grouping
US8595385B1 (en) 2013-05-28 2013-11-26 DSSD, Inc. Method and system for submission queue acceleration
KR20150017526A (ko) * 2013-08-07 2015-02-17 삼성전자주식회사 메모리 명령 스케줄러 및 메모리 명령 스케줄링 방법

Also Published As

Publication number Publication date
WO2016067339A1 (ja) 2016-05-06
JPWO2016067339A1 (ja) 2017-06-29
US10162571B2 (en) 2018-12-25
US20170286018A1 (en) 2017-10-05

Similar Documents

Publication Publication Date Title
US7913257B2 (en) Scheduling method, scheduling apparatus and multiprocessor system
JP4963018B2 (ja) スケジューリング方法およびスケジューリング装置
KR20150139408A (ko) 이종의 저장 매체들을 이용하는 분산 파일 시스템을 구동하는 전자 시스템, 및 그것의 데이터 저장 방법 및 관리 방법
JP2008257572A (ja) 論理区画に動的に資源割り当てを行うストレージシステム及びストレージシステムの論理分割方法
US9213560B2 (en) Affinity of virtual processor dispatching
US10164904B2 (en) Network bandwidth sharing in a distributed computing system
US9507633B2 (en) Scheduling method and system
WO2013035246A1 (ja) 仮想計算機制御装置、仮想計算機制御方法、仮想計算機制御プログラム、及び集積回路
JPWO2017056310A1 (ja) 計算機および計算機の制御方法
US7793051B1 (en) Global shared memory subsystem
JP5158576B2 (ja) 入出力制御システム、入出力制御方法、及び、入出力制御プログラム
JP6251417B2 (ja) ストレージシステム、及び、記憶制御方法
JP2012221217A (ja) メモリ管理装置、メモリ管理方法、および、制御プログラム
JP2015191604A (ja) 制御装置、制御プログラム、および制御方法
JP4789269B2 (ja) ベクトル処理装置及びベクトル処理方法
CN105630593A (zh) 用于处理中断的方法
US20130247065A1 (en) Apparatus and method for executing multi-operating systems
JP2014078214A (ja) スケジュールシステム、スケジュール方法、スケジュールプログラム、及び、オペレーティングシステム
JP6836536B2 (ja) ストレージシステム及びio処理の制御方法
JP2013041361A (ja) リソース調停システム及び調停方法
CN114637594A (zh) 多核处理设备、任务分配方法、装置及存储介质
JP6445876B2 (ja) リソース割当装置、リソース割当システム、および、リソース割当方法
JP4872942B2 (ja) ストレージシステム、ストレージ装置、優先度制御装置および優先度制御方法
CN111274161A (zh) 用于加速串行化算法的具有可变等待时间的位置感知型存储器
JP4727480B2 (ja) 情報処理方法、情報処理システム、情報処理装置、マルチプロセッサ、情報処理プログラム及び情報処理プログラムを記憶したコンピュータ読み取り可能な記憶媒体

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170301

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170905

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171031

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: 20171114

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171124

R150 Certificate of patent or registration of utility model

Ref document number: 6251417

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees