(57)【要約】【課題】複数のエレメントに分割されたリクエスト情報の処理を効率良く実行できるインターフェース制御装置を提供することにある。【解決手段】本実施形態によれば、インターフェース制御装置は、インターフェースと、コントローラとを具備する。前記インターフェースは、ホストとデータ記憶装置間における情報の転送を行なう。前記コントローラは、前記インターフェースを介して、前記ホスト側に設けられたキュー手段の格納単位であるエレメントから前記データ記憶装置に対する処理要求を指示するリクエスト情報を取り出す場合に、複数のエレメントに分割されて格納されている第１のリクエスト情報を前記第１のリクエスト情報とは異なる第２のリクエスト情報に対して優先的に取り出すリード要求処理を実行する。【選択図】図１
2014142757.tif 000002
【特許請求の範囲】
【請求項１】
ホストとデータ記憶装置間における情報の転送を行なうためのインターフェース手段と、
前記インターフェース手段を介して、前記ホスト側に設けられたキュー手段の格納単位であるエレメントから前記データ記憶装置に対する処理要求を指示するリクエスト情報を取り出す場合に、複数のエレメントに分割されて格納されている第１のリクエスト情報を前記第１のリクエスト情報とは異なる第２のリクエスト情報に対して優先的に取り出すリード要求処理を実行する制御手段と
を具備するインターフェース制御装置。
【請求項２】
前記制御手段は、
前記キュー手段から前記リクエスト情報を前記エレメント単位で取り出すためのリード要求を前記ホスト側に転送する場合に、
前記第１のリクエスト情報を構成する複数のエレメントの中で未取得の残りエレメントから取り出すためのリード要求を、単一エレメントから前記第２のリクエスト情報を取り出すためのリード要求に対して優先する請求項１に記載のインターフェース制御装置。
【請求項３】
前記制御手段は、
前記第１のリクエスト情報をエレメント単位で取り出すためのリード要求を格納する第１のバッファ手段と、
前記第２のリクエスト情報をエレメント単位で取り出すためのリード要求を格納する第２のバッファ手段と、
前記第１のバッファ手段に前記残りエレメントを取り出すためのリード要求が格納されている場合に、優先的に前記第１のバッファ手段を選択して前記第１のバッファ手段からのリード要求を前記ホスト側に転送する請求項２に記載のインターフェース制御装置。
【請求項４】
前記制御手段は、
前記前記残りエレメントが無くなるまで、前記第１のバッファ手段に格納されるリード要求を継続的に前記ホスト側に転送する請求項２または請求項３に記載のインターフェース制御装置。
【請求項５】
データを記憶する記憶媒体と、
ホストとの間で情報の転送を行なうためのインターフェース手段と、
前記インターフェース手段を介して、前記ホスト側に設けられたキュー手段の格納単位であるエレメントから前記記憶媒体に対するデータの書き込み、読み出しの処理要求を指示するリクエスト情報を取り出す場合に、複数のエレメントに分割されて格納されている第１のリクエスト情報を前記第１のリクエスト情報とは異なる第２のリクエスト情報に対して優先的に取り出すリード要求処理を実行する制御手段と
を具備するデータ記憶装置。
【請求項６】
前記制御手段のリード要求処理に応じて取得されたリクエスト情報に基づいて、前記処理要求を処理するホスト要求処理手段を有する請求項５に記載のデータ記憶装置。
【請求項７】
前記制御手段は、
前記キュー手段から前記リクエスト情報を前記エレメント単位で取り出すためのリード要求を前記ホスト側に転送する場合に、
前記第１のリクエスト情報を構成する複数のエレメントの中で未取得の残りエレメントから取り出すためのリード要求を、単一エレメントから前記第２のリクエスト情報を取り出すためのリード要求に対して優先する請求項５または請求項６に記載のデータ記憶装置。
【請求項８】
前記制御手段は、
前記第１のリクエスト情報をエレメント単位で取り出すためのリード要求を格納する第１のバッファ手段と、
前記第２のリクエスト情報をエレメント単位で取り出すためのリード要求を格納する第２のバッファ手段と、
前記第１のバッファ手段に前記残りエレメントを取り出すためのリード要求が格納されている場合に、優先的に前記第１のバッファ手段を選択して前記第１のバッファ手段からのリード要求を前記ホスト側に転送する請求項７に記載のデータ記憶装置。
【請求項９】
ホストとデータ記憶装置間における情報の転送を行なうためのインターフェースに適用するインターフェース制御方法であって、
前記ホスト側に設けられたキュー手段の格納単位であるエレメントから前記データ記憶装置に対する処理要求を指示するリクエスト情報を取り出す場合に、複数のエレメントに分割されて格納されている第１のリクエスト情報を前記第１のリクエスト情報とは異なる第２のリクエスト情報に対して優先的に取り出すリード要求処理を実行するインターフェース制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ホストとデータ記憶装置間のインターフェースを制御するインターフェース制御装置、データ記憶装置及びインターフェース制御方法に関する。
【背景技術】
【０００２】
近年、ホストとデータ記憶装置（ストレージデバイス）間のインターフェースとして、例えばPCI Express（登録商標、以下PCIe）規格にSCSI規格をマッピングしたSOP(SCSI over PCI Express)と呼ばれる規格などが提案されている。
【０００３】
このようなインターフェース規格の特徴としては、ホスト側において、コマンド、タスク等の処理要求を行なうリクエスト（Request）情報、及びストレージデバイスからのレスポンス（Response）情報をキューイングできる複数のキュー（queue）を配置できる。さらに、これらの複数キューをストレージデバイス側で制御するためのインターフェース制御仕様が設定されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２７３２６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
複数のキューに格納するリクエスト情報及びレスポンス情報は、情報ユニット（Information Unit：IU）と呼ばれることがあり、それぞれリクエストＩＵ及びレスポンスＩＵと表記される。情報ユニットは、１つのエレメント単位で格納される場合と複数のエレメントに分割されて格納される場合がある。ここで、エレメントとは、情報ユニットを格納するキューの格納単位である。
【０００６】
複数のエレメントに分割されてキューに格納されているリクエスト情報をストレージデバイス側に発行する場合（即ち、ストレージデバイス側が取り出す場合）に、エレメント単位での転送処理において分割された一部のエレメントがキューに滞留する可能性がある。このような事態が発生すると、ストレージデバイス側は、全てのエレメントが転送されるまで当該リクエスト情報の処理を実行できないため、処理効率が低下することになる。
【０００７】
そこで、本発明の目的は、複数のエレメントに分割されたリクエスト情報の処理を効率良く実行できるインターフェース制御装置、データ記憶装置及び方法を提供することにある。
【課題を解決するための手段】
【０００８】
本実施形態のインターフェース制御装置は、インターフェース手段と、制御手段とを具備する。前記インターフェース手段は、ホストとデータ記憶装置間における情報の転送を行なう。前記制御手段は、前記インターフェース手段を介して、前記ホスト側に設けられたキュー手段の格納単位であるエレメントから前記データ記憶装置に対する処理要求を指示するリクエスト情報を取り出す場合に、複数のエレメントに分割されて格納されている第１のリクエスト情報を前記第１のリクエスト情報とは異なる第２のリクエスト情報に対して優先的に取り出すリード要求処理を実行する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に関するシステム構成を説明するためのブロック図。
【図２】実施形態に関するインターフェース構成を説明するための概念図。
【図３】実施形態に関するキューの構成を説明するための図。
【図４】実施形態に関する情報ユニットの格納仕様を説明するための図。
【図５】実施形態に関する情報ユニットのフォーマットを説明するための図。
【図６】実施形態に関するＩ／Ｆモジュールの要部を説明するためのブロック図。
【図７】実施形態に関するＩＱリードリクエスタの構成を説明するための図。
【図８】実施形態に関する情報ユニットのリード要求処理を説明するためのフローチャート。
【発明を実施するための形態】
【００１０】
以下図面を参照して、実施形態を説明する。
【００１１】
［システム構成］
図１は、本実施形態に関するシステム構成を説明するためのブロック図である。図１に示すように、本実施形態では、ストレージデバイス（データ記憶装置）１とホスト２とが例えばPCIe規格のインターフェースバス２０により接続されている。ストレージデバイス１は、例えば、ハードディスクドライブ（ＨＤＤ）、ＳＳＤ（solid state drive）、あるいはハイブリッド型ＨＤＤである。ＨＤＤは、後述する記憶媒体１１としてディスクを有する。ＳＳＤは記憶媒体１１としてフラッシュメモリを有する。ハイブリッド型ＨＤＤは、記憶媒体１１としてディスク及びフラッシュメモリを有する。
【００１２】
ストレージデバイス１は大別して、コントローラ１０と、記憶媒体１１と、バッファメモリ１２とを有する。コントローラ１０は、Ｉ／Ｆモジュール（以下、Ｉ／Ｆモジュール）１３及びメディアコントローラ１４を含む。本実施形態では、Ｉ／Ｆモジュール１３は、インターフェースバス２０を介してホスト２と接続し、後述するように、リクエスト情報（リクエストＩＵ）及びレスポンス情報（レスポンスＩＵ）の転送を制御する転送コントローラである。メディアコントローラ１４は、Ｉ／Ｆモジュール１３と連携し、記憶媒体１１に対するデータのリード処理またはライト処理を制御するリード／ライトコントローラである。バッファメモリ１２は、Ｉ／Ｆモジュール１３の制御により情報を格納するメモリである。
【００１３】
図２は、本実施形態のストレージデバイス１とホスト２とのインターフェース構成を説明するための概念図である。図２に示すように、ホスト２は、キューセット２１の複数セット分を有するインターフェース仕様の構成である。キューセット２１は、コマンドやタスクなどのリクエスト情報（リクエストＩＵ）をストレージデバイス１に発行するためにキューイングする複数のキュー（Inbound Queue：ＩＱ）ＩＱ-1〜ＩＱ-3を含む。また、キューセット２１は、ストレージデバイス１から送信されたレスポンス情報（レスポンスＩＵ）等を一時キューイングする複数のキュー（Outbound Queue：ＯＱ）ＯＱ-1〜ＯＱ-3を含む。
【００１４】
ストレージデバイス１のコントローラ１０はインターフェースバス２０を介して、ホスト２の各キューＩＱ-1〜ＩＱ-3からリクエスト情報（リクエストＩＵ）を取り出す。また、コントローラ１０はレスポンスを返す場合には、インターフェースバス２０を介して、ホスト２の各キューＯＱ-1〜ＯＱ-3にレスポンス情報（レスポンスＩＵ）を格納する。
【００１５】
図３（Ａ），（Ｂ）は、ホスト２に設けられた各キューの構成を説明するための図である。図３（Ａ）は、リクエスト情報（リクエストＩＵ）を格納するキュー（ＩＱ）３０である。また、図３（Ｂ）は、レスポンス情報（レスポンスＩＵ）を格納するキュー（ＯＱ）３１である。
【００１６】
図３（Ａ），（Ｂ）に示すように、各キュー３０，３１は、情報ユニット（ＩＵ）をエレメント（０〜ｎ-1）と呼ぶ単位で格納して取り出される。各キュー３０，３１への格納（追加）と取り出しは、ライトポインタ（Write Index : WI）とリードポインタ（Read Index : RI）の２つのポインタにより制御される。
【００１７】
図３（Ａ）に示すように、ホスト２は、コマンド、タスクなどのリクエスト情報（リクエストＩＵ）を発行する場合に、キュー（ＩＱ）３０に対してライトポインタIQ-WIで示すエレメントにリクエストＩＵを格納する。ホスト２は、格納したエレメント数分だけライトポインタIQ-WIを進める。一方、ストレージデバイス１のコントローラ１０は、キュー（ＩＱ）３０からリードポインタIQ-RIで示すエレメントからリクエストＩＵを取り出す。コントローラ１０は、取り出したエレメント数分だけリードポインタIQ-RIを進める。
【００１８】
また、図３（Ｂ）に示すように、ストレージデバイス１のコントローラ１０は、レスポンス情報（レスポンスＩＵ）を返す場合に、キュー（ＯＱ）３１に対してライトポインタOQ-WIで示すエレメントにレスポンスＩＵを格納する。コントローラ１０は、格納したエレメント数分だけライトポインタOQ-WIを進める。一方、ホスト２は、キュー（ＯＱ）３１からリードポインタOQ-RIで示すエレメントからレスポンスＩＵを取り出す。ホスト２は、取り出したエレメント数分だけリードポインタOQ-RIを進める。
【００１９】
図４（Ａ），（Ｂ）は、キュー（ＩＱ）３０に格納されるリクエストＩＵの格納仕様を説明するための図である。図４（Ａ）は、キュー（ＩＱ）３０にはエレメント毎に１個のリクエストＩＵ４０が格納される仕様を示す図である。これに対して、図４（Ｂ）は、１個のリクエストＩＵが複数エレメント４１（ここでは４エレメント）に跨って格納される仕様を示す図である。要するに、図４（Ｂ）に示すように、複数エレメントに分割されて格納されるＩＵを、拡張ＩＵ（spanned IU）と呼ぶ。一方、図４（Ａ）に示すように、エレメント毎に格納されるＩＵを非拡張ＩＵ（non-spanned IU）と呼ぶ。
【００２０】
図５は、リクエストＩＵのフォーマットの概略を説明するための図である。このフォーマットは、例えば、SOP規格またはPQI（PCI Express Queuing Interface）規格に準拠している。
【００２１】
図５に示すように、フォーマットは大別して、ＩＵヘッダ５０、キューイング・インターフェース仕様（Queuing Interface Specific）部５１、及びＩＵ仕様（IU specific）部５２を含む。キューイング・インターフェース仕様部５１には、例えばリクエストＩＵの応答に使用するレスポンスＩＵを返すべきＯＱを識別するためのＯＱ−ＩＤ情報などが設定される。ＩＵ仕様部５２には、例えばSCSI規格のコマンド（リード／ライトコマンドなど）の種類などが設定される。
【００２２】
ＩＵヘッダ５０には、ＩＵタイプ（IU TYPE）部５３、コンパティブル・フィーチャー（COMPATIBLE FEATURES）部５４、及びＩＵ長（IU LENGTH）５５が含まれる。ＩＵタイプ部５３には、例えば、ホスト２からのコマンド、タスクなどのリクエスト情報の種類が設定される。コンパティブル・フィーチャー部５４は、現在の規格では無視されるフィールドである。ＩＵ長５５にはＩＵのデータ長を示す情報が設定される。
【００２３】
ここで、前述したように、ストレージデバイス１のコントローラ１０は、キュー（ＩＱ）３０からリードポインタIQ-RIで示すエレメントからリクエストＩＵを取り出す。本実施形態では、コントローラ１０は、リクエストＩＵが格納されているエレメント数を確認する。即ち、図４（Ｂ）に示すように、コントローラ１０は、当該リクエストＩＵが複数のエレメントに分割されてＩＱ３０に格納されている拡張ＩＵ（spanned IU）であるか否かを確認する。具体的には、コントローラ１０は、ＩＱ３０からリクエストＩＵの先頭を含めて任意数のエレメントを読み込み、先頭エレメントに含まれるＩＵヘッダ５０のＩＵタイプ部５３及びＩＵ長５５に設定されている情報を確認することで、拡張ＩＵであるか否かを認識できる。
【００２４】
また、コントローラ１０は、ＩＱ３０から取り出したリクエストＩＵに対するレスポンスＩＵを返す場合に、ＩＵヘッダ５０のキューイング・インターフェース仕様部５１に設定されているＯＱ−ＩＤ情報に基づいてＯＱ３１を識別する。ホスト２は、当該キュー（ＯＱ）３１からレスポンスＩＵを取り出す。
【００２５】
次に、図６は、コントローラ１０に含まれるＩ／Ｆモジュール１３の要部を示す図である。本実施形態では、Ｉ／Ｆモジュール１３は、キューマネージャ（Queue Manager）６０と呼ぶモジュールを含む構成である。
【００２６】
図６に示すように、キューマネージャ（Queue Manager）６０は、ＩＱコントローラ６５とＯＱコントローラ６６を有し、ホスト２の各キューＩＱ（ＩＱ-1〜ＩＱ-3）及びＯＱ（ＯＱ-1〜ＯＱ-3）の状態を管理する。以後、各キューは便宜的に各ＩＱまたは各ＯＱと表記する。
【００２７】
ＩＱコントローラ６５は、各ＩＱの格納状態を示す情報（IQInfo #0〜#N）を保持するレジスタ６７と、ＩＱリードリクエスタ（IQ Read Requester）６８と、ＩＱポインタ更新部（IQ(RI/WI) Updater）６９を含む。レジスタ６７には、各ＩＱのライトポインタIQ-WIとリードポインタIQ-RIが格納される。ＩＱリードリクエスタ６８は、各ＩＱに格納されているリクエストＩＵのリード要求を調停する。ＩＱポインタ更新部６９は、各ＩＱのリードポインタIQ-RI及びライトポインタIQ-WIの更新を実行する。
【００２８】
一方、ＯＱコントローラ６６は、各ＯＱの格納状態を示す情報（OQInfo #0〜#N）を保持するレジスタ７０と、ＯＱポインタ更新部（OQ(RI/WI) Updater）７１と、割り込み合体（Interrupt Coalescing）部７２を含む。レジスタ７０には、ライトポインタOQ-WIとリードポインタOQ-RIが格納される。なお、本実施形態は、ＩＱコントローラ６５に関するものであるため、ＯＱコントローラ６６の具体的な説明は省略する。
【００２９】
さらに、図６に示すように、キューマネージャ６０の周辺には、ＩＵハンドラ（IU Handler）６１と、トランザクションコントローラ（Transaction Controller）６２と、ＴＬＰ作成部（TLP Builder）６３と、割り込みコントローラ（MSI-X Interrupt Controller）６４とが含まれる。MSI-Xとは、PCIe規格で規定される割り込み処理を意味する。
【００３０】
さらに、キューマネージャ６０の周辺には、メディアコントローラ１４によりアクセス可能なレジスタ群８０と、ホスト２側のインターフェース（PCIe）上でのベースアドレスレジスタ（base address register : BAR）群８１と、レスポンスハンドラ（Response Handler）８２とが含まれる。
【００３１】
レスポンスハンドラ８２は、リクエストの実行後のレスポンスを返すためにレスポンスＩＵの送信をＴＬＰ作成部６３に要求し、レスポンスＩＵをホスト２のＯＱに格納する。また、レスポンスハンドラ８２は、ＯＱコントローラ６６にライトポインタOQ-WIのアップデートを指示する。割込みコントローラ６４は、割り込み合体部７２からの指示により、ホスト２に対してMSI-X割込み処理を実行してレスポンスＩＵを格納したことを通知する。レジスタ群８０は各ブロックを制御するためのレジスタ群である。ベースアドレスレジスタ群８１は、インターフェース（PCIe）を介してホスト２からアクセス可能なレジスタ群である。
【００３２】
ＩＵハンドラ６１は、各ＩＱから取得されたリクエストＩＵのＩＵヘッダ５０をチェックする。トランザクションコントローラ６２は、ホスト２上の各ＩＱからリクエストＩＵを取得するためのリード要求をＴＬＰ作成部６３に対して実行する。ＴＬＰ作成部６３は、トランザクションコントローラ６２からのリード要求に応じて、インターフェースバス２０を介してリクエストＩＵの転送を要求するためのＴＬパケット（Transaction Layer Packet : TLP）を作成する。
【００３３】
以下、図６を参照して、ストレージデバイス１のコントローラ１０がリクエストＩＵを取得するための処理を説明する。
【００３４】
ホスト２がいずれかのＩＱにリクエストＩＵを格納した後、ストレージデバイス１のレジスタ６７のライトポインタIQ-WIをインターフェースバス２０を介して更新する。次に、ＩＱコントローラ６５はレジスタ６７を参照して、各ＩＱのライトポインタIQ-WIとリードポインタIQ-RIとの差分をチェックし、いずれかのＩＱにリクエストＩＵが格納されていることを認識する。ＩＱリードリクエスタ６８は、当該差分が発生した場合に、各ＩＱからリクエストＩＵをリードするためのリード要求（REQ信号）１００をトランザクションコントローラ６２に出力する。
【００３５】
ＴＬＰ作成部６３は、トランザクションコントローラ６２からのリード要求に応じて、リクエストＩＵの転送要求のためのＴＬパケットを作成してインターフェースバス２０上に発行する。この場合、ＴＬＰ作成部６３は、リードポインタ更新部６９からＩＱの最新のリードポインタ（IQ-RI）１０２を受け取り、そのリードポインタ１０２からリード要求を行なうＴＬパケット（TLP）をホスト２に発行する。
【００３６】
このような処理により、コントローラ１０は、インターフェースバス２０を介して、ＩＱから任意のエレメント数分のリクエストＩＵをリードする。トランザクションコントローラ６２は、取り出したエレメント数分だけ進めた各ＩＱのリードポインタ（IQ-RI）の更新値１０１をＩＱコントローラ６５に出力する。リードポインタ更新部６９は、当該更新値１０１をセットする。
【００３７】
一方、ホスト２は、コントローラ１０からのリード要求（ＴＬパケット）に応じて、ＩＱから読み出したリクエストＩＵのデータを含む処理完了のＴＬパケット（Completion TLP）を、インターフェースバス２０を介して伝送（返信）する。前述したように、ＩＵハンドラ６１は、伝送されたリクエストＩＵのＩＵヘッダ５０を解析し、当該リクエストＩＵがＩＱからリードされたエレメント数で完結しているか否かをチェックする。即ち、ＩＵハンドラ６１は、図４（Ｂ）に示すように、当該リクエストＩＵが複数のエレメントに分割されてＩＱに格納されたものであるか否かを確認する。
【００３８】
コントローラ１０（実際にはＩ／Ｆモジュール１３）は、当該リクエストＩＵが１単位のエレメントの場合、または当該リクエストＩＵが取得した複数のエレメント数で完結している場合、ホスト要求（Host Request）処理部に当該リクエストＩＵを送出する。ホスト要求処理部とは、ホスト２からの要求（即ち、記憶媒体１１に対するデータのリード／ライトコマンド）を解析して実行するコマンド処理部である。本実施形態では、コントローラ１０に含まれるメディアコントローラ１４である。
【００３９】
ここで、コントローラ１０は、取得したエレメント数では当該リクエストＩＵが完結していない場合には、完結できる全てのエレメント数を取得するまでホスト要求処理部には送れない。この状態のままでは、ホスト２のＩＱに格納されたリクエストＩＵのコマンド処理が停滞することになる。
【００４０】
そこで、本実施形態のＩＱコントローラ６５は、ＩＱリードリクエスタ６８により、当該リクエストＩＵの後続のエレメントを、他のＩＱのエレメントの取得より優先して取得するための処理を実行する。以下、図７及び図８を参照して具体的に説明する。
【００４１】
図７に示すように、ＩＱリードリクエスタ６８は、ＦＩＦＯ（first-in first-out）セレクタ９０と、３種のＦＩＦＯ９１〜９３と、転送を調停するためのアービタ（Arbiter）９４とを含む。ＦＩＦＯセレクタ９０は、３種のＦＩＦＯ９１〜９３からいずれかのＦＩＦＯを選択する。３種のＦＩＦＯ９１〜９３とは、例えばPQI規格のAdministrator IQ用の高優先（Hi priority）ＦＩＦＯ（以下、Ｈ−ＦＩＦＯと表記）９１、中間優先（Mid priority）ＦＩＦＯ（以下、Ｍ−ＦＩＦＯと表記）９２、及び低優先（Low priority）ＦＩＦＯ（以下、Ｌ−ＦＩＦＯと表記）９３のＦＩＦＯ式バッファである。
【００４２】
次に、図８のフローチャートを参照して、ＩＱリードリクエスタ６８の動作を説明する。
【００４３】
リード要求（REQ）の発生時に、ＩＱリードリクエスタ６８において、少なくともＦＩＦＯ９１〜９３のいずれかにはリード要求（ＩＱの識別情報IQID-nを含む）が保持されているものとする。ＩＱリードリクエスタ６８は、各ＩＱからリクエストＩＵをリードするためのリード要求が、例えばPQI規格のAdministrator IQ用の高優先のリード要求（Hi要求）であるか否かを判定する（ブロック８００）。本実施形態では、当該高優先のリード要求処理は、複数のエレメントに分割されたリクエストＩＵを取得する処理とは直接的に関係しないため、省略されてもよい。
【００４４】
Hi要求の場合（ブロック８００のＹＥＳ）には、ＩＱリードリクエスタ６８は、ＦＩＦＯセレクタ９０により選択されたＨ−ＦＩＦＯ９１から、リード要求のIQID-0を読み出す（ブロック８０１）。この場合、アービタ９４がＨ−ＦＩＦＯ９１を優先的に選択することにより、Ｈ−ＦＩＦＯ９１からリード要求（IQID-0）が読み出される。
【００４５】
さらに、ＩＱリードリクエスタ６８は、リード要求のIQID-0のアクティブ数（有効なエレメント数）を取得する（ブロック８０２）。この場合、図３（Ａ）に示すように、ＩＱのいわゆるラップアラウンド（wrap around）によるエレメント数もチェックする。次に、前述したように、ＩＱリードリクエスタ６８は、リード要求（REQ信号）１００をトランザクションコントローラ６２に出力する（ブロック８０３）。この場合、リード要求１００にはIQID-0及びアクティブ数が含まれている。
【００４６】
トランザクションコントローラ６２はリード要求（REQ信号）１００を受領すると、応答信号（ACK信号）をＩＱリードリクエスタ６８に返信する。この時点で、ＩＱリードリクエスタ６８はＨ−ＦＩＦＯ９１からリード要求（IQID-0）を送出し、Ｈ−ＦＩＦＯ９１から当該リード要求（IQID-0）を除去する（ブロック８０４）。
【００４７】
一方、本実施形態では、Ｍ−ＦＩＦＯ９２は、リード要求が拡張ＩＵ（spanned IU）の場合に、取得すべき複数エレメントの中で未取得である残りエレメントのリード要求（ここではＩＱのIQID-nはIQID-5とする）を保持する。拡張ＩＵは、図４（Ｂ）に示すように、例えば４エレメント数に分割されたリクエストＩＵである。また、Ｌ−ＦＩＦＯ９３は、Ｈ−ＦＩＦＯ９１及びＭ−ＦＩＦＯ９２のいずれかのリード要求以外のリード要求を保持する。
【００４８】
ＩＱリードリクエスタ６８は、Hi要求ではない場合（ブロック８００のＮＯ）、後述するような拡張ＩＵの残りエレメントに対する要求であると判断される場合を除いて、Mid要求でない、即ち、Low要求と判定する（ブロック８０５のＮＯ）。即ち、ＩＱリードリクエスタ６８は、ＦＩＦＯセレクタ９０により選択されたＬ−ＦＩＦＯ９３から、リード要求（IQID-3）を読み出す（ブロック８１３）。さらに、ＩＱリードリクエスタ６８は、リード要求のIQID-3のアクティブ数（有効なエレメント数）を取得する（ブロック８１４）。前述したように、ＩＱのラップアラウンド（wrap around）によるエレメント数もチェックする。
【００４９】
次に、ＩＱリードリクエスタ６８は、リード要求（REQ信号）１００をトランザクションコントローラ６２に出力する（ブロック８１５）。トランザクションコントローラ６２はリード要求（REQ信号）１００を受領すると、応答信号（ACK信号）をＩＱリードリクエスタ６８に返信する。この時点で、ＩＱリードリクエスタ６８はＬ−ＦＩＦＯ９３からリード要求（IQID-3）を送出し、Ｌ−ＦＩＦＯ９３から当該リード要求（IQID-3）を除去する（ブロック８１６）。
【００５０】
本実施形態では、ＩＱリードリクエスタ６８は、Hi要求ではなく（ブロック８００のＮＯ）、Ｍ−ＦＩＦＯ９２にリード要求が保持されている場合には、アービタ９４によりＬ−ＦＩＦＯ９３に対して優先的な調停動作を実行させる（ブロック８０５のＹＥＳ）。前述したように、Ｍ−ＦＩＦＯ９２には、拡張ＩＵの取得すべき複数エレメントの中で未取得である残りエレメントのリード要求（IQID-5）が保持されている。
【００５１】
ＩＱリードリクエスタ６８は、ＦＩＦＯセレクタ９０により選択されたＭ−ＦＩＦＯ９２から、リード要求（IQID-5）を読み出す（ブロック８０６）。さらに、ＩＱリードリクエスタ６８は、リード要求のIQID-5のアクティブ数（有効なエレメント数）を取得する（ブロック８０７）。前述したように、ＩＱのラップアラウンド（wrap around）によるエレメント数もチェックする。ここで、ＩＱリードリクエスタ６８は、レジスタ６７に保持されているリードポインタIQ-RIに基づいて残りエレメント数をチェックする（ブロック８０８）。
【００５２】
次に、ＩＱリードリクエスタ６８は、リード要求（REQ信号）１００をトランザクションコントローラ６２に出力する（ブロック８０９）。トランザクションコントローラ６２はリード要求（REQ信号）１００を受領すると、応答信号（ACK信号）をＩＱリードリクエスタ６８に返信する。
【００５３】
ここで、前述したように、ＴＬＰ作成部６３は、トランザクションコントローラ６２からのリード要求に応じて、リクエストＩＵの転送要求のためのＴＬパケットを作成してインターフェースバス２０上に発行する。ホスト２は、当該リード要求（ＴＬパケット）に応じて、ＩＱから読み出したリクエストＩＵのデータ（ここでは、残りエレメントのデータ）を含む処理完了のＴＬパケット（Completion TLP）を、インターフェースバス２０を介して伝送（返信）する。
【００５４】
コントローラ１０側のＩＵハンドラ６１は、伝送されたリクエストＩＵのＩＵヘッダ５０を解析し、当該リクエストＩＵがＩＱからリードされたエレメント数で完結しているか否かをチェックし、残りエレメント数を通知する。即ち、ＩＱリードリクエスタ６８は、ＩＵハンドラ６１からの残りエレメント数の通知を受けて（ブロック８１０）、当該リクエストＩＵが取得したエレメント数で完結しているか否か、即ち、残りエレメントが０であるか否かを判定する（ブロック８１１）。残りエレメント数が０の場合（ブロック８１１のＹＥＳ）、ＩＱリードリクエスタ６８は、Ｍ−ＦＩＦＯ９２からリード要求（IQID-5）を除去する（ブロック８１２）。さらに、Ｉ／Ｆモジュール１３は、ホスト要求処理部であるメディアコントローラ１４に当該リクエストＩＵを送出する。
【００５５】
一方、リードされたエレメント数で完結していない場合には（ブロック８１１のＮＯ）、
ＩＱリードリクエスタ６８は、残りエレメント数が０になるまで、トランザクションコントローラ６２に対するリード要求の出力を繰り返す（ブロック８０９）。そして、ＩＱリードリクエスタ６８は、ＩＵハンドラ６１からの通知により残りエレメント数が０になると（ブロック８１０、８１１のＹＥＳ）、Ｍ−ＦＩＦＯ９２からリード要求（IQID-5）を除去する（ブロック８１２）。
【００５６】
Ｉ／Ｆモジュール１３は、リクエストＩＵが拡張ＩＵの場合に、全てのエレメント数を取得して完結した当該リクエストＩＵを、ホスト要求処理部であるメディアコントローラ１４に送出する。これにより、メディアコントローラ１４は拡張ＩＵに基づいたコマンド処理を実行する。
【００５７】
なお、前記の拡張ＩＵに対するリード要求処理は以下のような手順でもよい。即ち、ＩＱリードリクエスタ６８は、残りエレメントのリード要求をＭ−ＦＩＦＯ９２に格納した後に、Ｍ−ＦＩＦＯ９２から一旦リード要求を送出する。その後に、ＩＱリードリクエスタ６８は、トランザクションコントローラ６２に対して、ＴＬＰ作成部６３からの残りエレメント分のリードリクエスト用ＴＬパケットの発行を依頼する。ＩＱリードリクエスタ６８は、残りエレメント数が０になるまで、Ｍ−ＦＩＦＯ９２にリード要求を再格納し、トランザクションコントローラ６２に対してリードリクエスト用ＴＬパケットの発行の依頼を継続する。
【００５８】
以上のように本実施形態によれば、ＩＱに複数のエレメントに分割されて格納されている拡張ＩＵであるリクエストＩＵをホスト２から読み出す場合に、当該リクエストＩＵの取得を他のＩＱのリクエストＩＵの取得より優先して行なうことが可能となる。即ち、拡張ＩＵが完結するための全てのエレメント数を取得するまで、ホスト２に対するリード要求を繰り返し、且つ優先して行なうことができる。
【００５９】
ホスト２から転送されていない残りエレメントがＩＱに滞留している場合、ホスト要求処理部（メディアコントローラ１４）では拡張ＩＵであるリクエストＩＵの処理が進行できない。本実施形態は、ＩＱに格納されている拡張ＩＵの残りエレメント（取得済みエレメントの後続エレメント）を、他のエレメントよりも優先的に読み出すことができる。従って、拡張ＩＵであるリクエストＩＵの処理を効率的に進行できる。
【００６０】
ホスト２の各ＩＱから完結していない不完全な拡張ＩＵが読み出された場合に、多数の不完全な拡張ＩＵを一時的に格納するための一種のバッファメモリが必要となる。本実施形態の構成であれば、不完全な拡張ＩＵの発生を抑制できるため、それらを一時的に格納するためのバッファメモリの容量を削減できる。即ち、ストレージデバイス１側のメモリリソースを最小限に抑制できる。
【００６１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６２】
１…ストレージデバイス、２…ホスト、
ＩＱ，ＯＱ，ＩＱ-1〜ＩＱ-3，ＯＱ-1〜ＯＱ-3…キュー、
１０…コントローラ、１１…記憶媒体、１２…バッファメモリ、
１３…インターフェースモジュール（Ｉ／Ｆモジュール）、
１４…メディアコントローラ、２０…インターフェースバス、２１…キューセット、
６０…キューマネージャ、６１…ＩＵハンドラ、６２…トランザクションコントローラ、６３…ＴＬＰ作成部、６５…ＩＱコントローラ、６８…ＩＱリードリクエスタ。
【図１】
2014142757.tif 000003
【図２】
2014142757.tif 000004
【図３】
2014142757.tif 000005
【図４】
2014142757.tif 000006
【図５】
2014142757.tif 000007
【図６】
2014142757.tif 000008
【図７】
2014142757.tif 000009
【図８】
2014142757.tif 000010