(57)【要約】【課題】情報ユニットを保持するテーブルの使用効率の良い管理を実現できるインターフェース制御装置、データ記憶装置及びインターフェース制御方法を提供することにある。【解決手段】本実施形態によれば、インターフェース制御装置は、インターフェースと、テーブルと、コマンド処理部と、コントローラとを備えた構成である。前記インターフェースはホストとの間で情報の伝送を行なう。前記テーブルは前記ホストのメモリ空間のアドレスを管理する管理情報を保持する。前記コマンド処理部は、前記管理情報を使用して前記ホストのメモリ空間をアクセスするコマンド処理を実行する。前記コントローラは、前記コマンド処理に対応する前記管理情報を前記コマンド処理の完了に応じて前記テーブル手段から解放する。【選択図】図１
2014211801.tif 000002
【特許請求の範囲】
【請求項１】
ホストとの間で情報の伝送を行なうためのインターフェース手段と、
前記ホストのメモリ空間のアドレスを管理する管理情報を保持するテーブル手段と、
前記管理情報を使用して前記ホストのメモリ空間をアクセスするコマンド処理を実行するコマンド処理手段と、
前記コマンド処理に対応する前記管理情報を前記コマンド処理の完了に応じて前記テーブル手段から解放する第１の制御手段と
具備するインターフェース制御装置。
【請求項２】
前記インターフェース手段を介して、前記ホストでのキュー手段の格納単位であるエレメントから、前記管理情報を含み、前記コマンド処理を指示するリクエスト情報を取り出し、
前記リクエスト情報を前記エレメント単位で前記テーブル手段に格納する第２の制御手段を有する請求項１に記載のインターフェース制御装置。
【請求項３】
前記第１の制御手段は、
前記リクエスト情報のヘッダを含む第１のエレメント以外の第２のエレメントについては、当該第２のエレメントに対応する第２のリクエスト情報を、前記コマンド処理の完了後に前記テーブル手段から解放し、
前記第１のエレメントについては、当該第１のエレメントに対応する第１のリクエスト情報を、前記第２エレメントを解放した後に解放する請求項２に記載のインターフェース制御装置。
【請求項４】
前記第２の制御手段は、
前記第１の制御手段により前記第２のリクエスト情報が前記テーブル手段から解放された後に、前記キュー手段から取得される次の前記管理情報を含むエレメントに対応するリクエスト情報を前記テーブル手段に格納する請求項２または請求項３に記載のインターフェース制御装置。
【請求項５】
前記テーブル手段は、前記管理情報をエレメント単位で格納する第１のテーブル手段と前記リクエスト情報の全てをエレメント単位で格納する第２のテーブル手段とを含み、
前記第２の制御手段は、
第１のテーブル手段と前記第２のテーブル手段とをエレメント単位で対応付けて管理する請求項２から請求項４のいずれか１項に記載のインターフェース制御装置。
【請求項６】
前記管理情報は前記ホストのメモリ空間をアクセスするためのアドレスを含み、
前記コマンド処理手段は、
前記第２の制御手段により取得した前記リクエスト情報がリードコマンドを含む場合に、読み出し対象のデータを前記管理情報のアドレスで指定された前記ホストのメモリ空間に書き込む処理を実行し、
前記第２の制御手段により取得した前記リクエスト情報がライトコマンドを含む場合に、
前記管理情報のアドレスで指定された前記ホストのメモリ空間上のデータを読み出す処理を実行する請求項２から請求項５のいずれか１項に記載のインターフェース制御装置。
【請求項７】
請求項１から請求項６のいずれか１項に記載のインターフェース制御装置と、
記憶媒体と、
前記コマンド処理手段のコマンド処理に基づいて、前記記憶媒体に対するデータの読み出し、書き込みを実行するリードライト制御手段と
を具備するデータ記憶装置。
【請求項８】
ホストとデータ記憶装置との間で情報の伝送を行なうインターフェース制御装置に適用するインターフェース制御方法であって、
前記ホストから取得し、前記ホストのメモリ空間のアドレスを管理する管理情報を格納し、
前記管理情報を使用して前記ホストのメモリ空間をアクセスするコマンド処理を実行し、
前記コマンド処理に対応する前記管理情報を前記コマンド処理の完了に応じて解放するインターフェース制御方法。
【請求項９】
前記ホストでのキューの格納単位であるエレメントから前記コマンド処理を指示するリクエスト情報を取り出し、
前記管理情報を含む前記リクエスト情報を前記エレメント単位で前記テーブル手段に格納する請求項８に記載のインターフェース制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ホストとデータ記憶装置間のインターフェースを制御するインターフェース制御装置、データ記憶装置及びインターフェース制御方法に関する。
【背景技術】
【０００２】
近年、ホストとデータ記憶装置（ストレージデバイス）間のインターフェースとして、例えばPCI Express（登録商標、以下PCIe）規格にSCSI規格をマッピングしたSOP(SCSI over PCI Express)と呼ばれる規格などが提案されている。
【０００３】
このようなインターフェース規格の特徴としては、ホスト側において、コマンド、タスク等の処理要求を行なうリクエスト（Request）情報、及びストレージデバイスからのレスポンス（Response）情報をキューイングできる複数のキュー（queue）を配置できる。さらに、これらの複数キューをストレージデバイス側で制御するためのインターフェース制御仕様が制定されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２７３２６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
複数のキューに格納するリクエスト情報及びレスポンス情報は、情報ユニット（Information Unit：IU）と呼ばれることがあり、それぞれリクエストＩＵ及びレスポンスＩＵと表記される場合がある。情報ユニットは、１つのエレメントに格納される場合と複数のエレメントに分割されて格納される場合がある。ここで、エレメントとは、情報ユニットをキューに格納する際の格納単位である。
【０００６】
ホスト側は、例えばコマンドをリクエストＩＵに格納してストレージデバイス側に発行する。ストレージデバイス側は、当該リクエストＩＵを取り出してコマンド処理を実行する。ここで、情報ユニットにはコマンドやタスク以外に、ホスト側に確保されるメモリ空間のアドレスのリスト(Scatter Gather List、以下ＳＧＬと表記する)を格納することが可能である。ストレージデバイス側は、情報ユニットからＳＧＬを取得することにより、ＳＧＬで指定されたホスト側のメモリ空間のアドレスをアクセスできる。これにより、ストレージデバイス側は、ホスト側のメモリ空間に分散されているデータを取得し、または、そのメモリ空間にデータを転送することが可能である。
【０００７】
ストレージデバイス側は、ホスト側から発行された情報ユニットに含まれる全情報を、レスポンスを返すまでテーブルに保持することになる。当該全情報にはＳＧＬが含まれる場合もあるため、必要なテーブルの容量が大容量になる。このため、テーブルの使用効率の良いテーブル管理を実現して、テーブルの容量を必要最小限にできることが望ましい。
【０００８】
そこで、本発明の目的は、情報ユニットを保持するテーブルの使用効率の良い管理を実現できるインターフェース制御装置、データ記憶装置及びインターフェース制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
本実施形態のインターフェース制御装置は、インターフェース手段と、テーブル手段と、コマンド処理手段と、制御手段とを備えた構成である。前記インターフェース手段は、ホストとの間で情報の伝送を行なう。前記テーブル手段は、前記ホストのメモリ空間のアドレスを管理する管理情報を保持する。前記コマンド処理手段は、前記管理情報を使用して前記ホストのメモリ空間をアクセスするコマンド処理を実行する。前記制御手段は、前記コマンド処理に対応する前記管理情報を前記コマンド処理の完了に応じて前記テーブル手段から解放する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に関するシステム構成を説明するブロック図。
【図２】実施形態に関するインターフェース構成を説明する概念図。
【図３】実施形態に関するキューの構成を説明する図。
【図４】実施形態に関する情報ユニットの格納仕様を説明する図。
【図５】実施形態に関するストレージデバイスのコントローラの構成を説明する図。
【図６】実施形態に関する情報ユニットのフォーマットの一例を説明する図。
【図７】実施形態に関するＳＧＬのフォーマットの一例を説明する図。
【図８】実施形態に関するＳＧＬテーブルの構成を説明するブロック図。
【図９】実施形態に関するＳＧＬコントロールテーブルの一例を説明する図。
【図１０】実施形態に関するＳＧＬコントロールテーブルとＳＧＬスタンダードテーブルとの関係を説明する図。
【図１１】実施形態に関するＳＧＬテーブルコントローラの動作を説明する図。
【図１２】実施形態に関するＳＧＬテーブルコントローラの動作を説明する図。
【図１３】実施形態に関するＳＧＬテーブルコントローラの動作を説明する図。
【図１４】実施形態に関するＳＧＬテーブルコントローラの動作を説明する図。
【図１５】実施形態に関するシステムの動作を説明するタイミング。
【図１６】実施形態に関するストレージデバイスのコントローラの動作を説明するフローチャート。
【発明を実施するための形態】
【００１１】
以下図面を参照して、実施形態を説明する。
【００１２】
［システム構成］
図１は、本実施形態に関するシステム構成を説明するためのブロック図である。図１に示すように、本実施形態では、ストレージデバイス（データ記憶装置）１とホスト２とが例えばPCIe規格のインターフェースバス２０により接続されている。ストレージデバイス１は、例えば、ハードディスクドライブ（ＨＤＤ）、ＳＳＤ（solid state drive）、あるいはハイブリッド型ＨＤＤである。ＨＤＤは、後述する記憶媒体１１としてディスクを有する。ＳＳＤは記憶媒体１１としてフラッシュメモリを有する。ハイブリッド型ＨＤＤは、記憶媒体１１としてディスク及びフラッシュメモリを有する。
【００１３】
ストレージデバイス１は大別して、コントローラ１０と、記憶媒体１１と、バッファメモリ１２とを有する。コントローラ１０は、インターフェースコントローラ（以下、Ｉ／Ｆコントローラ）１３及びメディアコントローラ１４を含む。本実施形態では、Ｉ／Ｆコントローラ１３は、インターフェースバス２０を介してホスト２と接続し、後述するように、情報ユニット（ＩＵ）、具体的にはリクエスト情報（リクエストＩＵ）及びレスポンス情報（レスポンスＩＵ）の転送を制御するコントローラである。
【００１４】
メディアコントローラ１４は、Ｉ／Ｆコントローラ１３と連携し、記憶媒体１１に対するデータのリード処理またはライト処理を制御するリード／ライトコントローラである。バッファメモリ１２は、コントローラ１０の制御により情報を格納するメモリである。
【００１５】
ここで、本実施形態では、ストレージデバイス１は、Ｉ／Ｆコントローラ１３及びインターフェースバス２０により、ホスト２が確保しているメモリ空間２００をアクセスできる。具体的には、後述するように、Ｉ／Ｆコントローラ１３は、ＳＧＬ（Scatter Gather List）を使用して、ホスト２のメモリ空間２００に分散されているデータを取得し、または、そのメモリ空間２００にデータを転送する。ＳＧＬはメモリ空間２００のアドレスのリストであり、リクエストＩＵなどの情報ユニットに格納されてストレージデバイス１に提供される。即ち、ストレージデバイス１がＳＧＬを使用して、ホスト２のメモリ空間２００を認識することが可能となる。
【００１６】
図２は、本実施形態のストレージデバイス１とホスト２とのインターフェース構成を説明するための概念図である。図２に示すように、ホスト２は、複数のキューを含むキューセット２１を有するインターフェース仕様の構成である。キューセット２１は、コマンドやタスクなどのリクエスト情報（リクエストＩＵ）をストレージデバイス１に発行するためにキューイングする複数のキュー（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）と呼ぶ。
【００２３】
ここで、前述したように、ストレージデバイス１のコントローラ１０は、キュー（ＩＱ）３０からリードポインタIQ-RIで示すエレメントからリクエストＩＵを取り出す。本実施形態では、コントローラ１０は、リクエストＩＵが格納されているエレメント数を確認する。また、図４（Ｂ）に示すように、コントローラ１０は、当該リクエストＩＵが複数のエレメントに分割されてＩＱ３０に格納されている拡張ＩＵ（spanned IU）であるか否かを確認する。具体的には、コントローラ１０は、ＩＱ３０からリードポインタIQ-RIに従って、リクエストＩＵの先頭を含めて任意数のエレメントを読み込み、先頭エレメントに含まれるＩＵヘッダのＩＵタイプ部及びＩＵ長に設定されている情報とエレメントサイズを比較することで、拡張ＩＵであるか否かを認識できる。
【００２４】
また、コントローラ１０は、ＩＱ３０から取り出したリクエストＩＵに対するレスポンスＩＵを返す場合に、取り出したリクエストＩＵに含まれるＩＵヘッダのキューイング・インターフェース仕様部に設定されているＯＱ−ＩＤ情報に基づいてＯＱ３１を識別する。ホスト２は、当該キュー（ＯＱ）３１からレスポンスＩＵを取り出す。
【００２５】
コントローラ１０は、取り出したリクエストＩＵの中で先頭エレメントにあるＩＵヘッダのＩＵ長を確認し、リクエストＩＵを完全に取得したと判断した場合に、リクエストＩＵの情報を後述するホスト要求処理部５５に送る。取得したエレメント数では当該リクエストＩＵが完結していない場合には、完結できる全てのエレメント数を取得するまでホスト要求処理部５５には送れない。この状態のままでは、ホスト２のＩＱに格納されたリクエストＩＵのコマンド処理が停滞することになる。そこで、コントローラ１０は、当該リクエストＩＵの後続のエレメントを、他のＩＱのエレメントの取得より優先して取得するための処理を実行する。
【００２６】
図５は、本実施形態のコントローラ１０の内部構成（機能）を示すブロック図である。
【００２７】
図５に示すように、コントローラ１０は、Ｉ／Ｆコントローラ１３に含まれる機能として、トランザクションコントローラ（Transaction Controller）５０と、ＩＵハンドラ（IU Handler）５１と、ＴＬＰ（Transaction Layer Packet）ハンドラ５２と、キューコントローラ（Queue Controller）５３と、ＴＬＰビルダ（TLP Builder）／ＩＵ生成器（IU Generater）５４とを有する。なお、ＴＬＰビルダ（TLP Builder）／ＩＵ生成器（IU Generater）５４は、ＴＬＰビルダ５４と表記する。
【００２８】
さらに、コントローラ１０は、メディアコントローラ１４に含まれる機能として、ホストリクエスト（Host Request）処理部５５を有する。また、コントローラ１０は、バッファメモリ１２を使用する機能として、ライトバッファ（Write Buffer）５６及びリードバッファ（Read Buffer）５７を有する。
【００２９】
トランザクションコントローラ５０は、後述するＳＧＬテーブルコントローラ（SGL Table Controller）を含み、ＴＬＰビルダ５４に対してホスト２上の各ＩＱからリクエストＩＵを取得するためのメモリリード用ＴＬＰ（即ち、リード要求）の発行を要求する。ＩＵハンドラ５１は、各ＩＱから取得されたリクエストＩＵのＩＵヘッダ（IU type, IU Length）をチェックする。ＩＵハンドラ５１は、ホスト２から取得したＩＵが拡張ＩＵ（spanned IU）または非拡張ＩＵ（non-spanned IU）のいずれかであるかを判別する。
【００３０】
ＴＬＰハンドラ５２は、ホスト２からの情報がＩＵ又はデータであるかを判別し、ＩＵをＩＵハンドラ５１に転送する。また、ＴＬＰハンドラ５２はデータをライトバッファ５６に格納する。キューコントローラ５３は、ホスト２の各キューＩＱまたはＯＱの状態を管理し、ホスト２からセットされたキューを示す通知を受け付ける。キューコントローラ５３は、その通知に応じてトランザクションコントローラ５０にエレメント（即ち、ＩＵ）の取得要求を出す。
【００３１】
ＴＬＰビルダ５４は、トランザクションコントローラ５０からの要求に応じて、インターフェースバス２０を介してリクエストＩＵの転送を要求するためのメモリリード用ＴＬＰをホスト２に発行する。また、ＴＬＰビルダ５４は、リクエストの実行後のレスポンスを返すためにレスポンスＩＵをホスト２に送信する。ホストリクエスト処理部５５は、ＩＵハンドラ５１から出力されるコマンド／タスク情報５１０を受け付けてコマンド処理又はタスク処理を実行する。即ち、ホストリクエスト処理部５５は、例えばライトコマンドの場合には、ホスト２からのデータを、ライトバッファ５６を経由して記憶媒体１１に書き込むためのコマンド処理を実行する。また、ホストリクエスト処理部５５は、例えばリードコマンドの場合には、記憶媒体１１から読み出されたデータを、リードバッファ５７を経由してホスト２に伝送するためのコマンド処理を実行する。
【００３２】
図６は、本実施形態のＩＵの中で、コマンドを格納するＩＵであるコマンドＩＵのフォーマット６０の一例を示す。
【００３３】
図６に示すように、コマンドＩＵは、６４バイト目からＳＧＬの領域（SGL DESCRIPTOR）となる。ＳＧＬのフォーマットの一例は、図７を参照して後述する。コマンドＩＵはヘッダの部分として、ＩＵタイプ（IU TYPE）、ＩＵ長（IU LENGTH）及びレスポンスＯＱ−ＩＤ（RESPONSE OQ ID）を有する。ＩＵタイプは、ホスト２からのコマンド／タスクなどのリクエスト情報の種類を示す。ＩＵ長はＩＵのデータ長を示す。レスポンスＯＱ−ＩＤは、レスポンスＩＵを返す場合のＯＱを識別するＩＤ情報を示す。
【００３４】
さらに、コマンドＩＵは、データバッファサイズ（DATA BUFFER SIZE）、ＣＤＢ、付加的ＣＤＢバイト（ADDITIONAL CDB BYTES）を有する。データバッファサイズは、コマンド（リードまたはライトコマンド）で指定されるデータのバッファサイズを示す。ＣＤＢは、コマンド・ディスクリプタ・ブロック（command descriptor block）であり、コマンドの内容を記述するブロックである。付加的ＣＤＢバイトは、付加的ＣＤＢを記述するためのデータ長を示す。
【００３５】
前述したように、ＳＧＬは、ホスト２のメモリ空間２００のアドレスを示すリストである。図６に示すように、ＳＧＬはコマンドＩＵに格納されてストレージデバイス１に提供される。ストレージデバイス１はＳＧＬを使用して、メモリ空間２００に分散されているデータを取得し、または、そのメモリ空間２００にデータを転送できる。
【００３６】
図７はＳＧＬのフォーマット７０の一例を示す。図７に示すように、ＳＧＬは、メモリ空間２００のアドレス（ADDRESS）及びアドレスのアクセスデータ長（LENGTH）を有する。アクセスデータ長は、当該アドレスによりアクセスするデータのデータ長を示す。また、ＳＧＬは、コマンドＩＵに格納されるＳＧＬからリンクされて、ホスト２のメモリ空間２００上に設定されることが可能である。この場合、ストレージデバイス１は、任意のタイミングでメモリ空間２００上に設定されているＳＧＬをリードし、データ転送を行うことになる。
【００３７】
以下、ＩＵに格納されるＳＧＬについて説明する。ここで、コマンドＩＵは、例えば、１個のＳＧＬが１６バイトで定義されている場合に、最大で２５２個のＳＧＬを格納できる。一般的に、キューのエレメントサイズは、常に最大のＩＵサイズに合うように設定されるのではなく、そのシステムにおいて使用効率の良い適切なサイズが採用される。このため、多数のＳＧＬを格納するＩＵは、複数エレメントに分割されてキューに格納される。
【００３８】
次に、図８に示すように、トランザクションコントローラ５０は、ＳＧＬテーブルコントローラ８０を有する。ＳＧＬテーブルコントローラ８０は、ＳＧＬコントロールテーブル（SGL Control Table）８１、ＳＧＬスタンダードテーブル（SGL Standard Table）８２及びＳＧＬセグメントテーブル（SGL Segment Table）８３の３種のテーブルを管理する。なお、ＳＧＬセグメントテーブル８３は、本実施形態では説明を省略する。
【００３９】
ＳＧＬテーブルコントローラ８０は、トランザクションコントローラ５０がＩＵを受信すると、ＳＧＬスタンダードテーブル８２に一旦ＩＵ全体を格納する。当該テーブル８２は、例えばエレメントサイズが２５６バイトで指定されたエレメント単位に区切られており、エレメントをリードするごとに登録される。ＳＧＬコントロールテーブル８１は、
ＳＧＬスタンダードテーブル８２に対してエレメント単位の登録が行われると同時に生成される。ＳＧＬコントロールテーブル８１は、ＳＧＬスタンダードテーブル８２に登録されるエレメントのそれぞれに対応付けられている（紐付け）。
【００４０】
図９は、ＳＧＬコントロールテーブル８１の一例を示す。図９に示すように、ＳＧＬコントロールテーブル８１は、プライマリビット（PRIMARY bit : ＰＲＩ）を有する。前述したように、ＳＧＬスタンダードテーブル８２には、ホスト２からリードされたエレメントのＩＵ（ここではコマンドＩＵ）が格納される。ＰＲＩには、ＳＧＬスタンダードテーブル８２に格納されたＩＵに対応付けられたＳＧＬコントロールテーブル８１であることを示すために“1”がセットされる。ＰＲＩに“1”がセットされたＳＧＬコントロールテーブル８１は、プライマリテーブル（Primary Table）と表記される。プライマリテーブル（テーブル８１）は１個のＩＵにつき１個のみ生成される。
【００４１】
また、ＩＵヘッダを含まない、後続のエレメントを登録したＳＧＬコントロールテーブル８１のＰＲＩには“0”がセットされる。ＰＲＩに“0”がセットされたＳＧＬコントロールテーブル８１は、セカンダリテーブル（Secondary Table）と表記される。セカンダリテーブルは１個のＩＵにつき、生成されない場合(ＩＵが１エレメントに収まっている)と、１個以上生成される場合(ＩＵが複数エレメントに跨っている)がある。
【００４２】
ＳＧＬコントロールテーブル８１にはテーブルＩＤが割り当てられており、後続のエレメントがどのテーブル８１に格納されているかを示す次テーブル番号（NEXT TABLE NUMBER）が定義される。最後のＩＵのＳＧＬコントロールテーブル８１には、エンドビット（END bit : END）がセットされるため、そのＳＧＬコントロールテーブル８１に対応するＩＵが最終エレメントであることを認識することができる。さらに、ＳＧＬコントロールテーブル８１には、残存ＳＧＬ長（REMAINING SGL LENGTH）、スタンダードＳＧＬテーブルオフセット（STANDARD SGL TABLE OFFSET）、ＳＧＬアドレスオフセット（SGL ADDRESS OFFSET）及びデータ転送バイト（DATA TRANSFER BYTES）が設定される。ここで、スタンダードＳＧＬテーブルオフセットはどこまでSGLを処理したかを示す。残存ＳＧＬ長は処理されていないＳＧＬの量を示す。ＳＧＬアドレスオフセットは、ＳＧＬスタンダードテーブル８２でのＳＧＬの位置を特定するためのアドレスを示す。データ転送バイトはＳＧＬにより転送されるデータ長を示す。
【００４３】
図１０は、ＳＧＬコントロールテーブル８１とＳＧＬスタンダードテーブル８２との関係を示す。ここでは、ＳＧＬスタンダードテーブル８２に対してエレメント単位の登録が行われると同時に、例えば、５個（TBL1〜TBL5）のＳＧＬコントロールテーブル８１が生成される場合である。各テーブルTBL1〜TBL5は、ＳＧＬスタンダードテーブル８２に登録されるエレメントのそれぞれに対応付け（紐付け）られて、登録されたエレメントに応じて有効フラグ（VLD）に“1”がセットされる。(図１０を修正)
［インターフェース制御動作］
以下、図１１から図１６を参照して、本実施形態のコントローラ１０の動作を説明する。
【００４４】
先ず、図１５のタイミングチャートを参照して、コントローラ１０が、ホスト２からコマンドＩＵ（後述するようにリードコマンドを含む）を取得する処理を説明する。
【００４５】
コントローラ１０において、キューコントローラ５３はホスト２からセットされたキューを示す通知を受けると、トランザクションコントローラ（Ｔ−コントローラ）５０に対してエレメント（即ち、コマンドＩＵ）の取得要求を出す（ブロック１５００）。Ｔ−コントローラ５０は、ＳＧＬテーブルコントローラ８０を介して、ＳＧＬスタンダードテーブル８２の空き状況を問い合わせる。
【００４６】
Ｔ−コントローラ５０は、ＳＧＬテーブルコントローラ８０からの応答である空き状況を示す情報と、キューコントローラ５３から要求されたエレメント数に基づいて実際に取得するエレメント数を算出する。Ｔ−コントローラ５０は、算出したエレメント数に基づいてホスト２からリクエストＩＵを取得するためのメモリリード用ＴＬＰの発行（即ち、リード要求）をＴＬＰビルダ５４に要求する（ブロック１５０１）。ＴＬＰビルダ５４は、インターフェースバス２０を介して、当該ＴＬＰをホスト２に発行する（ブロック１５０２）。
【００４７】
次に、ＴＬＰハンドラ５２は、ホスト２から、要求したリクエストＩＵに関する情報が含まれるＴＬＰであるコンプリションＴＬＰ（Completion TLP）を受信すると、当該ＴＬＰがＩＵ又はデータであるかを判別する。ＴＬＰハンドラ５２は、受信したＴＬＰがＩＵ（要求のコマンドＩＵ）の場合にはＩＵハンドラ５１に転送する（ブロック１５０３）。ＩＵハンドラ５１は、ＩＵのヘッダ（IU type, IU Length）をチェックし、ホスト２から取得したＩＵが拡張ＩＵ（spanned IU）または非拡張ＩＵ（non-spanned IU）のいずれかであるかを判別する。一方、ＴＬＰハンドラ５２は、受信したＴＬＰがデータの場合にはライトバッファ５６に格納する。ＩＵハンドラ５１は、チェック後にコマンドＩＵをＴ−コントローラ５０に転送する。また、ＩＵハンドラ５１は、ＳＧＬコントロールテーブル８１であるプライマリテーブルのテーブルＩＤ及びコマンドＩＵに含まれるリードコマンド（５１０）をホストリクエスト処理部（ＨＲ処理部）５５に転送する（ブロック１５０４）。
【００４８】
以下、本実施形態のコントローラ１０による、リードコマンド処理の実行から完了までの具体的動作を説明する。また、図１６のフローチャートを参照して、Ｔ−コントローラ５０の内部動作も説明する。
【００４９】
コントローラ１０は、リードコマンド処理を実行することにより、記憶媒体１１から読み出したデータをホスト２に伝送する。
【００５０】
ＨＲ処理部５５は、ＩＵハンドラ５１からリードコマンドを受け取ると、リードコマンド処理を開始する（ブロック１５０５）。具体的には、ＨＲ処理部５５は、記憶媒体１１から読み出されたデータがリードバッファ５７に格納されてデータ転送の準備が完了すると、Ｔ−コントローラ５０に対してＳＧＬの処理に関する問い合わせを行なう。ここで、前述したように、ＨＲ処理部５５は、ＩＵハンドラ５１から、ＳＧＬコントロールテーブル８１であるプライマリテーブルのテーブルＩＤを受け取っている。ＨＲ処理部５５は、ＳＧＬを参照するために、ＳＧＬコントロールテーブル８１のテーブルＩＤをＴ−コントローラ５０に渡す。
【００５１】
ここで、図１６に示すように、Ｔ−コントローラ５０は、ＩＵハンドラ５１からコマンドＩＵ（リードコマンドを含む）を受け取ると、ＳＧＬテーブルコントローラ８０を介して、受信したＩＵ全体をＳＧＬスタンダードテーブル８２に格納する（ブロック１６００）。図１１に示すように、Ｔ−コントローラ５０は、ＳＧＬスタンダードテーブル８２に対してエレメント単位のＩＵ（エレメントA1〜A4とする）を登録すると同時に、例えば、４個（TBL1〜TBL4）のＳＧＬコントロールテーブル８１を生成する（ブロック１６０１）。
【００５２】
なお、前述したように、ＳＧＬコントロールテーブル８１とＳＧＬスタンダードテーブル８２とは、各テーブルTBL1〜TBL5がＳＧＬスタンダードテーブル８２に登録されるエレメントのそれぞれに対応付けられている（図１０を参照）。また、図１１に示すように、３個のTBL1〜TBL3それぞれの次テーブル番号（NEXT TABLE NUMBER）には、後続のエレメントに対応するテーブル番号（TBL2〜TBL4）が格納される。
【００５３】
Ｔ−コントローラ５０は、ＨＲ処理部５５から渡されたテーブルＩＤに基づいてＳＧＬコントロールテーブル８１のいずれかのテーブル（TBL1〜TBL5）を特定し、ＳＧＬスタンダードテーブル８２のＳＧＬ位置を特定する。即ち、Ｔ−コントローラ５０は、テーブルＩＤに基づいてＳＧＬコントロールテーブル８１を参照し、当該テーブル８１のＳＧＬアドレスオフセット（SGL ADDRESS OFFSET）からＳＧＬ位置を特定する（ブロック１６０２のＹＥＳ，１６０３）。
【００５４】
次に、Ｔ−コントローラ５０は、図７に示すように、特定されたＳＧＬからメモリ空間２００のアドレス（ADDRESS）及びデータ転送長（LENGTH）を取得し、ＴＬＰビルダ５４に送る（ブロック１６０４）。
【００５５】
図１５に戻って、Ｔ−コントローラ５０は、リードデータをホスト２のメモリ空間２００に書き込むためのメモリライト用ＴＬＰ（Memory Write TLP）の発行（即ち、ライト要求）をＴＬＰビルダ５４に要求する（ブロック１５０６）。ＴＬＰビルダ５４は、Ｔ−コントローラ５０からの要求に応じて、インターフェースバス２０を介してメモリライト用ＴＬＰをホスト２に発行する（ブロック１５０７）。即ち、ＴＬＰビルダ５４は、ＨＲ処理部５５によりリードバッファ５７から転送されるデータに転送アドレス（ＳＧＬにより指定）を付加してメモリライト用ＴＬＰを生成し、ホスト２に送信する。これにより、ホスト２のメモリ空間２００には、コマンドＩＵに含まれるＳＧＬにより指定されたアドレスにリードデータが書き込まれる。
【００５６】
次に図１６に戻って、Ｔ−コントローラ５０は、リードデータ（記憶媒体１１から読み出されたデータ）の転送に伴い、ＳＧＬコントロールテーブル８１上のスタンダードＳＧＬテーブルオフセット（STANDARD SGL TABLE OFFSET）を更新する（ブロック１６０５）。このテーブルオフセットは、ＳＧＬ処理状況を示す情報である。即ち、当該テーブルオフセットは、ＳＧＬコントロールテーブル８１において、あるセカンダリテーブル上のＳＧＬが示すデータの転送が完了したか否かを示す。
【００５７】
ＳＧＬテーブルコントローラ８０は、ＳＧＬが示すデータ転送が完了すると、図１２に示すように、当該ＳＧＬを格納したセカンダリテーブル（ここではTBL2）に対応付けられたＳＧＬコントロールテーブル８１のＶＬＤをクリア（ビット“0”を設定）する。また、ＳＧＬテーブルコントローラ８０は、ＳＧＬスタンダードテーブル８２のＩＵエレメントA-2に対する紐づけを説いて、このＩＵエレメントA-2を解放する。ＳＧＬテーブルコントローラ８０は、プライマリテーブル（ここではTLB1）の次テーブル番号（NEXT TABLE NUMBER）をその次のテーブル番号（TLB3）に更新する。
【００５８】
Ｔ−コントローラ５０は、ＳＧＬコントロールテーブル８１のＶＬＤをクリアした時点で、ＳＧＬスタンダードテーブル８２の空き状況をサーチする（ブロック１６０６）。これにより、Ｔ−コントローラ５０は、ＶＬＤがクリアされたＳＧＬコントロールテーブル８１を検索できることにより、直ちに次のＩＵの転送要求を実行できる。即ち、図１３に示すように、ＳＧＬスタンダードテーブル８２には、後続のＩＵ（エレメントB-1,B-2）を格納できる。この時、ＳＧＬスタンダードテーブル８２のＩＵエレメントA-3は転送が完了しており、ＳＧＬテーブルコントローラ８０により該ＳＧＬを格納したセカンダリテーブル（ここではTBL3）に対応付けられたＳＧＬコントロールテーブル８１のＶＬＤはクリア（ビット“0”を設定）される。
【００５９】
なお、プライマリテーブル（TLB1）は、コマンドＩＵのヘッダ情報が格納されているため、レスポンスを返すまでその情報を必要とする。即ち、レスポンスを返すタイミングは、要求のコマンドＩＵに対するリードデータの転送処理が完了し、その実行結果がレスポンスＩＵとしてホスト２のキューＯＱ（Outbound Queue）に格納されるまでであることが好ましい。このレスポンスＩＵがＯＱに格納された時点で、図１４に示すように、プライマリテーブル（TBL1）のＶＬＤは、クリア（ビット“0”を設定）される。
【００６０】
以上のように本実施形態によれば、ホストのメモリ空間をアクセスするＳＧＬを含むコマンドＩＵなどのＩＵをエレメント単位で管理するテーブルから、コマンド処理が完了したＳＧＬを含むテーブル情報を解放する。従って、ＩＵを管理するテーブル情報を格納するメモリ容量を最小限にできるため、使用効率の良いテーブル管理を実現することができる。
【００６１】
具体的には、要求したＩＵを全て取り込んだ後に、ＩＵをエレメント単位で管理するテーブルからコマンド処理が完了したＳＧＬを含むエレメントを解放する。これにより、次のＩＵを取り込むために、テーブルの空き領域を準備できる。従って、レスポンスを返すまでＩＵ全体をテーブルに保持する必要はなく、テーブルの使用効率の良いテーブル管理を実現できる。結果的に大容量のテーブルは不要にでき、そのテーブル情報を格納するメモリの容量を削減できる。
【００６２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６３】
１…ストレージデバイス、２…ホスト、
ＩＱ，ＯＱ，ＩＱ-1〜ＩＱ-3，ＯＱ-1〜ＯＱ-3…キュー、
１０…コントローラ、１１…記憶媒体、１２…バッファメモリ、
１３…インターフェースコントローラ（Ｉ／Ｆコントローラ）、
１４…メディアコントローラ、２０…インターフェースバス、２１…キューセット、
５０…トランザクションコントローラ、５１…ＩＵハンドラ、
５２…ＴＬＰハンドラ、５３…キューコントローラ、
５４…ＴＬＰビルダ、５５…ホストリクエスト処理部、
５６…ライトバッファ、５７…リードバッファ。
【図１】
2014211801.tif 000003
【図２】
2014211801.tif 000004
【図３】
2014211801.tif 000005
【図４】
2014211801.tif 000006
【図５】
2014211801.tif 000007
【図６】
2014211801.tif 000008
【図７】
2014211801.tif 000009
【図８】
2014211801.tif 000010
【図９】
2014211801.tif 000011
【図１０】
2014211801.tif 000012
【図１１】
2014211801.tif 000013
【図１２】
2014211801.tif 000014
【図１３】
2014211801.tif 000015
【図１４】
2014211801.tif 000016
【図１５】
2014211801.tif 000017
【図１６】
2014211801.tif 000018