JPWO2017126097A1 - 計算機システム、計算機 - Google Patents

計算機システム、計算機 Download PDF

Info

Publication number
JPWO2017126097A1
JPWO2017126097A1 JP2017562396A JP2017562396A JPWO2017126097A1 JP WO2017126097 A1 JPWO2017126097 A1 JP WO2017126097A1 JP 2017562396 A JP2017562396 A JP 2017562396A JP 2017562396 A JP2017562396 A JP 2017562396A JP WO2017126097 A1 JPWO2017126097 A1 JP WO2017126097A1
Authority
JP
Japan
Prior art keywords
queue
request
storage program
program
upper limit
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.)
Granted
Application number
JP2017562396A
Other languages
English (en)
Other versions
JP6524267B2 (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 JPWO2017126097A1 publication Critical patent/JPWO2017126097A1/ja
Application granted granted Critical
Publication of JP6524267B2 publication Critical patent/JP6524267B2/ja
Active 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • 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/0662Virtualisation aspects
    • G06F3/0665Virtualisation aspects at area level, e.g. provisioning of virtual or logical volumes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • 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
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/0656Data buffering arrangements
    • 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
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/26Using a specific storage system architecture
    • G06F2212/261Storage comprising a plurality of storage devices

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

ストレージプログラムをOS上で動作させつつ、I/O性能を維持することを可能にする計算機システムを提供する。計算機システムは、OS上で動作し、ホストに論理ボリュームを提供するストレージプログラムを実行する。また、計算機システムは、ストレージプログラムが提供する論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報、を有する。OSは、ホストから論理ボリュームに対するI/O要求を受信した場合、ボリューム管理情報を参照して、論理ボリュームに適用されるストレージ機能の情報に基づいて、ストレージプログラムによるI/O処理が必要か否かを判定する。必要と判定した場合、ストレージプログラムと通信し、ストレージプログラムによるI/O処理を実行する。また、OSは、ストレージプログラムによるI/O処理が必要でないと判定した場合、ホストへI/O応答する。

Description

本発明は、計算機システム、計算機に関する。
本技術分野の背景技術を開示する文献として特許第4480479号公報(特許文献1)がある。この公報には、ストレージシステム(ファイルシステム)をオペレーティングシステム(Operating System:OS)の一部として動作させる技術が記載されている。
特許第4480479号公報
ストレージプログラムの可搬性を向上させ開発効率を高めるため、ストレージプログラムを、OS内部のプログラムではなく、OS上で動作するプログラムとして実装したいという新たな要求がある。この場合においても、大量かつ多様なストレージ処理を高速かつ高信頼に実行することが求められる。
しかしながら、ストレージプログラムをOS上で動作させた場合、例えばOSとストレージプログラムとの間の通信量が増大して、I/O帯域が不足すると、I/O性能が低下する可能性がある。この点に関し、特許文献1は、ストレージプログラムをOS上で動作させることを想定しておらず、I/O性能の低下を抑える技術については言及していない。
そこで、ストレージプログラムをOS上で動作させつつ、I/O性能を維持する技術を提供する。
上記課題を解決するために、本発明の一態様である計算機システムは、オペレーティングシステムと、オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサを備える。また、計算機システムは、オペレーティングシステムとストレージプログラムとの通信データを保持するキューと、ストレージプログラムが提供する論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリをさらに備える。オペレーティングシステムは、ホストから論理ボリュームに対するI/O要求を受信した場合、ボリューム管理情報を参照して、I/O要求の対象となる論理ボリュームに適用されるストレージ機能の情報に基づいて、ストレージプログラムによるI/O要求の処理が必要か否かを判定し、必要と判定した場合、キューを介してストレージプログラムと通信する。そして、ストレージプログラムは、I/O要求に基づく処理を実行する。また、オペレーティングシステムは、ストレージプログラムによるI/O要求の処理が必要でないと判定した場合、ホストへI/O要求に対する応答を実行する。
本発明によれば、ストレージプログラムをOS上で動作させつつ、I/O性能を維持することを可能にする技術を提供できる。上記した以外の課題、構成および効果は、以下の発明を実施するための形態の説明により明らかにされる。
I/O処理の概要を示す模式図である。 I/O処理の概要を示すフローチャートである。 計算機システム10の構成例を示す図である。 サーバ200のメモリ320の構成例を示す図である。 計算機システム10の他の構成例を示す図である。 Initiator−Targetキュー410の構成例を示す図である。 Target−Initiatorキュー420の構成例を示す図である。 ボリューム管理表1000の構成例を示す図である。 キャッシュ管理表900の構成例を示す図である。 プロセス管理表1300の構成例を示す図である。 資源管理表1400の構成例を示す図である。 キューペア管理表1500の構成例を示す図である。 ポリシ管理表1600の構成例を示す図である。 通信ドライバプログラム500のフローチャートである。 ストレージプログラム700のフローチャートである。 キャッシュ操作処理のフローチャートである。 複数のキューペアが存在するサーバ200の構成例を示す図である。 キューペア監視プログラム1700のフローチャートである。 キューペア増加処理のフローチャートである。 キューペア削減処理のフローチャートである。 システム設定を管理するGUIの一例を示す図である。
以下、図面を参照して本発明の実施形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。本発明が本実施形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明の技術的範囲に含まれる。特に限定しない限り、各構成要素は複数でも単数でも構わない。
以下の説明では、例えば、「xxx表」の表現にて各種情報を説明することがあるが、各種情報は表以外のデータ構造で表現されていてもよい。各種情報がデータ構造に依存しないことを示すために、「xxx表」を「xxx情報」と呼ぶことがある。
管理システムは、一又は複数の計算機で構成することができる。例えば、管理計算機が情報を処理及び表示する場合、管理計算機が管理システムである。例えば、複数の計算機で管理計算機と同等の機能が実現されている場合、当該複数の計算機(表示を表示用計算機が行う場合は表示用計算機を含んでよい)が、管理システムである。本実施形態では、管理端末240が管理システムである。
以下の説明では、「プログラム」あるいはそのプロセスを主語として処理を説明する場合があるが、プログラムは、プロセッサ(例えば、CPU(Central Processing Unit))によって実行されることで、定められた処理を、適宜に記憶資源(例えば、メモリ)及び/又は通信インタフェース装置(例えば、通信ポート)を用いながら行うため、処理の主語がプロセッサであってもよい。プロセッサは、プログラムに従って動作することによって、所定の機能を実現する機能部として動作する。プロセッサを含む装置及びシステムは、これらの機能部を含む装置及びシステムである。
プログラム、プロセス、又はプロセッサを主語として説明された処理は、計算機(例えば、サーバ、ストレージシステム、管理計算機、クライアント又はホスト)を主語として説明することもできる。プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースから各計算機にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ(例えば、管理計算機)又は記憶メディアでよい。
図1は、I/O処理の概要を示す模式図である。計算機システム10は、サーバ200とホスト210とを有する。サーバ200は、共有メモリ400とディスク装置360を有する。サーバ200では、OS600が動作し、またOS600上でストレージプログラム700が動作する。OS600は、I/O要求受信プログラム620と、I/O応答送信プログラム640と、通信ドライバプログラム500と、を有する。
ストレージプログラム700は、複数のディスク装置360の物理的な記憶領域から、1または2以上の仮想的なディスク装置を構成し、ホスト210に提供する。以後の説明では、この仮想的なディスク装置を論理ボリューム340と呼ぶ。論理ボリューム340の構成方法には、例えば、RAID(Redundant Arrays of Inexpensive Disks)があり、複数のディスク装置360を用いることで、データ冗長化による信頼性向上や、ディスク装置360の並列動作による性能向上が期待できる。
共有メモリ400は、Initiator−Targetキュー(ITQ)410とTarget−Initiatorキュー(TIQ)420のペア(以下「キューペア」ともいう)、またキャッシュ800を有する。
ITQ410は、I/O要求受信プログラム620からストレージプログラム700への通信データを保持する。TIQ420は、ストレージプログラム700からI/O応答送信プログラム640への通信データを保持する。同じキューペアであるITQ410とTIQ420は、実際の処理において対として用いられる。キューペアが複数存在する場合、通信時、ストレージプログラム700は一連の通信にはペアになっているTIQ420とITQ410を使う必要がある。また、1つのキューペアを1つのストレージプログラム700が独占して処理してもよいし、複数のストレージプログラム700が1つのキューペアを共有して処理してもよい。
図1の破線は制御情報の流れを示している。以下の説明において、制御情報は、I/O要求またはI/O応答である。また、図2は、I/O処理の概要を示すフローチャートである。図1及び図2を用いて、サーバ200がホスト210から論理ボリューム340に対するI/O要求を受信した場合におけるI/O処理の概要を、以下説明する。
ホスト210は、サーバ200へ論理ボリューム340に対するI/O要求を送信する。サーバ200がホスト210からI/O要求を受信する際、サーバ200が有するHBA331またはNIC332が、I/O割り込み要求を発行する。CPUコア311は、I/O割り込み要求を受け取り、図2に示すI/O処理を開始する(S3000)。
I/O割り込み要求を受け取ったCPUコア311は、I/O要求受信プログラム620を呼び出す(S3010)。CPUコア311は、I/O要求受信プログラム620を実行して、I/O要求を受信する。CPUコア311は、受信したI/O要求をメモリ320に記録し、通信ドライバプログラム500へI/O要求の到着の通知を発行する。その後、CPUコア311は、I/O要求受信プログラム620の処理を終了する。図1の破線C1は、このS3010及びS3020を実行するときの制御情報(ここではI/O要求)の流れを示している。
次に、CPUコア311は、通信ドライバプログラム500を呼び出し(S3020)、通信ドライバプログラム500を実行して、ストレージプログラム700による処理の要否を決定する(S3030)。
ここで、CPUコア311は、S3030においてYESの場合、すなわちストレージプログラム700の処理が必要と判断した場合、I/O要求をITQ410にエンキューする。図1の破線C2は、S3030がYesの場合における制御情報(ここではI/O要求)の流れを示している。
ITQ410にエンキューされたI/O要求は、OS600上で動作するストレージプログラム700によって処理される(S3040)。ストレージプログラム700は、I/O応答をTIQ420にエンキューし、通信ドライバプログラム500をシステムコールする。図1の破線C3は、S3040を実行するときの制御情報(ここではI/O要求またはI/O応答)の流れを示している。
CPUコア311は、システムコールにより呼び出された通信ドライバプログラム500を実行し、ストレージプログラム700によるI/O応答をTIQ420からデキューし、I/O応答送信プログラム640に通知する(S3050)。図1の破線C4は、S3050を実行するときの制御情報(ここではI/O応答)の流れを示している。
一方、CPUコア311は、S3030においてNoの場合、すなわちストレージプログラム700の処理が不要と判断した場合、I/O要求をITQ410にエンキューしないことで、ストレージプログラム700にI/O要求を通知しない。この場合、CPUコア311は、通信ドライバプログラム500を実行して、I/O応答を行う。例えば、I/O要求がリード要求であれば、I/O応答送信プログラム640を呼び出し、リード対象のデータが存在するキャッシュ800のアドレス及びサイズを通知する(S3050)。図1の破線C6は、このS3030がNoの場合における制御情報(ここではI/O要求またはI/O応答)の流れを示している。
次にCPUコア311は、I/O応答送信プログラム640を実行し、ホスト210にI/O応答を行う(S3060)。呼び出されたI/O応答送信プログラム640は、I/O要求に対する応答として、I/O完了通知をホスト210に送信する。
例えば、I/O要求がリード要求であれば、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へリードデータの転送を指示する。この指示には、S3050のI/O応答で通知されたリード対象のデータが存在するキャッシュ800のアドレス及びサイズが含まれる。HBA331もしくはNIC332は、このキャッシュ800のアドレス及びサイズを参照し、キャッシュ800の該当領域からリードデータを読み出して、ホスト210へリードデータを転送する。そして、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へI/O処理(リード処理)の完了通知を送信することを指示する(S3170)。
また、例えば、I/O要求がライト要求であれば、CPUコア311は、HBA331もしくはNIC332に対し、ホスト210へI/O処理(ライト処理)の完了通知を送信することを指示する。
ホスト210へI/O処理の完了通知が送信されて、図2に示すI/O処理が完了する(S3070)。図1の破線C5は、S3060を実行するときの制御情報(ここではI/O応答)の流れを示している。
したがって、図2のI/O処理のフローチャートにおいて、S3030がYesの場合、すなわちストレージプログラム700の処理が必要と判断された場合、図1の破線C1、C2、C3、C4、C5で示される制御情報の流れとなる。一方、S3030においてNoの場合、すなわちストレージプログラム700の処理が不要と判断された場合、図1の破線C1、C6、C5で示される制御情報の流れとなる。
ここで、ストレージプログラム700は、OS600内部のプログラムではなく、OS600上で動作している。そのため、ストレージプログラム700がホスト210に提供する論理ボリューム340へのI/O要求の全てを、例えばストレージプログラム700で処理させると、OS600とストレージプログラム700との間の通信量が増大する。これにより、I/O帯域の不足や、CPUコア311で実行させる処理の増加により、I/O性能が低下する可能性がある。
そこで、本実施形態においては、通信ドライバプログラム500が、ストレージプログラム700による処理の要否を決定して(S3030)、ストレージプログラム700での処理が不要な場合は、I/O要求の対象である論理ボリューム340を提供するストレージプログラム700であるにもかかわらず、ストレージプログラム700で当該I/O要求を処理しない。このように、ストレージプログラム700によるストレージ機能を使用しなくてもI/O応答が可能な場合には、通信ドライバプログラム500でI/O応答することで、ストレージプログラム700をOS600上で動作させつつ、I/O性能の低下を抑え、I/O性能を維持または向上することを可能にする。例えば、OS600は、ホスト210から論理ボリューム340に対するライト要求を受信した場合、キューペアを介してストレージプログラム700と通信する。そして、ストレージプログラム700では、ライト要求に基づく処理を実行する。一方、OS600は、ホスト210から論理ボリューム340に対するリード要求を受信した場合、キャッシュ管理表900を参照して、キャッシュ800上にリード要求に対応するデータが存在すると判定したとき、キャッシュ800上に存在するデータに基づき、ホスト210へリード要求に対する応答を実行する。
また、図1には、1つのOS600(OSカーネル610)にI/O要求受信プログラム620のプロセスおよびI/O応答送信プログラム640のプロセスが1つずつ配置された例が示されているが、この構成に限定されることは無く、1つのOS600(OSカーネル610)内にI/O要求受信プログラム620のプロセスおよびI/O応答送信プログラム640のプロセスを複数配置することも可能である。
図3は、計算機システム10の構成例を示す図である。計算機システム10は、サーバ200と、ホスト210と、管理端末240とを有する。サーバ200とホスト210と管理端末240は、ネットワーク220で互いに接続される。
サーバ200は、複数のデータ通信プロトコルを処理可能な計算機である。例えば、サーバ200は、FCP(Fibre Channel Protocol)、iSCSI(Internet Small Computer System Interface)、NFS(Network File System)、CIFS(Common Internet File System)、HTTP(Hyper Text Transfer Protocol)などのデータ通信プロトコルを使い、ホスト210や管理端末240とデータ通信を行う。
サーバ200は、例えば、ホスト210からのI/O要求を、ネットワーク220を介して受け取り、そのI/O処理を実行した後、処理結果(I/O応答)をホスト210へ返す。サーバ200は、データセンタなどの施設に固定設置される形態でもよいし、コンテナ型など移動可能であり、必要に応じて地理的な位置を変更してもよい。また、サーバ200が1つの計算機ではなく複数の計算機で構成されていてもよい。
管理端末240は、サーバ200のソフトウェアおよび各種設定などを管理する管理計算機である。管理端末240は管理プログラムを格納しており、管理プログラムを実行することによりサーバ200の管理に関する各種処理を行う。
ネットワーク220は、通信ネットワークであれば、その形態は問わない。ネットワーク220は、例えば、インターネット、LAN(Local Area Network)、WAN(Wide Area Network)、SAN(Storage Area Network)、無線LAN、携帯電話通信網などである。また、ネットワーク220は、単一の通信ネットワークではなく、複数種類の通信ネットワークから構成されてもよい。
ホスト210は、データセンタなどの施設に固定設置されてもよいし、コンテナ型など移動可能とし地理的な位置を変化させてもよい。ホスト210としては例えばスマートフォンを含む携帯電話や汎用計算機などが想定される。また、ホスト210は単一の装置ではなく、複数の異なる計算機から構成されていてもよい。
また、本実施形態では、計算機の一例としてサーバ200を例示しているが、本発明はこれに限定されることはない。他の例として、ストレージシステムを用いてもよい。本実施形態において、サーバ200は、計算機、ストレージシステム、またはストレージ装置としてもよい。
サーバ200は、メモリ320、HBA(Host Bus Adaptor)331、NIC(Network Interface Card)332、ディスク装置360、及びそれらに接続された制御演算ユニットであるCPU310を有する。
メモリ320に代えて、または加えて別種の記憶資源が採用されてもよい。HBA331及びNIC332に変えて、別種の通信インタフェースデバイスが採用されてもよい。
CPU310は、メモリ320に格納されているコンピュータプログラムを実行する。CPU310は、複数の演算ユニットであるCPUコア311を有し、各コアは独立して動作することができ、並列にコンピュータプログラムを実行する。
CPUコア311は、ストレージプログラム700、OS600、I/O要求受信プログラム620、およびI/O応答送信プログラム640を含む各種プログラムをメモリ320から読み出して実行するプロセッサコアである。CPUコア311は、プロセッサと呼んでも良い。
メモリ320は、コンピュータプログラム及びその他のデータを記憶する。メモリ320は、ホスト210から受信したデータ及びホスト210に送信するデータを一時的に記憶するキャッシュ800を含んでいてもよい。
HBA331は、ネットワーク220に接続され、NIC332は、LANやWAN、インターネットなどのネットワーク220に接続され、管理端末240やホスト210とのデータ通信に用いられる。
ディスク装置360として、サーバ200の二次記憶装置であるSSD(Solid State Drive)351、HDD(Hard Disk Drive)352を有する。二次記憶装置はストレージとして、I/O処理のデータを格納する。SSD351、HDD352の個数は特に限定されず、それぞれ図3に示した数に限定されない。また、ディスク装置360は、典型的には、SSD351、HDD352であるが、ブロック形式のデータを格納できるものであれば何でもよい。本実施形態では、記憶デバイスの一例としてディスク装置360を例示しているが、本発明はこれに限定されることはない。他の例として、ディスク装置360は、テープアーカイブ、あるいはDVD、CDなどの光ディスクライブラリを備えた装置であってもよい。以下では、SSD351、HDD352を総称してディスク装置360と呼ぶことにする。本実施形態において、ディスク装置360は、記憶デバイスとしてもよい。
図4は、サーバ200のメモリ320の構成例を示す図である。メモリ320には、ストレージプログラム700、キューペア監視プログラム1700、プロセス管理表1300、資源管理表1400、ポリシ管理表1600、OS600が格納されている。OS600はOSカーネル610を有する。OSカーネル610は、通信ドライバプログラム500、I/O要求受信プログラム620、I/O応答送信プログラム640を有する。
また、メモリ320には、ストレージプログラム700、キューペア監視プログラム1700、OS600からアクセス可能な領域である共有メモリ400を有する。共有メモリ400は、キャッシュ800、キャッシュ管理表900、Initiator−Targetキュー(ITQ)410、Target−Initiatorキュー(TIQ)420、キューペア管理表1500、およびボリューム管理表1000を有する。図4に示すプログラムまたは管理情報は、ディスク装置360からロードされ、メモリ320へ格納される。
通信ドライバプログラム500は、I/O要求受信プログラム620およびI/O応答送信プログラム640とストレージプログラム700との間の通信を実現する。通信ドライバプログラム500は、OSカーネル610からストレージプログラム700への通信を、TIQ420を介して伝達する。通信ドライバプログラム500は、ストレージプログラム700からOSカーネル610への通信を、ITQ410を介して伝達する。
I/O要求受信プログラム620は、FCP/iSCSIなどの通信プロトコルを用いて、ホスト210からI/O要求を受信し、受信したI/O要求(入出力要求)を、通信ドライバプログラム500を介してストレージプログラム700へ送信する。
I/O応答送信プログラム640は、通信ドライバプログラム500を介して、ストレージプログラム700からI/O応答を受信し、ホスト210へI/O応答を送信する。
ストレージプログラム700は、FCP/iSCSIなどの通信プロトコルを介して、ホスト210からのI/O要求に従って、キャッシュ800を用いつつディスク装置360にデータを書き込み、またはキャッシュ800を用いつつディスク装置360からデータを読み出す。ストレージプログラム700は、OSカーネル610上で動作するプログラムであり、ストレージ(ディスク装置360)へデータを書き込む処理、またはストレージ(ディスク装置360)からデータを読み出す処理を実行するプログラムである。ストレージプログラム700は、スナップショットやRAID等のストレージ機能を実行するプログラムである。ストレージプログラム700は、ストレージ処理プログラム、ストレージプロセス、ストレージ機能と呼んでもよい。
ストレージキャッシュ(キャッシュ)800は、ディスク装置360に書き込むデータまたはディスク装置360から読み出したブロックデータ(データ)を一時的に格納する。「ホスト210が論理ボリューム340にブロックデータを書き込む」というような説明は、実際はストレージプログラム700がキャッシュ800またはディスク装置360にブロックデータを書き込むことを意味する。同様に、「ホスト210が論理ボリューム340からブロックデータを読み出す」というような説明は、実際はストレージプログラム700がキャッシュ800またはディスク装置360からブロックデータを読み出すことを意味する。
論理ボリューム340は、ボリューム管理表1000により管理される。
一般に、ストレージプログラム700は、ホスト210から論理ボリューム340に対するデータを書き込む要求(ライト要求)を受信した場合、アクセス速度の速いキャッシュ800に一時的にデータを書き込んだ後、ホスト210にI/O応答として書き込み完了を通知する。そして、ホスト210からの書き込み要求とは非同期にディスク装置360に、キャッシュ800に格納されているデータを書き込む。これにより、ディスク装置360の性能が低い場合でも、キャッシュ800の性能によって、システムとしてのI/O性能を向上することができる。
本実施例では、ストレージプログラム700は、高い応答性能と高いスループット性能を実現するため、ポーリングでI/O処理を行う。
キャッシュ800は、ディスク装置360に書き込むデータまたはディスク装置360から読み出したブロックデータを一時的に格納するために用いられる。なお、図4の例では、キャッシュ800は、メモリ320の内部にあるが、実施形態がこれに限定されることはない。耐障害性の観点からストレージプログラム700とは別に、不揮発性の半導体メモリに格納されていてもよいし、キャッシュ800の一部として、半導体メモリより低速な記憶装置を用いてもよい。
キャッシュ管理表900は、キャッシュ800に格納されているブロックデータの状態を管理するテーブルである。例えば、キャッシュ800に格納されているブロックデータの、キャッシュ800上のアドレス、格納先ボリュームアドレス、およびデータサイズが格納されている。キャッシュ管理表900は、キャッシュ管理情報と呼ばれてもよい。
ボリューム管理表1000は、論理ボリューム340の情報を格納するテーブルである。例えば、各論理ボリューム340に関するボリューム番号、ボリューム属性、およびボリューム状態が格納されている。ボリューム管理表1000は、ボリューム管理情報と呼ばれても良い。
TIQ420は、ストレージプログラム700が通信ドライバプログラム500を介してI/O応答送信プログラム640へデータを送信する際、そのデータを記録しておくための領域である。TIQ420はFIFO(First In First Out)型のデータ構造を有する。
ITQ410は、I/O要求受信プログラム620が通信ドライバプログラム500を介してストレージプログラム700へデータを通信する際、そのデータを記録しておくための領域である。ITQ410はFIFO型のデータ構造を有する。
プロセス管理表1300は、サーバ200内で動作しているストレージプログラム700の情報を管理するテーブルである。プロセス管理表1300には、起動中のストレージプログラム700のプロセスIDと、そのストレージプログラム700が監視するキューペアのIDが格納される。
資源管理表1400は、サーバ200が有する資源を管理するためのテーブルである。資源管理表1400には、サーバ200内に接続されているHBA331のポート数、NIC332のポート数、メモリ320内のうち共有メモリ400として使用しているメモリ量、共有メモリ400として使用しているメモリ量のうち、キャッシュ800として使用しているメモリ量が格納される。
キューペア管理表1500は、共有メモリ400上に格納されているTIQ420とITQ410のペア(以後、単にキューペアと呼ぶ)を管理するテーブルである。キューペア管理表1500には、キューペアに格納される情報を識別するためのキューペアID、TIQ420の先頭アドレス、ITQ410の先頭アドレス、およびキューサイズが格納される。
ポリシ管理表1600は、キューペアを増減させるためのポリシを管理するテーブルである。ポリシ管理表1600には、どのような条件でキューペアを増加させるか、またどのような条件でキューペアを削減するかを定めたポリシが格納される。ポリシ管理表1600は、キューペア増減ポリシ管理情報と呼んでもよい。
キューペア監視プログラム1700は、定期的にプロセス管理表1300、資源管理表1400、キューペア管理表1500、およびポリシ管理表1600を監視し、状況に応じてキューペアの数を増減させるプログラムである。キューペア監視プログラム1700は、ストレージプログラム700の一部であってもよいし、ストレージプログラム700とは別のプログラムであってもよい。
図5は、計算機システム10の他の構成例を示す図である。図5に示すように、サーバ200でハイパーバイザ203が動作し、ハイパーバイザ203上で1または複数の仮想計算機202が稼働しても良い。仮想計算機202上で、OS600やストレージプログラム700、キューペア監視プログラム1700が動作してもよい。すなわち、図4に示す各プログラムは、物理計算機のハードウェア上で動作することもあれば、仮想計算機上で動作することもある。また、ホスト210は、仮想計算機上で動作するホストプログラムであってもよいし、物理的なホスト計算機であっても良い。OS600やストレージプログラム700、キューペア監視プログラム1700が動作する仮想計算機と、ホストプログラムが動作する仮想計算機とが、同一サーバ200上であっても、ネットワーク220を介して接続する異なるサーバ200上であってもよい。
図6は、Initiator−Targetキュー(ITQ)410の構成例を示す図である。図7は、Target−Initiatorキュー(TIQ)420の構成例を示す図である。
図6に示したITQ410は、先入れ先出し式すなわちFIFO型のデータ構造を有している。ITQ410には、I/O要求受信プログラム620がホスト210から受信したI/O要求が順番に詰め込まれる。
図7に示したTIQ420も、FIFO型のデータ構造を有している。TIQ420には、ストレージプログラム700が、I/O要求受信プログラム620から通信ドライバプログラム500を介して受信したI/O要求に対して返送するI/O応答が順番にエンキューされる。I/O応答は、I/O処理完了通知と呼んでも良い。
図6の例では、ITQ410には、2つのI/O要求が格納されている。I/O要求には、I/O要求の対象である論理ボリューム340のボリューム番号1110、I/O種別1120、ボリュームアドレス1130、データサイズ1140を示す情報が含まれていて良い。さらに、I/O種別1120がライトの場合、ライトデータが格納されたメモリ320のメモリアドレス1150を示す情報が含まれていて良い。例えば、図6によると、先に格納されたI/O要求は、対象のボリューム番号1110が「1」であり、I/O種別1120が「リード」であり、ボリュームアドレス1130が「0x100」であり、データサイズ1140が「0x100」である。後から格納されたI/O要求は、対象のボリューム番号1110が「2」であり、I/O種別1120が「ライト」であり、ボリュームアドレス1130が「0x3000」であり、データサイズ1140が「0x400」であり、メモリアドレス1150が「0x58000」である。I/O種別1120が「ライト」であるI/O要求をライト要求と呼んでも良い。I/O種別1120が「リード」であるI/O要求をリード要求と呼んでも良い。
図7の例では、TIQ420には、2つのI/O応答(I/O処理完了通知)が格納されている。I/O応答は、I/O応答の対象である論理ボリューム340のボリューム番号1210、I/O種別1215、ボリュームアドレス1220、データサイズ1225を示す情報が含まれていて良い。さらに、I/O種別1120がリードの場合、リードデータが格納されたメモリ320(キャッシュ800)のメモリアドレス1230を示す情報が含まれていて良い。先に格納されたI/O応答は、ボリューム番号1210が「1」であり、I/O種別1215が「リード」であり、ボリュームアドレス1220が「0x100」であり、データサイズ1225が「0x100」であり、メモリアドレス1230が「0x58000」である。後から格納されたI/O応答は、ボリューム番号1210が「2」であり、I/O種別1215が「ライト」であり、ボリュームアドレス1220が「0x300」であり、データサイズ1225が「0x400」である。
図8は、ボリューム管理表1000の構成例を示す図である。ボリューム管理表1000には、ストレージプログラム700が管理する論理ボリューム340の情報が記録される。例えば、ストレージプログラム700が論理ボリューム340を作成したときに、論理ボリューム340の情報をボリューム管理表1000に記録する。図8の例では、ボリューム管理表1000には、ストレージプログラム700が作成した論理ボリューム340の数だけ行がある。
ボリューム管理表1000には、論理ボリューム340の情報として、ボリューム番号1010、ボリューム状態1020、ボリュームサイズ1030、ボリュームアドレス1035、ディスク装置番号1040、ディスク装置アドレス1050、ストレージ機能1060が含まれる。
ボリューム番号1010には、論理ボリューム340を一意に識別するボリュームIDが格納される。ボリューム状態1020には、論理ボリューム340へのI/Oが可か不可かを示す情報が格納される。ここでは「I/O可」か「I/O不可」のいずれかが格納される。ボリュームサイズ1030には、論理ボリューム340の容量が格納される。
ボリュームアドレス1035には、論理ボリューム340上の論理アドレスが格納される。ディスク装置番号1040には、論理ボリューム340を構成するディスク装置360の識別子が格納される。ディスク装置アドレス1050は、ボリュームアドレス1035に対応づけられた物理的な記憶領域のアドレスであって、ディスク装置番号1040で識別されるディスク装置360上のアドレスが格納される。なお、図8の例では、ボリュームアドレス1035から所定サイズ(例えば「0x100」)の論理ボリューム340の論理的な記憶領域と、ディスク装置アドレス1050から所定サイズのディスク装置360の物理的な記憶領域と、を対応づけている。この所定サイズの大きさは図8の例に限定されるものではないし、必ずしも所定サイズ毎の固定長で管理しなくても良い。
ボリューム管理表1000は、論理ボリューム340の全ての記憶領域について、ディスク装置360の物理的な記憶領域と対応づけて、管理してもよい。または、論理ボリューム340のデータが格納されているディスク装置360の物理的な記憶領域と、論理ボリューム340の記憶領域との対応関係をボリューム管理表1000で管理しても良い。この場合、ストレージプログラム700は、残りの論理ボリューム340の記憶領域に対してライト要求があったときに、ディスク装置360の物理的な記憶領域を割り当て、その論理ボリューム340の記憶領域とディスク装置360の物理的な記憶領域との対応関係を、ボリューム管理表1000で管理しても良い。
ストレージ機能1060には、論理ボリューム340に適用されるストレージ機能が格納される。ストレージ機能の例として、スナップショットやRAIDなどがある。サーバ200がI/O要求を受信した場合に、ストレージプログラム700での処理が必要となる所定のストレージ機能を論理ボリューム340に適用している場合、ストレージ機能1060には、その旨を示す情報(例えばYes)を格納しても良い。
図8の例によると、ボリューム番号1010が「1」の論理ボリューム340は、ボリューム状態1020が「I/O可」であり、ボリュームサイズ1030が「1TB」であり、ストレージ機能1060としてRAID及びスナップショットを適用していることが示されている。
図9は、キャッシュ管理表900の構成例を示す図である。キャッシュ管理表900の各行には、ストレージプログラム700がキャッシュ800に格納したデータに関する情報が格納される。格納される情報には、ボリューム番号910、ボリュームアドレス920、データサイズ930、メモリアドレス940、データ状況950が含まれる。
キャッシュ管理表900には、キャッシュ800に格納されているデータの数だけ行がある。キャッシュ管理表900には、最大でキャッシュ800の容量分のデータを管理できるだけの容量がある。
ボリューム番号910には、キャッシュ800に格納されているデータについて、データが属する論理ボリューム340の、ボリューム管理表1000で管理されているボリュームIDが格納される。
ボリュームアドレス920には、キャッシュ800に格納されているデータについて、論理ボリューム340上でのアドレスが格納される。データサイズ930は、キャッシュ800に格納されているデータのサイズを示す。メモリアドレス940は、当該データについて、キャッシュ800上のアドレスを示す。
データ状況950には、キャッシュ800上のデータについて、ディスク装置360へライト済みを示す「クリーン」、ディスク装置360へライト未完了を示す「ダーティ」、ストレージプログラムの処理状況を示す「リード中」、もしくは「ライト中」が格納される。
図9には、キャッシュ800内に5つのデータが格納されている場合のキャッシュ管理表900が例示されている。例えば、ある行には、ボリューム番号910が「1」であり、ボリュームアドレス920が「0x100」であり、データサイズ930が「0x400」であり、メモリアドレス940が「0x0000」であり、データ状況950が「クリーン」であるデータが示されている。
図10は、プロセス管理表1300の構成例を示す図である。プロセス管理表1300の各行には、起動中(実行中)のストレージプログラム700の情報が格納される。格納される情報には、プロセスID1310およびキューペアID1320が含まれる。プロセス管理表1300には、ストレージプログラム700の起動中(実行中)のプロセス数だけ行がある。
プロセスID1310には、起動中(実行中)のストレージプログラム700のプロセスの識別子であるプロセスIDが格納される。キューペアID1320には、起動中のストレージプログラム700が使用するキューペアについての、キューペア管理表1500にて管理されているキューペアIDが格納される。
図10には、起動中のストレージプログラム700が2個の場合のプロセス管理表1300が例示されている。例えば、行1330には、プロセスID1310が「2000」であり、キューペアID1320が「1、2」である起動中のストレージプログラム700が示されている。
図11は、資源管理表1400の構成例を示す図である。資源管理表1400の各行には、サーバ200に接続されている資源に関する情報が示されている。資源には、メモリ320、HBA331、およびNIC332が含まれる。資源に関する情報には、各資源についての資源種別1410と資源量1420が含まれる。
資源管理表1400には、HBA331のポート種別数、NIC332のポート種別数、共有メモリ、キャッシュの数の合計数だけ行がある。
資源種別1410には、サーバ200に接続されているHBA331のポート種別、NIC332のポート種別、共有メモリ、キャッシュのいずれかが格納される。
資源量1420には、サーバ200に接続されているHBA331やNIC332のポート数や、共有メモリやキャッシュ800の容量が格納されている。
図11には、ポート種別がFCポートのHBA331と、ポート種別がEthernetポート(Ethernetは登録商標)のNIC332と、キャッシュ800とが示された資源管理表1400が例示されている。例えば、行1430には、資源種別1410が「FCポート」であり、資源量1420が「8」である資源の情報が格納されている。
図12は、キューペア管理表1500の構成例を示す図である。キューペア管理表1500の各行には、TIQ420およびITQ410のキューペアに関する情報が記録される。記録される情報には、キューペアID1510、TIQ格納先頭アドレス1520、ITQ格納先頭アドレス1530、キューサイズ1540、および操作可否1545が含まれる。
キューペア管理表1500には、TIQ420およびITQ410のキューペアの数だけ行がある。
キューペアID1510には、各キューペアに割り振られたIDが格納される。
TIQ格納先頭アドレス1520には、TIQ420が格納されているメモリ320上の先頭アドレスが格納される。
ITQ格納先頭アドレス1530には、ITQ410が格納されているメモリ320の先頭アドレスが格納される。
キューサイズ1540には、TIQ420およびITQ410のサイズが格納される。操作可否1545には、キューペアへの操作が可か不可を示す情報が格納される。ここでは「可」か「否」のいずれかが格納される。
図12には、キューペアが4個ある場合のキューペア管理表1500が例示されている。例えば、行1550には、キューペアID1510が「1」であり、TIQ格納先頭アドレスが「0x800000」であり、ITQ格納先頭アドレスが「0x880000」であり、キューサイズが「0x80000」であり、操作可否が「否」であるデータが格納されている。
図13は、ポリシ管理表1600の構成例を示す図である。ポリシ管理表1600の各行には、キューペアを増減させることを決める判定に用いるポリシの情報が格納される。ポリシの情報には、ポリシ項目1610、上限1620、および下限1630が含まれている。
本実施形態では、ポリシ項目1610には、「ストレージプログラムが処理担当するキューペア数」、「FCポート数」、「Ethernetポート数」、「キューペア使用メモリ量」がある。「ストレージプログラムが処理担当するキューペア数」に関しては上限と下限が、「FCポート数」、「Ethernetポート数」、および「キューペア使用メモリ」に関しては上限が設定できる。
例えば、行1640には、ポリシ項目1610が「ストレージプログラムが処理するキューペア数」であり、上限1620が「8」であり、下限1630が「1」であるポリシが設定されている。
キューペア増減の実行要否は、ストレージプログラム700の起動中のプロセス数、および各種資源の使用量と、それぞれの上限および下限とを比較することで決定される。ストレージプログラム700の起動中のプロセス数は、プロセス管理表1300から算出することができる。
各種資源として、FCポート数およびEthernetポート数、共有メモリ量およびキャッシュ量、およびキューペアが使用しているメモリ量がある。FCポート数およびEthernetポート数は資源管理表1400に記載されている。共有メモリ量およびキャッシュ量も資源管理表1400に記載されている。キューペアが使用しているメモリ量は、キューペア管理表1500から算出される。
各資源の上限および下限は、ポリシ管理表1600の各ポリシ項目1610の上限あるいは下限から得られる。
図14は、通信ドライバプログラム500のフローチャートである。CPUコア311は、I/O要求受信プログラム620からI/O要求の到着の通知を受信すると、通信ドライバプログラム500の処理を開始する。または、CPUコア311は、ストレージプログラム700がシステムコールを発行すると、通信ドライバプログラム500の処理を開始する(S3300)。
次に、CPUコア311は、通信ドライバプログラム500がI/O要求の到着の通知を受信したか否かの判定処理を行う(S3310)。
ステップS3310の判定で、I/O要求の到着の通知を受信していた場合(S3310:YES)、CPUコア311は、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340が所定のストレージ機能1060を使用しているか判定する(S3315)。ここで、所定のストレージ機能とは、サーバ200がI/O要求を受信した場合、ストレージプログラム700での処理が必要となるストレージ機能である。所定のストレージ機能は、事前に設定されていても良い。ストレージプログラム700が備える複数のストレージ機能のうちの一部が、所定のストレージ機能であっても良い。
ステップS3315の判定で、論理ボリューム340が所定のストレージ機能1060を使用していない場合(S3315:No)、CPUコア311は、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340のボリューム状態1020がI/O可か否か判定する(S3320)。
ステップS3320の判定で、論理ボリューム340のボリューム状態1020がI/O可である場合(S3320:YES)、CPUコア311は、I/O要求のI/O種別がリードであるかどうかを判定する(S3330)。
ステップS3330の判定で、I/O要求の種別がリードの場合(S3330:YES)、CPUコア311は、I/O要求の対象となっている論理ボリューム340のアドレスとデータサイズについて、キャッシュ800上にデータが存在するか否かを、キャッシュ管理表900を参照して判定する(S3340)。
ステップS3340の判定で、I/O要求対象の論理ボリューム340のアドレス範囲に対して、キャッシュ800上にデータが存在する場合(S3340:YES)、CPUコア311は、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するデータの書き込みを要求するライト要求が存在するか否かを判定する(S3350)。
ステップS3350の判定で、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するライト要求が存在しない場合(S3350:YES)、CPUコア311は、I/O処理完了通知(I/O応答)を発行する(S3360)。これは、図2のS3030においてNoの場合、すなわちCPUコア311がストレージプログラム700の処理が不要と判断した場合に該当し、I/O要求をITQ410にエンキューしないことで、ストレージプログラム700にI/O要求を通知しない。CPUコア311は、I/O応答送信プログラム640を呼び出し、リード対象のデータが存在するキャッシュ800のアドレス及びサイズを通知する。CPUコア311は、ステップS3360の処理が完了次第、通信ドライバプログラム500の処理を終了する(S3400)。
ステップS3315の判定において、所定のストレージ機能を使用している場合(S3315:YES)、I/O要求の対象となる論理ボリューム340がストレージプログラム700での処理が必要となるストレージ機能を使用しているので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
ステップS3320の判定において、論理ボリューム340のボリューム状態1020がI/O不可である場合(S3320:NO)、論理ボリューム340が障害状態である可能性や、フォーマット中である可能性があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
ステップS3330の判定において、I/O種別がリードでない場合(S3330:NO)、例えばI/O種別がライトである場合、キャッシュ操作処理や、RAID等のストレージ機能を使用する(または使用する可能性がある)ので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
ステップS3340の判定において、I/O要求対象のボリュームアドレス範囲についてキャッシュ800上にデータが存在しない場合(S3340:NO)、ストレージプログラム700によりディスク装置360からのデータ読み出しまたはデータ書き込みが必要となる可能性があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
ステップS3350の判定において、ITQ410内に、I/O要求対象の論理ボリューム340のアドレス範囲に対するライト要求が存在する場合(S3350:NO)、ストレージプログラム700で当該先行するライト要求を処理した後に、今回のI/O要求(リード要求)を処理する必要があるので、CPUコア311は、ITQ410にI/O要求をエンキューする(S3370)。
I/O要求がITQ410にエンキューされると、ストレージプログラム700の処理が必要な状態になる。CPUコア311は、ステップS3370の処理が完了次第、通信ドライバプログラム500を終了する(S3400)。
S3310の判定で、I/O要求を受信していない場合(S3310:NO)、すなわちシステムコールに通信ドライバプログラム500が呼び出された場合、CPUコア311は、TIQ420から、I/O応答をデキューする(S3380)。
次に、CPUコア311は、I/O応答を、I/O応答送信プログラム640に通知する(S3390)。CPUコア311は、ステップS3390の処理が完了次第、通信ドライバプログラム500を終了する(S3400)。
以上、ステップS3300からS3400で処理を完了する。なお、図14に示す各判断ステップS3310、S3315、S3320、S3330、S3340、S3350について、一部のステップの順序を変更しても、一部のステップを省略してもよい。
OS600は、S3315において、ホスト210から論理ボリューム340に対するI/O要求を受信した場合、ボリューム管理表1000を参照して、I/O要求の対象となる論理ボリューム340に適用されるストレージ機能1060の情報に基づいて、ストレージプログラム700によるI/O要求の処理が必要か否かを判定する。ストレージプログラム700によるI/O要求の処理が必要と判定した場合、キューペアを介してストレージプログラム700と通信する。ストレージプログラム700では、I/O要求に基づく処理が実行される。一方、OS600は、ストレージプログラム700によるI/O要求の処理が必要でないと判定した場合、ホスト210へI/O要求に対する応答を実行する。ストレージプログラム700をOS600上で動作させつつ、I/O性能の低下を抑え、I/O性能を維持または向上することを可能にする。
ストレージプログラム700は、データをキャッシュ800に書き込んだ後に記憶デバイス(ディスク装置360)にデステージする。I/O応答送信プログラム640は、データ出力の要求を受けると、その要求の対象のデータがキャッシュ800に存在すればキャッシュ800のデータを出力する。一方、その要求の対象のデータがキャッシュ800に存在しなければ、I/O応答送信プログラム640は、その要求をITQ410を介してストレージプログラム700に通知する。これによれば、キャッシュ800によりデータ出力の処理を高速化する構成において、キャッシュ800にデータが存在するとき、通信ドライバプログラム500が、キューペアを用いた通信およびストレージプログラム700の処理を介さず、データ出力の処理を迅速に完了させることができる。
図15は、ストレージプログラム700のフローチャートである。CPUコア311は、サーバ200の起動時に、図15に示す処理を開始する(S3500)。CPUコア311は、まず、プロセス管理表1300を参照し、実行しているストレージプログラム700のプロセスが担当となっているキューペアの中から処理対象とするキューペアを1つ選択する。キューペアの選択方法は限定されないが、例えばラウンドロビンで複数のキューペアから順番に1つずつ選択するという方法が挙げられる。
次にCPUコア311は、キューペア管理表1500を参照し、選択した処理対象のキューペアが操作可能な状態かどうか(操作可否1545)を判定する(S3505)。処理対象のキューペアが操作不可の場合(S3505:NO)、CPUコア311は再度ステップS3500に戻って処理をやり直す。
処理対象のキューペアが操作可能な場合(S3505:YES)、CPUコア311は、ITQ410にエントリがあるかどうかを判定する(S3510)。
S3510の判定で、ITQ410にエントリがない場合(S3510:NO)、CPUコア311はステップS3500に戻る。一方、S3510の判定で、ITQ410にエントリがある場合(S3510:YES)、CPUコア311は、ITQ410からI/O要求をデキューする(S3520)。
次に、CPUコア311は、ITQ410からデキューしたI/O要求の対象となっている論理ボリューム340に対して、テスト用コマンドを発行し、論理ボリューム340へのI/Oが可能かどうか判定する処理を行う(S3530)。S3530の判定で、論理ボリューム340へのI/Oが不可の場合(S3530:NO)、CPUコア311は、TIQ420へ、I/O応答としてエラー応答をエンキューする(S3590)。
S3530の判定で、論理ボリューム340へのI/Oが可能の場合(S3530:YES)、CPUコア311は、図16のキャッシュ操作処理を行う(S3535)。次に、CPUコア311は、ITQ410からデキューしたI/O要求のI/O種別がリードかどうかを判定する(S3540)。
S3540の判定で、I/O種別が「リード」である場合(S3540:YES)、CPUコア311は、I/O要求の対象の論理ボリューム340のデータをディスク装置360からキャッシュ800へ転送する(S3570)。次に、CPUコア311は、キャッシュ管理表900における、I/O要求の対象の論理ボリューム340のデータ状況950を「クリーン」に更新する(S3580)。
S3540の判定で、I/O種別が「リード」でない場合(S3540:NO)、CPUコア311は、I/O要求に基づき、キャッシュ800にデータをライトする(S3620)。次に、CPUコア311は、キャッシュ管理表900における、I/O要求の対象の論理ボリューム340のデータ状況950を「ダーティ」に更新する(S3580)。
次に、CPUコア311は、TIQ420へ、I/O応答をエンキューする(S3590)。CPUコア311は、システムコールを発行し、TIQ420へのエンキューを行ったことを通信ドライバプログラム500へ通知する(S3600)。ステップS3600の処理が終了次第、CPUコア311はステップS3500へ戻る。
以上、ステップS3500からS3620でストレージプログラム700の処理を実行する。
図16は、ストレージプログラム700におけるS3535のキャッシュ操作処理のフローチャートである。
CPUコア311は、キャッシュ800に空き領域があるかどうかを、キャッシュ管理表900を用いて判定する(S3730)。
ステップS3730の判定において、キャッシュ800に空き領域がある場合(S3730:YES)、CPUコア311は、空き領域を使用するために、キャッシュ管理表900の空き領域を示す行の情報を更新し、使用する領域を示す行を追加することにより、キャッシュ管理表900を更新する(S3780)。
ステップS3730の判定において、キャッシュ800に空き領域がない場合(S3730:NO)、CPUコア311は、更にキャッシュ管理表900を参照し、キャッシュ800上にクリーンデータがあるかどうかを判定する(S3740)。
ステップS3740の判定において、クリーンデータが存在する場合(S3740:YES)、CPUコア311はキャッシュ800上のクリーンデータを破棄する(S3750)。
次に、CPUコア311は、破棄したクリーンデータに該当するキャッシュ管理表900上の行を削除し、その領域を空き領域として使用するために、キャッシュ管理表900を更新する(S3780)。
ステップS3740の判定において、クリーンデータが存在しない場合(S3740:NO)、CPUコア311は、キャッシュ管理表900からダーティデータを示す行を1つ選択し、選択した行のデータ状況950に「ライト中」を付加し、キャッシュ800上の当該データをディスク装置360へ書き込む(S3770)。
次に、CPUコア311は、キャッシュ管理表900上のディスク装置360に書き込んだデータに該当する行のデータ状況950を「クリーン」へ更新し、当該領域を空き領域として使用するために、キャッシュ管理表900を更新する(S3780)。
以上により、キャッシュ操作処理を完了する。
図17は、複数のキューペアが存在するサーバ200の構成例を示す図である。図1のサーバ200にはキューペアが1組のみ記載されているが、図17のように、サーバ200にキューペアが複数存在してもよい。ストレージプログラム700の各プロセスは1または複数のキューペアを使用してもよい。また、キューペアは動的に増減させても良い。
図18は、キューペア監視プログラム1700のフローチャートである。CPUコア311は、サーバ200の起動時に、図18に示す処理を開始する(S4000)。
CPUコア311は、I/O要求受信プログラム620からストレージプログラム700への通信データを保持するITQ410と、ストレージプログラム700からI/O応答送信プログラム640への通信データを保持するTIQ420とを対として用い、そのキューペアの個数を制御する。
その際、CPUコア311は、キューペアに関連する資源の使用量に基づいてキューペアの個数を制御する。ここでは資源の例として、ストレージプログラム700が処理するキューペア数、FCポート数、Ethernetポート数、およびキューペア使用メモリ量がある。キューペアに関連する資源の使用量に基づいてキューペアの個数を制御するので、資源の使用量を適切な範囲に維持することができる。
また、キューペアの個数には上限数と下限数が定められ、CPUコア311は、キューペアの個数が下限数を下回ったらキューペアを増加させ、キューペアの個数が上限数を超えたらキューペアを削減する。これによれば、キューペアの個数を状況に応じて増減制御するとともに、上限と下限の間の適切な範囲に維持することができる。
CPUコア311は、ポリシ管理表1600を読み込む。このポリシ管理表1600は、キューペアの個数の制御に用いるポリシを表わすキューペア増減ポリシ管理情報である。管理端末240は、キューペア増減ポリシ管理情報を画面表示し、入力操作により更新する。サーバ200は、管理端末240からキューペア増減ポリシ管理情報(ポリシ管理表1600)を取得してもよい。
CPUコア311は、以下に示すように、キューペア増減ポリシ管理情報を参照してキューペアの個数を制御する。これにより、キューペアの増減制御の条件をユーザの所望により設定したり変更したりすることができる。
CPUコア311は、資源管理表1400、キューペア管理表1500、プロセス管理表1300を読み込む。CPUコア311は、ポリシ管理表1600において、ストレージプログラムが処理するキューペア数に関するポリシを記述した行1640における下限値と、処理すべきキューペア数を意味するキューペア管理表1500の行数とを比較し、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っているか否か判定する(S4050)。
ステップS4050の判定で、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っていた場合(S4050:YES)、つまり、キューペア数がポリシ上の下限値を下回っていた場合、CPUコア311は、キューペア増加処理を実行する(S4060)。その後、CPUコア311はスリープ処理を実行する(S4090)。
ステップS4050の判定で、ポリシ管理表1600の行1640の下限値がキューペア管理表1500の行数を上回っていた場合(S4050:NO)、つまり、キューペア数がポリシ上の下限値を下回っていない場合、CPUコア311は、S4070において、キューペア管理表1500の行数(キューペア数)と、プロセス管理表1300の行数(起動中のストレージプログラム700のプロセス数)とを比較する。更に、CPUコア311は、同じS4070において、ポリシ管理表1600の行1640、行1650、および行1660の各上限値と、キューペア管理表1500の行数とを比較する。更に、CPUコア311は、同じS4070において、ポリシ管理表1600の行1670の上限値と、キューペア管理表1500から算出されるキューサイズ合計値とを比較する。
S4070において、キューペア管理表1500から算出される行数が、ポリシ管理表1600の行数の上限値を超えている場合、もしくはキューペア管理表1500から算出されるキューサイズ合計値が、ポリシ管理表1600のキューペア使用メモリ量の上限値を超えている場合(S4070:YES)、つまり、キューペア数がポリシ上の上限値を上回っている場合、CPUコア311は、キューペア削減処理を実行する(S4080)。
同一のキューを複数のプロセスで共有して使用する場合、あるプロセスがキューを操作している間は他のプロセスがキューを操作できないという制約が生じる。このようなキュー操作の競合により高スループットの達成が妨げられる。それに対して、本実施形態では、CPUコア311は、ストレージ処理を実行するプロセスの個数に応じてキューペアの個数を制御する。そのため、キューペアの個数が過剰になり、キューの状況を確認するキューチェック処理の負担が増えるのを抑制する一方で、キュー操作の競合を低減してスループットの低下を抑制することができる。
キューペア管理表1500から算出される行数が、ポリシ管理表1600の行数の上限値を超えておらず、かつキューペア管理表1500から算出されるキューサイズ合計値が、ポリシ管理表1600のキューペア使用メモリ量の上限値を超えていない場合(S4070:NO)、つまり、キューペア数がポリシ上の上限値を上回っていない場合、CPUコア311は、一度処理の停止(スリープ処理)を行う(S4090)。
また、ステップS4060またはステップS4080の処理が終了した場合も、CPUコア311は、スリープ処理を行う(S4090)。
ステップS4090においてCPUコア311がスリープする時間は、ここでは一例として10秒である。ただし、実施形態がそれに限定されることはない。他の例として、1秒でも1分でもよい。または、スリープ時間は可変であってもよい。
次にCPUコア311は、ステップS4090のスリープ完了後、ステップS4010に戻り、再びステップS4000からS4090まで処理を繰り返し実行する。
本実施形態のように、ストレージ処理をOSカーネル610の一部ではなくOS600上で動作するプログラムにすると、ストレージプログラム700の可搬性が向上し、開発効率が高まる一方で、ストレージプログラム700はOS600とは別個独立に動作することとなり、ストレージプログラム700からOSカーネル610への通信が増大する。そこで、本実施形態では、通信データの消失を抑えかつ効率よく処理するために、OSカーネル610からストレージプログラムへの方向だけでなく、ストレージプログラム700からOSカーネル610への方向にも待ち行列を保持するキューを配置する。両方向にキューを用いることにより、高いスループット性能を実現することができる。
ストレージプログラム700からOSカーネル610への通信は、その前に発生したOSカーネル610からストレージプログラム700へ要求を伝達する通信に対する応答であるため、どちらか一方の通信のスループットが低下すれば、それがボトルネックとなってストレージ処理全体のスループットが低下してしまう。しかし、本実施形態では、両方向にキューを用いているので、ストレージ処理全体を高いスループットに維持することが可能である。
また、ストレージプログラム700からOSカーネル610への通信は、その前に発生したOSカーネル610からストレージプログラム700へ要求を伝達する通信に対する応答であるため、本実施形態では更に、OSカーネル610からストレージプログラム700への通信データを保持するキューとストレージプログラムからOSカーネル610への通信データを保持するキューをペアにし、それらの個数を連動するように制御することにより、制御を効率化している。
図19は、キューペア監視プログラム1700におけるキューペア増加処理(S4060)のフローチャートである。CPUコア311は、キューペア監視プログラム1700から呼び出された場合、図19に示す処理を開始する(S4200)。
CPUコア311は、まず、ポリシ管理表1600における各行に示された上限値のうちで最小のものを算出する。このとき、行1670(キューペア使用メモリ量)については、行1670(キューペア使用メモリ量)の上限値をキューペア管理表1500の先頭行のキューサイズの2倍で割った商を求めることにより、上限値をキューペア数に換算する。
ステップS4210では、そのキューペア数に換算したキューペア使用メモリ量の上限値を他の行1640、1650、1660の上限値と比較する。そして、CPUコア311は、算出した上限値の最小値と、キューペア管理表1500の行数で表わされる現在のキューペア数との差分を算出し、その差分をキューペアの増加数とする。
次にCPUコア311は、S4210で算出したキューペア増加数とキューサイズの積と、キャッシュ管理表900の空き容量とを比較し、空き容量が、キューペア増加分の総キューサイズを上回っているかどうかを判定する(S4220)。
ステップS4220の判定において、空き容量が、キューペア増加分の総キューサイズを上回っている場合(S4220:YES)、CPUコア311は、キャッシュ管理表900の空き容量をキューペア増加分だけ減らした値に更新する(S4230)。空き容量が、キューペア増加分の総キューサイズを下回っている場合(S4220:NO)、CPUコア311は、キャッシュ操作処理を実施し(S4270)、キャッシュ800の空き容量を増加させる。
次にCPUコア311は、S4210で算出した、キューペアの増加数だけキューペアを作成する(S4240)。
次にCPUコア311は、追加したキューペアの情報でキューペア管理表1500を更新する(S4250)。
次にCPUコア311は、プロセス管理表1300に追加したキューペアのIDを追加する(S4260)。ステップS4260の処理が完了したら、CPUコア311はキューペア増加処理を終了する。
以上のように、CPUコア311は、キューペアを増加するとき、資源の使用量の上限量をキューペアの個数の上限数と互いに比較が可能なように変換する。更に、CPUコア311は、上限量を変換した上限数とキューペアの個数の上限数のうちの最小の上限数を求める。さらに、CPUコア311は、求めた上限数と現在のキューペアの個数との差分をキューペアの増加数と決定する。これにより、資源の使用量の上限量を上限数と比較できるように個数で表わした上限数に変換するので、個数による比較的容易な演算により、各値を制限の範囲内に維持しつつキューペアの個数を適切な個数に増加させることができる。
図20は、キューペア監視プログラム1700におけるキューペア削減処理(S4080)のフローチャートである。CPUコア311は、キューペア監視プログラム1700から呼び出された場合に、図20の処理を開始する(S4400)。
CPUコア311は、ポリシ管理表1600の各行の上限値のうちで、最小のものを算出する(S4410)。このとき、行1670(キューペア使用メモリ量)については、行1670(キューペア使用メモリ量)の上限値をキューペア管理表1500の先頭行のキューサイズの2倍で割った商を求めることにより、上限値をキューペア数に換算する。ステップS4410では、そのキューペア数に換算したキューペア使用メモリ量の上限値を他の行1640、1650、1660の各上限値と比較する。そして、CPUコア311は、算出した最小値と現在のキューペア数との差分をキューペアの削減数とする。
次にCPUコア311は、キューペア管理表1500とキャッシュ管理表900を参照し、キャッシュ800の領域に最も近い側から順に、キューペア削減数分だけキューペアを選択する(S4420)。
なお、本実施形態では、共有メモリ400が複数個ある場合、CPUコア311は、キューペアを作成するとき、可能であれば、キャッシュ800が配置されているものと同じ共有メモリ400にキューペアを配置することとする。そして、このステップS4420においては、CPUコア311は、キャッシュ800が配置されているのと同じ共有メモリ400に配置されているキューペアを選択するようにする。
次にCPUコア311は、ステップS4420で選択したキューペアについて、キューペア管理表1500の操作可否1545の設定を更新し、キューペアの操作を禁止する(S4430)。
次にCPUコア311は、選択したキューペア内に存在するエントリを他のキューペアへ移動させる(S4440)。選択したキューペアが空になると、次にCPUコア311は、選択したキューペアを削除する(S4450)。次にCPUコア311は、削除したキューペアに関する情報をキューペア管理表1500から削除する(S4460)。次にCPUコア311は、プロセス管理表1300のキューペアID1320から、削除したキューペアのIDを削除する(S4470)。
最後にCPUコア311は、キャッシュ管理表900の空き容量の情報を更新して処理を終了する(S4480)。
上述したように、共有メモリ400上にキャッシュ800が配置されている場合、CPUコア311は、キューペアを削除するとき、キャッシュ800の領域に最も近いキューペアを削除する。これによれば、キューペアを削除するときにキャッシュ800の領域に最も近いキューペアを削除するので、キューペア削除でできる空き領域を効率よくキャッシュ800に利用できる位置に作成することができる。
また、CPUコア311は、キューペアを削減するとき、資源の使用量の上限量をキューペアの個数の上限数と互いに比較が可能なように変換する。さらに、CPUコア311は、その上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求める。さらにCPUコア311は、求めた上限数と現在のキューペアの個数との差分をキューペアの削減数と決定する。資源の使用量の上限量を上限数と比較できるように個数に変換するので、個数による比較的容易な演算により、各値を制限の範囲内に維持しつつキューペアの個数を適切に削減することができる。
図21は、システム設定を管理するGUI(Graphical User Interface)の一例を示す図である。管理端末240が有するCPUで実行される管理プログラムは、システム設定を行うためのGUI1900をシステム管理者に提供する。システム管理者は、GUI1900を用いてサーバ200へシステム設定に関する指示を入力する。
GUI1900は、キューペア数増減ポリシを設定するためのGUIであり、キューペア数増減ポリシ設定部1910、更新ボタン1930、キャンセルボタン1940を含む。
キューペア数増減ポリシ設定部1910は、サーバ200に格納しているポリシ管理表1600の情報を表示するため、あるいはサーバ200に格納するポリシ管理表1600の情報をシステム管理者に設定させるための部位である。ポリシ項目1610で示された、ストレージプログラムが処理するキューペア数、FCポート数、Ethernetポート数、およびキューペア使用メモリ量について、上限1620と下限1630には、現在設定されている値が表示され、かつその値が編集可能となっている。ポリシ項目1610とその上限1620及び下限1630のそれぞれの意味はポリシ管理表1600におけるそれぞれの意味と同じである。
システム管理者が、キューペア数増減ポリシ設定部1910を編集し、更新ボタン1930を押すと、管理端末240からサーバ200へ更新内容が通知される。更新内容を受け取ったサーバ200は、受け取った更新内容に従って、ポリシ管理表1600の内容を更新する。
システム管理者がキャンセルボタン1940を押すと、管理端末240は、システム設定を終了し、GUI1900を閉じる。
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
10 計算機システム、200 サーバ、210 ホスト、220 ネットワーク、240 管理端末、310 CPU、311 CPUコア、320 メモリ、331 HBA、332 NIC、340 論理ボリューム、351 SSD、352 HDD、360 ディスク装置、400 共有メモリ、410 Initiator−Targetキュー(ITQ)、420 Target−Initiatorキュー(TIQ)、500 通信ドライバプログラム、600 OS、610 OSカーネル、620 I/O要求受信プログラム、640 I/O応答送信プログラム、700 ストレージプログラム、800 キャッシュ、900 キャッシュ管理表、1000 ボリューム管理表、1300 プロセス管理表、1400 資源管理表、1500 キューペア管理表、1600 ポリシ管理表、1700 キューペア監視プログラム

Claims (13)

  1. オペレーティングシステムと、前記オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサと、
    前記オペレーティングシステムと前記ストレージプログラムとの通信データを保持するキューと、前記ストレージプログラムが提供する前記論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリと、を備え、
    前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するI/O要求を受信した場合、前記ボリューム管理情報を参照して、前記I/O要求の対象となる前記論理ボリュームに適用されるストレージ機能の情報に基づいて、前記ストレージプログラムによる前記I/O要求の処理が必要か否かを判定し、必要と判定した場合、前記キューを介して前記ストレージプログラムと通信し、
    前記ストレージプログラムは、前記I/O要求に基づく処理を実行し、
    前記オペレーティングシステムは、前記ストレージプログラムによる前記I/O要求の処理が必要でないと判定した場合、前記ホストへ前記I/O要求に対する応答を実行する、
    計算機システム。
  2. 前記メモリは、前記論理ボリュームのデータを一時的に格納するキャッシュと、前記キャッシュ上のデータを管理するキャッシュ管理情報と、を有し、
    前記プロセッサにより実行される前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するライト要求を受信した場合、前記キューを介して前記ストレージプログラムと通信し、
    前記プロセッサにより実行される前記ストレージプログラムは、前記ライト要求に基づく処理を実行し、
    前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するリード要求を受信した場合、前記キャッシュ管理情報を参照して、前記キャッシュ上に前記リード要求に対応するデータが存在すると判定したとき、前記キャッシュ上に存在するデータに基づき、前記ホストへ前記リード要求に対する応答を実行する、
    請求項1に記載の計算機システム。
  3. 前記プロセッサにより実行される前記オペレーティングシステムは、前記リード要求の対象となる前記論理ボリュームのアドレス範囲を対象とするライト要求が、前記キューに存在する場合、前記キューを介して前記ストレージプログラムと通信し、
    前記プロセッサにより実行される前記ストレージプログラムは、前記リード要求に基づく処理を実行し、
    前記オペレーティングシステムは、前記リード要求の対象となる前記論理ボリュームのアドレス範囲を対象とするライト要求が、前記キューに存在しない場合、前記リード要求に対する前記応答を実行する、
    請求項2に記載の計算機システム。
  4. 前記プロセッサは、前記オペレーティングシステムから前記ストレージプログラムへの通信データを保持する第1キューと、前記ストレージプログラムから前記オペレーティングシステムへの通信データを保持する第2キューとを対として用い、前記第1キューと前記第2キューの対であるキューペアの個数を制御する、
    請求項3に記載の計算機システム。
  5. 前記プロセッサは、前記ストレージプログラムのプロセスの個数に応じて、前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  6. 前記プロセッサは、前記キューペアに関連する資源の使用量に基づいて、前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  7. 前記ストレージプログラムと前記オペレーティングシステムが共有する前記メモリの領域上に前記キャッシュ及び前記キューペアが配置され、
    前記プロセッサは、前記キューペアを削除するとき、前記キャッシュの領域に最も近いキューペアを削除する、
    請求項4に記載の計算機システム。
  8. 前記キューペアの個数には上限数と下限数が定められ、
    前記プロセッサは、前記キューペアの個数が前記下限数を下回ったら前記キューペアを増加させ、前記キューペアの個数が前記上限数を超えたら前記キューペアを削減する、
    請求項4に記載の計算機システム。
  9. 前記資源の使用量には上限量が設定されており、
    前記プロセッサは、キューペアを増加するとき、前記資源の使用量の前記上限量を前記キューペアの個数の上限数と互いに比較が可能なように変換し、前記上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求め、求めた前記上限数と現在の前記キューペアの個数との差分を前記キューペアの増加数と決定する、
    請求項6に記載の計算機システム。
  10. 前記資源の使用量には上限量が設定されており、
    前記プロセッサは、キューペアを削減するとき、前記資源の使用量の上限量を前記キューペアの個数の上限数と互いに比較が可能なように変換し、前記上限量を変換した上限数と前記キューペアの個数の上限数のうちの最小の上限数を求め、求めた前記上限数と現在の前記キューペアの個数との差分を前記キューペアの削減数と決定する、
    請求項6に記載の計算機システム。
  11. 前記プロセッサは、前記キューペアの個数の制御に用いるポリシを表わすキューペア増減ポリシ管理情報を画面表示し入力操作により更新する管理計算機から、該キューペア増減ポリシ管理情報を取得し、該キューペア増減ポリシ管理情報を参照して前記キューペアの個数を制御する、
    請求項4に記載の計算機システム。
  12. オペレーティングシステムと、前記オペレーティングシステム上で動作しホストに論理ボリュームを提供するストレージプログラムと、を実行するプロセッサと、
    前記オペレーティングシステムと前記ストレージプログラムとの通信データを保持するキューと、前記ストレージプログラムが提供する前記論理ボリュームに適用されるストレージ機能の情報を含むボリューム管理情報と、を有するメモリと、を備え、
    前記オペレーティングシステムは、前記ホストから前記論理ボリュームに対するI/O要求を受信した場合、前記ボリューム管理情報を参照して、前記I/O要求の対象となる前記論理ボリュームに適用されるストレージ機能の情報に基づいて、前記ストレージプログラムによる前記I/O要求の処理が必要か否かを判定し、必要と判定した場合、前記キューを介して前記ストレージプログラムと通信し、
    前記ストレージプログラムは、前記I/O要求に基づく処理を実行し、
    前記オペレーティングシステムは、前記ストレージプログラムによる前記I/O要求の処理が必要でないと判定した場合、前記ホストへ前記I/O要求に対する応答を実行する、
    計算機。
  13. 前記ホストは、前記プロセッサにより実行されるホストプログラムである、
    請求項12の計算機。

JP2017562396A 2016-01-22 2016-01-22 計算機システム、計算機 Active JP6524267B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2016/051788 WO2017126097A1 (ja) 2016-01-22 2016-01-22 計算機システム、計算機

Publications (2)

Publication Number Publication Date
JPWO2017126097A1 true JPWO2017126097A1 (ja) 2018-09-27
JP6524267B2 JP6524267B2 (ja) 2019-06-05

Family

ID=59362552

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017562396A Active JP6524267B2 (ja) 2016-01-22 2016-01-22 計算機システム、計算機

Country Status (4)

Country Link
US (1) US10740040B2 (ja)
JP (1) JP6524267B2 (ja)
CN (1) CN108292278B (ja)
WO (1) WO2017126097A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102536637B1 (ko) * 2018-03-29 2023-05-26 에스케이하이닉스 주식회사 메모리 컨트롤러 및 그 동작 방법
US12001355B1 (en) * 2019-05-24 2024-06-04 Pure Storage, Inc. Chunked memory efficient storage data transfers

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009223793A (ja) * 2008-03-18 2009-10-01 Fujitsu Ltd 情報処理装置、情報処理装置の制御方法及びコンピュータプログラム
JP2015022553A (ja) * 2013-07-19 2015-02-02 株式会社日立製作所 計算機の制御方法及び計算機

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4480479B2 (ja) 2004-06-15 2010-06-16 株式会社日立製作所 ストレージシステム
US8868831B2 (en) * 2009-09-14 2014-10-21 Oracle International Corporation Caching data between a database server and a storage system
CN101441655B (zh) * 2008-12-24 2011-01-19 深圳市迅雷网络技术有限公司 读取数据的方法及装置
JP4585599B1 (ja) * 2009-07-17 2010-11-24 株式会社東芝 データ記憶装置及びキャッシュ制御方法
CN102117184B (zh) * 2010-01-05 2017-06-27 联想(北京)有限公司 用于多存储器的控制器、终端设备及其启动和访问方法
US8595522B2 (en) * 2010-09-30 2013-11-26 Intel Corporation Monitoring transaction requests using a policy engine within a storage drive driver to change power capability and latency settings for a storage drive
US8788742B2 (en) * 2011-05-23 2014-07-22 International Business Machines Corporation Using an attribute of a write request to determine where to cache data in a storage system having multiple caches including non-volatile storage cache in a sequential access storage device
WO2014015409A1 (en) * 2012-07-24 2014-01-30 Institute Of Computer Science Of The Foundation For Research And Technology - Hellas (Ics-Forth) System and method for implementing ssd-based i/o caches
CN103823636B (zh) * 2012-11-19 2017-04-05 苏州捷泰科信息技术有限公司 Io调度方法及装置
US10884924B2 (en) * 2015-03-04 2021-01-05 Hitachi, Ltd. Storage system and data writing control method

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009223793A (ja) * 2008-03-18 2009-10-01 Fujitsu Ltd 情報処理装置、情報処理装置の制御方法及びコンピュータプログラム
JP2015022553A (ja) * 2013-07-19 2015-02-02 株式会社日立製作所 計算機の制御方法及び計算機

Also Published As

Publication number Publication date
US20180314466A1 (en) 2018-11-01
JP6524267B2 (ja) 2019-06-05
CN108292278B (zh) 2021-02-26
US10740040B2 (en) 2020-08-11
CN108292278A (zh) 2018-07-17
WO2017126097A1 (ja) 2017-07-27

Similar Documents

Publication Publication Date Title
US11070479B2 (en) Dynamic resource allocation based upon network flow control
US7593948B2 (en) Control of service workload management
US8930746B1 (en) System and method for LUN adjustment
US10169948B2 (en) Prioritizing storage operation requests utilizing data attributes
JP7105870B2 (ja) データアクセス方法、装置およびシステム
US7797487B2 (en) Command queue loading
JP2007179156A (ja) 記憶制御装置及び方法
US8856400B1 (en) I/O performance quotas
US8205014B2 (en) Information apparatus and method of generating tuning plan for resource configuration of storage system
US8713266B2 (en) Storage apparatus and method including page discard processing for primary and secondary volumes configured as a copy pair
US8904119B2 (en) Method and structures for performing a migration of a logical volume with a serial attached SCSI expander
JP2019095971A (ja) ストレージシステム、ストレージ制御装置およびプログラム
US11762583B2 (en) System and method for selectively throttling commands within a storage system
US11972148B2 (en) Proactive storage operation management using thermal states
CN108205478B (zh) 智能序列式小型计算机系统接口物理层功率管理
JP6524267B2 (ja) 計算機システム、計算機
US9990148B2 (en) Storage control device and storage system for data backup
US8966173B1 (en) Managing accesses to storage objects
JP2023142021A (ja) ネットワークインタフェース及びそのバッファ制御方法
US11481147B1 (en) Buffer allocation techniques
US10101940B1 (en) Data retrieval system and method
US9658803B1 (en) Managing accesses to storage
US11880589B2 (en) Storage system and control method
JP7163672B2 (ja) ストレージ管理装置、性能調整方法及び性能調整プログラム
US20150143041A1 (en) Storage control apparatus and control method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180601

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190426

R150 Certificate of patent or registration of utility model

Ref document number: 6524267

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350