JP2021105844A - 情報処理装置および情報処理装置の制御方法 - Google Patents

情報処理装置および情報処理装置の制御方法 Download PDF

Info

Publication number
JP2021105844A
JP2021105844A JP2019236840A JP2019236840A JP2021105844A JP 2021105844 A JP2021105844 A JP 2021105844A JP 2019236840 A JP2019236840 A JP 2019236840A JP 2019236840 A JP2019236840 A JP 2019236840A JP 2021105844 A JP2021105844 A JP 2021105844A
Authority
JP
Japan
Prior art keywords
response
error
requests
information processing
storage device
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.)
Pending
Application number
JP2019236840A
Other languages
English (en)
Inventor
和幸 横田
Kazuyuki Yokota
和幸 横田
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP2019236840A priority Critical patent/JP2021105844A/ja
Publication of JP2021105844A publication Critical patent/JP2021105844A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Bus Control (AREA)
  • Hardware Redundancy (AREA)

Abstract

【課題】複数のコマンドを1度に扱うプロトコルを用いた際に、同一のキュー位置における複数の記憶装置の各々の応答に応じてホストシステムに応答可能なミラーリングシステムを提供する。【解決手段】不揮発性の第1記憶手段及び第2記憶手段を有する情報処理装置で400あって、コントローラから受信した少なくとも2つの要求のうち同じ要求に対応する第1保持手段および第2保持手段が保持した各々の記憶手段からの応答に基づいて、同じ要求に対応するコントローラへの応答を送信する第3送信手段と、を有する。【選択図】図6

Description

本発明は、情報処理装置および情報処理装置の制御方法に関する。
近年、PCなどの情報処理装置では、不揮発性メモリを利用したソリッドステートドライブ(SSD)を用いることでハードディスドライブ(HDD)を用いるよりも高速なデータ転送を可能としている。一方で、これら記憶装置に用いられるインタフェースであるSerial ATA(SATA)は、転送時のデータ・エンコーディングに要する処理時間が増えてレイテンシが大きくなるため、SSD本来の転送パフォーマンスを発揮できていなかった。
そこで、さらに近年では汎用バスのPCI−Express(PCIe)に直接接続でき、SSDの高速性を活かす新たなプロトコルであるNon−Volatile Memory Express(NVMe)プロトコルに対応したSSDが登場し始めている。
また、HDDやSSDなどの記憶媒体の故障に対するデータ保護の仕組みとして、2つの記憶装置を用いてデータを二重化して保存するミラーリング技術が存在する。ミラーリングはブリッジ装置を用いて、ホストからのデータを同時に2つの記憶装置に記録するため、データや記憶装置自体が破損しても他方からのデータコピーで復旧が可能である。図1に示すように、記憶装置1側の書き込み処理(コマンドB)が書き込みエラーした際に、記憶装置2側の書き込み処理(コマンドB)で書き込まれたデータをブリッジ装置が読取り、記憶装置1へ書き込み直す。また、図2に示すように、記憶装置1と記憶装置2の書き込み処理が共に書き込みエラーとなった際には、正しいデータを持ち合わせていないため、ブリッジ装置での修復が不可能となる。
特許文献1は、システムホストとローカルホストが接続し、ローカルホストとローカルデバイスが接続するブリッジ構成の情報処理装置である。ローカルホストはローカルデバイスへの書き込みの完了応答を受け、システムホストへ書き込み完了応答を通知している。
国際公開第2017/154943号公報
NVMeプロトコルでは、1度の処理で複数のコマンドを扱うため、異なるデータの書き込みでエラーが発生することがあり得る。例えば、図3に示す、記憶装置1側のコマンドBと記憶装置2側のコマンドCがそれに該当する。図3では、複数のコマンドを1度の書き込み処理とみなして、記憶装置に書き込みエラーがあるという判断でホストシステムへの応答を決めてしまう。そのため、記憶装置1においてエラーが発生し且つ記憶装置2において正常に処理されたコマンドBと、その逆のコマンドCに対応するホストシステムへの応答として書き込みエラーを通知することになってしまう。
つまり、従来の構成を適用すると複数のコマンドを1度の書き込み処理として扱ってしまう。さらに、一方の記憶装置への書き込みが成功しており、データ修復可能あるにも関わらずホストシステムに当該書き込み処理に対して書き込みエラーを通知してしまうおそれがある。
本発明は、複数のコマンドを一度に扱うプロトコルを用いた際に、同一のキュー位置における複数の記憶装置の各々の応答に応じてホストシステムに応答可能なミラーリングシステムを提供することを目的とする。
本発明によれば、不揮発性の第1記憶手段および不揮発性の第2記憶手段を有する情報処理装置であって、少なくとも2つの要求をコントローラユニットから受信する第1受信手段と、前記少なくとも2つの要求を受信した順番に前記第1記憶手段に送信する第1送信手段と、前記少なくとも2つの要求を受信した順番に前記第2記憶手段に送信する第2送信手段と、前記少なくとも2つの要求を送信した順番に対応して、前記第1記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第2受信手段と、前記少なくとも2つの要求を送信した順番に対応して、前記第2記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第3受信手段と、前記第2受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第1保持手段と、前記第3受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第2保持手段と、前記少なくとも2つの要求のうち同じ要求に対応する前記第1保持手段および前記第2保持手段が保持した各々の応答に基づいて、前記同じ要求に対応する応答を送信する第3送信手段と、を有することを特徴とする情報処理装置。
本発明によれば、複数のコマンドを一度に扱うプロトコルを用いた際に、複数の記憶装置の同一のキュー位置における複数の記憶装置の各々の応答に応じてホストシステムに応答可能なミラーリングシステムを提供することが可能となる。
従来のミラーリングシステムでの修復可能例 従来のミラーリングシステムでの修復不可能例 NVMeにおけるミラーリングシステムの課題説明図 情報処理装置のミラーリングシステムの構成を示すブロック図 CUの詳細ブロック図 ブリッジ装置の詳細ブロック図 第1記憶装置及び第2記憶装置の詳細ブロック図 ミラーリングシステムの動作説明図 NVMeコマンドをブリッジ装置に格納するコマンド処理を示すフローチャート NVMeコマンドがブリッジ装置に格納された後のコマンド処理を示すフローチャート 記憶装置名称とコマンド通知の関係を示すコマンド処理リスト NVMeコマンドの応答がブリッジ装置に格納された後の処理を示すフローチャート 第1記憶装置及び第2記憶装置の応答と修復及び通知の関係を示すリスト NVMeにおけるミラーリングシステムの課題説明図 NVMeコマンドの応答がブリッジ装置に格納された後の処理を示すフローチャート 第1記憶装置及び第2記憶装置の応答と修復及び通知の関係を示すリスト ミラーリングシステムの応答構成を示すブロック図
添付図面を参照して本発明の実施例を詳しく説明する。なお、以下の実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例で説明されている特徴の組み合わせのすべてが本発明の解決手段に必須のものとは限らない。
(実施例1)
図4は、本実施例に関わる情報処理装置のミラーリングシステムの構成を示すブロック図である。
本実施例の情報処理装置400は、ミラーリングシステム4を有する。ミラーリングシステム4は、コントローラユニット(以下、CU401)と、ブリッジ装置402と、第1記憶装置403と第2記憶装置404を有する。
CU401は、ブリッジ装置402と接続されており、情報処理装置400の制御コントローラとしての機能を有している。
ブリッジ装置402は、CU401と第1記憶装置403及び第2記憶装置404と接続されており、CU401から第1記憶装置403に記憶されるデータを二重化して、第2記憶装置404に記憶するミラーリングの機能を有する。
第1記憶装置403は、ブリッジ装置402と接続されており、CU401で扱うシステムソフトウェアやユーザデータ及びアプリケーションデータ等を格納する。第2記憶装置404は、ブリッジ装置402と接続されており、第1記憶装置403のデータを二重化したバックアップデータを格納する。第1記憶装置403と第2記憶装置404は、不揮発性の半導体記憶装置であり、例えばSSDである。
図5は、CU401の詳細ブロック図である。情報処理装置400のコントローラユニットのハードウェア構成を示すブロック図である。本実施例では、情報処理装置400の例として画像形成装置を示す。画像形成装置は例えばスキャン機能やプリント機能等、複数の機能が一体化された、いわゆるMFP(多機能型周辺装置)として実現される。情報処理装置400は、装置全体を制御するCU401、操作部516、スキャナ512、プリンタ514を含む。
操作部516は、ユーザからのジョブ実行等の指示の入力を受け付けるためのテンキーや各種ハードキー等を含み、また、ユーザへ装置情報やジョブ進捗情報等、または、情報処理装置が実行可能な機能の設定画面を表示する表示パネルを含む。スキャナ512は、セットされた原稿上の画像を光学的に読み取る画像入力デバイスである。プリンタ514は、画像データに基づいて、印刷用紙等の記録媒体に画像を印刷する画像出力デバイスである。
操作部516は、CU401に含まれる操作部インタフェース(I/F)515に接続される。スキャナ512、プリンタ514はそれぞれ、コントローラユニット401に含まれるスキャナ処理部511、プリンタ処理部513に接続される。このような構成により、操作部516、スキャナ512、プリンタ514はそれぞれ、CU401から制御されて動作する。
ブリッジ装置402、第1記憶装置403と第2記憶装置404は、後述の図6および図7で詳細を説明する。CU401は、CU401の各ブロックを統括的に制御するCPU501を含む。CPU501は、システムバス417を介して、MEM504、ROM503、操作部I/F515、ネットワークI/F507、ファクスI/F517、画像処理部509、デバイスI/F510、PCIeI/F502と接続される。CPU501は、ROM503に記憶された制御プログラム等に基づいて接続される各種デバイスとのアクセスを統括的に制御するとともに、CU401で実行される各種処理についても統括的に制御する。
PCIe−IF502は、PCI−Express規格のインタフェースであり、CPU501からの要求に応じてブリッジ装置402をEndpointとして、ブリッジ装置402との送受信するデータのやり取りと行う。
ROM503は、不揮発性メモリであり、ブリッジ装置402のブートプログラムや制御プログラム等が格納される。
MEM504は、汎用的な揮発性のRAM(DRAM等のメモリ)であり、一時的にデータが格納され、CPU501のワークメモリとして働く。MEM504には、Non−Volatile Memory Express(NVMe)プロトコルで使用するSubmission Queue(SQ)505及びCompletion Queue(CQ)506が構成される。
SQ505は、MEM504上に生成されるリングバッファのキューであり、NVMeのコマンドをやり取りするためにCPU501で生成したNVMeコマンド(要求)が順々に格納される。
CQ506は、MEM504上に生成されるリングバッファのキューであり、Endpointであるブリッジ装置402からのコマンド処理完了通知が順々に格納される。
操作部I/F515は、操作部516との間で情報の入出力を行うためのインタフェースである。操作部I/F515は、CPU501からの指示により、表示用データを操作部516へ出力し、また、ユーザが操作部516上で入力した情報を、CPU501へ伝送する。
ネットワークI/F507は、有線や無線媒体のLANと接続され、情報処理装置とLANで接続された機器との間の情報の入出力を可能にする。ネットワークI/F507は、入力された情報を一時的に記憶するメモリに保持する。ネットワークI/F507は、LANに対応した構成を有し、例えば、無線距離が数十cm程度の近距離無線通信(NearFieldCommunication)に対応した構成を有する場合もある。その場合には、携帯無線端末との間で相互に通信が行われる。
ファックスI/F517は、回線と接続され、情報処理装置と回線で接続された機器との間の情報の入出力を可能にする。ファックスI/F507は、入力された情報を一時的に記憶するメモリに保持する。
画像処理部509は、汎用的な画像処理を実行する。例えば、LANを介して外部から取得した画像データに対して、拡大/縮小、回転、変換等の処理を実行する。また、画像処理部509は、LANを介して受信したPDLコードをビットマップ画像へ展開する処理を実行する。また、画像処理部509は、プリンタ処理部513を介してプリンタ514で出力する場合に、第1記憶装置403に圧縮・符号化されて記憶されている画像データをプリンタ処理部513で処理可能な形式にするための処理を実行する。
デバイスI/F510は、スキャナ処理部511およびプリンタ処理部513を介してスキャナ512やプリンタ514に接続され、画像データの同期系/非同期系の変換や、設定値、調整値等を伝送する。また、デバイスI/F510は、スキャナ512やプリンタ514での状態情報をCPU501へ伝送する。その状態情報は、例えば、スキャナ512やプリンタ514で発生したジャムなどのエラー情報を含む。
スキャナ処理部511は、スキャナ512で読み取られて入力した読取データに対して、補正、加工、像域分離、変倍、2値化処理などのスキャン機能に対応した各種処理を行う。
スキャナ512は、不図示の自動連続原稿給送装置と圧板読取装置を含み、原稿ガラス台に設置された原稿の読取りや、複数枚の原稿の両面読取りなども実行可能である。また、不図示の給送装置カバーの開閉、不図示の原稿カバーの開閉、原稿の有無、原稿サイズ検知等を行うセンサがスキャナ512に設けられている。それらのセンサの検知信号やスキャナ512の状態情報は、スキャナ処理部511とデバイスI/F510を介してCPU501へ送信され、CPU501は、スキャナ512でのエラー発生やエラー解除等の状態を認識する。
プリンタ処理部513は、プリント出力する画像データに対して、プリンタ514の出力特性に対応した出力補正、解像度変換、画像の印刷位置の調整などのプリント機能に対応した処理を行う。プリンタ514は、印刷用紙を収納するための1つ以上の不図示の給紙カセットと、トナーを収納するための1つ以上の不図示のトナートレイと、給紙カセットから紙を1枚ずつ逐次給紙可能な不図示の給紙ユニットとを含む。且つ、プリンタ514は、給紙した紙にトナーを印字するための不図示のマーキングユニットと、マーキングユニットにより印字されたトナーを熱と圧力により定着させるための不図示の定着ユニットを含む。各給紙カセットの開閉状況や用紙残量、トナートレイの開閉状況、不図示の給紙ユニットカバーの開閉、トナーの有無、給紙中の紙の位置などを検知するセンサがプリンタ514に設けられている。センサからの検知信号やプリンタ514の状態情報は、プリンタ処理部513とデバイスI/F510を介してCPU501へ送信され、CPU501は、プリンタ514でのエラー発生やエラー解除等の状態を認識する。
図6は、ブリッジ装置402の詳細ブロック図である。
ブリッジ装置402は、サブCPU601と、PCIe−IF602、603、604とROM605、MEM606を有する。また、ブリッジ装置402は、PCIe−IF602を介してCU401と接続され、PCIe−IF603及び604を介して第1記憶装置403及び第2記憶装置404に接続される。
サブCPU601は、ROM605に記憶された制御プログラム等に基づいて接続されるCU401と第1記憶装置403及び第2記憶装置404とのアクセスを制御する。さらにサブCPU601は、CU401から受信したコマンド群(要求群)を元に各記憶装置用のコマンド群(要求群)を生成する。
PCIe−IF(Device)602は、CU401をRootComplexとして、CU401との送受信するデータのやり取りを行う。PCIe−IF(Host1)603は、第1記憶装置403をEndpointとして、記憶装置との送受信するデータのやり取りを行う。PCIe−IF(Host2)604は、第2記憶装置404をEndpointとして、記憶装置との送受信するデータのやり取りを行う。
ROM605は、不揮発性メモリであり、ブリッジ装置402のブートプログラムや制御プログラム等が格納される。
MEM606は、汎用的な揮発性のRAM(DRAM等のメモリ)であり、一時的にデータが格納され、サブCPU601のワークメモリとして働く。また、MEM606には、NVMeプロトコルで使用するSQとCQが2組ずつ構成される(SQ607、609とCQ608、610)。
SQ607は、MEM606上に生成されるリングバッファのキューであり、NVMeのコマンドをやり取りするためにブリッジ装置402で生成したNVMeコマンドを順々に格納していく。
CQ608は、MEM606上に生成されるリングバッファのキューであり、Endpointである記憶装置からのコマンド完了通知を順々に格納する。
SQ609及びCQ610はSQ607及びCQ608と各々同様である。
図7は、第1記憶装置403及び第2記憶装置404の詳細ブロック図である。
第1記憶装置403は、SSDコントローラ701と、PCIe−IF702と、DRAM703と、NAND FLASH704を有する。また、第1記憶装置403は、PCIe−IF702を介して、ブリッジ装置402に接続される。また、第2記憶装置404は、第1記憶装置403と同等の構成であるため第2記憶装置404の構成要件である705〜708の説明を省略する。
SSDコントローラ701は、記憶装置内で実行されるファームウェアを処理するプロセッサや、DRAM703を制御するDRAMコントローラや、NAND FLASH704を制御するNAND FLASHコントローラが搭載されている。
PCIe−IF702は、ブリッジ装置402をRootComplexとして、ブリッジ装置402との送受信するデータのやり取りを行う。
DRAM703は、キャッシュ用のメモリであり、NAND FLASH704に対してデータを書き込む前に、そのデータを一時的に保持する。
NAND FLASH704は、実際にデータを記録するデバイスであり、データの読み書きが行われる。ここで言うデータとは、例えばシステムソフトウェアプログラム、履歴データ、画像データ、テーブルなどである。
なお、第1記憶装置403と第2記憶装置404には、データの書き込み時には同じデータが両方の記憶装置に記憶されるが、データの読み出し時には、片方の記憶装置から読み出せばよい。以下の説明では、第1記憶装置403をマスタの記憶装置、第2記憶装置404をスレーブの記憶装置として扱い、マスタの記憶装置からデータの読み出し処理を行う構成とする。
図8のミラーリングシステムの動作説明図を用いて、ミラーリングシステム4の動作を詳細に説明する。
まずCU401のMEM504の構成について説明する。SQ505は、キューの先頭要素としてHeadポインタ801、キューの末尾要素としてTailポインタ802を用いてコマンドを管理する。CQ506は、キューの先頭要素としてHeadポインタ803、キューの末尾要素はTailポインタ804を用いてコマンド応答(応答群)を管理する。なお、SQ505及びCQ506には、Headポインタ801(803)とTailポインタ802(804)に挟まれたキューにコマンドが格納される。つまり、HeadポインタとTailポインタが同じ位置にある場合、キューは空であることを示す。
次にブリッジ装置402の構成について説明する。ブリッジ装置402のSQTD813は、Submission Queue Tail Doorbellの略である。CQHD814は、Completion Queue Head Doorbellの略である。
SQTD813は、CU401から受け付けたSQ505のTailポインタ802の位置情報を記憶し、記憶した位置情報をサブCPU601に通知するためのレジスタである。CQHD814は、CU401内のCPU501がブリッジ装置402からのコマンド処理完了通知を受けてCQ506に格納された情報の内容を確認したことをCQ506のHeadポインタ803の位置情報を更新して通知するレジスタである。なお、SQTD813とCQHD814は、図6に示すPCIeIF602に含まれてもよいし、ブリッジ装置402の内部にSQTD813とCQHD814を構成するレジスタとして有してもよい。
MEM606のSQ607は、CU401のSQ505からTailポインタ802の情報を受け付けて、SQ505に格納されたコマンドを取得し格納する。そして、SQ607は、受け付けた情報をキューの先頭要素としてHeadポインタ805、キューの末尾要素としてTailポインタ806として管理する。
コマンド格納後、SQ607は、第1記憶装置403のSQTD815にTailポインタ806の情報を通知する。
また、CQ608は、キューの先頭要素としてHeadポインタ807、キューの末尾要素はTailポインタ808を用いて管理される。そして、CQ608は、第1記憶装置403からのコマンド処理完了通知(応答群)を格納する。そして、CQ608に格納されたコマンド処理完了通知をブリッジ装置402にて処理し終えると、CQ608のHeadポインタ807の位置情報を更新してCQHD816に通知する。
MEM606のSQ609は、CU401のSQ505からTailポインタ802の情報を受け付けて、SQ505に格納されたコマンドを取得し格納する。そして、SQ609は、受け付けた情報をキューの先頭要素としてHeadポインタ809、キューの末尾要素としてTailポインタ810として管理する。
コマンド格納後、SQ609は、第2記憶装置404のSQTD817にTailポインタ810の情報を通知する。
また、CQ610は、キューの先頭要素としてHeadポインタ811、キューの末尾要素はTailポインタ812を用いて管理される。そして、CQ610は、第2記憶装置404からのコマンド処理完了通知(応答群)を格納する。そして、CQ610に格納されたコマンド処理完了通知をブリッジ装置402にて修理し終えると、CQ610のHeadポインタ811の位置情報を更新してCQHD817に通知する。
さらに、第1記憶装置403からのコマンド処理完了通知と第2記憶装置404からのコマンド処理完了通知をブリッジ装置402が共に処理し終えたら、そのコマンド処理完了通知をCQ506に通知し格納する。
次に第1記憶装置403の構成について説明する。
SQTD815とCQHD816は、第1記憶装置403内のレジスタである。SQTD815は、MEM606のSQ607からTailポインタ806の情報を受け付ける。
SSDコントローラ701は、受け付けたTailポインタ806の情報を用いて、SQ607のHeadポインタ805からTailポインタ806まで、コマンドを取得して、それらコマンド処理を順に実行する。SSDコントローラ701は、コマンド処理を実行すると、コマンド処理結果を応答としてCQ608に送信し、格納される。
そして、CQ608内に格納されたコマンド処理結果応答をブリッジ装置402で結果内容を確認し終えると、CQ608のHeadポインタ807の位置情報を更新してCQHD816へ通知される。
次に第2記憶装置404の構成について説明する。
SQTD817とCQHD818は、第2記憶装置404内のレジスタである。SQTD817は、MEM606のSQ609からTailポインタ810の情報を受け付ける。
SSDコントローラ705は、受け付けたTailポインタ810の情報を用いて、SQ609のHeadポインタ809からTailポインタ810まで、コマンドを取得して、それらコマンド処理を順に実行する。SSDコントローラ705は、コマンド処理を実行すると、コマンド処理結果を応答としてCQ610に送信し、格納される。
そして、CQ610内に格納されたコマンド処理結果応答をブリッジ装置402で結果内容を確認し終えると、CQ610のHeadポインタ811の位置情報を更新してCQHD818へ通知される。
図8に示すミラーリングシステム4でのコマンドの授受について具体例を用いて説明する。
CU401のCPU501は、第1記憶装置403に対してNVMeプロトコルによるIOアクセスを行うために、NVMeコマンドを作成する。
なお、CPU501が、IOアクセスを行う状況は、例えば、スキャナ512が原稿を読み込むことで生成したデータを第1記憶装置403に記憶させる場合や、記憶したデータを読み出して印刷処理を実行する場合がある。また、例えば、ネットワークIFを介してPDLデータを受け付けて第1記憶装置403にデータを記憶させ、記憶させたデータの読み出し、印刷処理を実行する場合である。さらに、例えば、ファックスIFを介してファクシミリデータを受け付けて第1記憶装置403にデータを記憶させ、記憶させたデータの読み出し、印刷処理を実行する場合である。これらのような場合には、データを記憶装置に書き込む、またはデータを記憶装置から読み出す必要があるためCPU501が、第1記憶装置403に対してNVMeプロトコルによるIOアクセスを実行する。なお、本実施形態において、これらの例に限定はされない。
CPU501はNVMeコマンドを作成すると、MEM504上のSQ505に順々に格納していく。NVMeコマンドを格納する度にSQ505のTailポインタ802を更新し、SQ505内に格納されているNVMeコマンドの末尾位置情報を更新していく。
Tailポインタ802が更新されると、CU401は新たにNVMeコマンドが格納されたことをブリッジ装置402に通知する。そのため、通知を受け取ったブリッジ装置402内のSQTD813は、SQ505の最終Tailポイント802の値を書き込む。
ブリッジ装置402は、CU401上で新たにNVMeコマンドが格納されたことをSQTD813の値が更新されたことにより判断する。
ブリッジ装置402は、SQTD813の値が更新されると、SQ505内のHeadポインタ801位置からTailポインタ802位置まで、順に各々のポインタの位置に配置されたNVMeコマンドを引き出す。具体的には、NVMeコマンドの読み出しを行うコマンドを送ることで、CU401にNVMeコマンドを送信させる。
引き出したNVMeコマンドは、ブリッジ装置402内のMEM606のSQ607(Host1)とSQ609(Host2)に格納される。
以下、ブリッジ装置402内のSQ607及びSQ609にNVMeコマンドを格納するコマンド処理を図9のフローチャートを用いて詳細に説明する。
ブリッジ装置402のSQTD813がCU401からSQ505のTailポインタ802の位置情報通知(以下、Doorbell通知と称する)を受け付けることにより、位置情報が更新される。
位置情報の更新後、ブリッジ装置402はNVMeコマンドの取得を開始し、ブリッジ装置402内のSQ607及びSQ609に新たなNVMeコマンドを格納する。図9は、これら流れを示したフローチャートである。
図9は、サブCPU601によって実行され、ブリッジ装置402のSQTD813がCU401からのSQ505のDoorbell通知を受け付けることにより開始する。
S901においてサブCPU601は、SQTD813の値が更新されたかを確認する。これによって、CU401のSQ505に新たなNVMeコマンドが格納されたかどうかを確認する。SQTD813の値が更新していればS902に進み、更新がなければS901にとどまる。
S902において、サブCPU601は、CU401上に準備されたNVMeコマンドをSQ505からリードすることで1コマンドを引き出し、S903に進む。
S903において、サブCPU601が引き出したNVMeコマンドを第1記憶装置403側のSQ607に書き込み、S904に進む。S904において、サブCPU601が引き出したNVMeコマンドを第2記憶装置404側のSQ309に書き込み、S905に進む。
S905は、ブリッジ装置402がCU401上のSQ505に準備されたNVMeコマンドをすべて引き出し切ったかを判断する。コマンドを引き出した際の参照したSQ505のポインタとSQT8D13の値を確認し、同一値であればSQ505に格納された最終コマンドを引き出したと判断できる。すべてのコマンドを引き出した場合終了となり、まだコマンドが残っている場合はS902に戻り、再度コマンドの引き出しを行う。
なお、ステップS902において、1コマンドずつ複数回に分けて引き出す構成を示したが、すべてのコマンドを1度に引き出して処理を行ってもよいし、複数のコマンドを複数回に分けて引き出す構成でもよい。
図10のフローチャートを用いて、ブリッジ装置402のSQ607及びSQ609にNVMeコマンドが格納された後のコマンド処理を説明する。
S1001においてサブCPU601は、ブリッジ装置402内のSQ(Host1)607に、新たなNVMeコマンドが格納されたかどうかの確認を行う。
具体的にはサブCPU601が、SQ(Host1)607のHeadポインタ805とTailポインタ806の差を確認する。差がある場合には、新たにNVMeコマンドを格納されたことになり、S1002に進む。差がない場合には、新たなNVMeコマンドが格納されていないことになり、S1005に進む。
S1002においてサブCPU601は、ブリッジ装置402内のSQ(Host1)607に新たなNVMeコマンドが格納されたことを第1記憶装置403に通知する。サブCPU601は、Doorbell通知を使い、SQ(Host1)607のTailポインタ806の位置情報を第1記憶装置403のSQTD815に書き込む。また、サブCPU601は、第1記憶装置403にNVMeコマンド処理依頼をしたことを記憶するために図11に示すコマンド処理リスト1100の第1記憶装置通知フラグ1103をON(1とする)にする。
ここで、コマンド処理リスト1100の説明をする。図11に示すコマンド処理リストは、各記憶装置を示す記憶装置名称1101とコマンド通知の関係を示す1102で構成される。
例えば、第2記憶装置に対してコマンド処理の通知を行っている場合、コマンド通知フラグの値1104はON(1)となり、コマンド処理通知を行っていない場合、コマンド通知フラグの値1104はOFF(0)となる。
S1003において、第1記憶装置403のSQTD815の値が更新したことで、第1記憶装置403のSSDコントローラ701により、SQ607からNVMeコマンドの引き出しが行われる。このとき、サブCPU601は、第1記憶装置403からコマンドの送信要求を受け、SQ607に保持されたNVMeコマンドを送信する(送信処理)。このときサブCPU601は、複数のコマンドを1度に送信してもよいし、コマンドを1つずつ送信してもよい。そして、SSDコントローラ701は、引き出されたコマンドの内容に則って処理を行い、コマンド処理が終わるごとに、ブリッジ装置402内の第1記憶装置403側のCQ(Host1)608にコマンド処理完了の書きこみを行う。そして、第1記憶装置403は、全コマンドの処理が完了するとブリッジ装置402に割り込みによる通知を行う。
S1004においてサブCPU601は、第1記憶装置403でのNVMeコマンド処理が完了したかどうかの判断を行っている。サブCPU601は、第1記憶装置403からのNVMeコマンド処理完了割り込みが発行されているかどうかを確認する。割り込みで完了割り込みが発行されていればコマンド処理リストの第1記憶装置通知フラグをOFFにしてS1005に進み、完了割り込みが発行されていなければS1004にとどまり、第1記憶装置403でのコマンド処理の完了を待つ。
S1005においてサブCPU601は、ブリッジ装置402内のSQ(Host2)609に、新たなNVMeコマンドが格納されたかどうかの確認を行う。サブCPU601は、SQ(Host2)609のHeadポインタ809とTailポインタ810の差を確認し、差があれば新たにNVMeコマンドを格納されたことになる。新たなNVMeコマンドが格納されていればS1006に進み、新たなNVMeコマンドが格納されていなければ終了となる。
S1006においてサブCPU601は、ブリッジ装置402内のSQ(Host2)609に新たなNVMeコマンドが格納されたことを第2記憶装置404に通知する。サブCPU601は、Doorbell通知を使い、SQ(Host2)609のTailポインタ810の位置情報を第2記憶装置404のSQTD817に書き込む。また、サブCPU601は、第2記憶装置404にNVMeコマンド処理依頼をしたことを記憶するためにコマンド処理リスト1100の第2記憶装置通知フラグ1104をON(1とする)にする。
S1007において、第2記憶装置404のSQTD817の値が更新したことで、第2記憶装置404のSSDコントローラ705により、SQ609からNVMeコマンドの引き出しが行われる。このとき、サブCPU601は、第2記憶装置404からコマンドの送信要求を受け、SQ609に保持されたNVMeコマンドを送信(送信処理)する。このとき、サブCPU601は、複数のコマンドを1度に送信してもよいし、コマンドを1つずつ送信してもよい。
そして、SSDコントローラ705によって、引き出したコマンドの内容に則って処理を行い、コマンド処理が終わるごとに、ブリッジ装置402内の第2記憶装置404側のCQ(Host2)610にコマンド処理完了の書きこみが行われる。そして、第1記憶装置404は、全コマンドの処理が完了するとブリッジ装置402に割り込みによる通知を行う。
S1008において、サブCPU601は、第2記憶装置404でのNVMeコマンド処理が完了したかどうかの判断を行っている。サブCPU601は、第2記憶装置404からのNVMeコマンド処理完了割り込みが発行されているかどうかを確認する。割り込みで完了割り込みが発行されていればコマンド処理リストの第2記憶装置通知フラグをOFFにして終了となり、完了割り込みが発行されていなければS1008にとどまり、第2記憶装置404でのコマンド処理の完了を待つ。
S1008までの処理が完了すると、第1記憶装置403と第2記憶装置404共にNVMeコマンドが処理され、そのコマンド結果が各々CQ608とCQ610に格納されたこととなる。
図12のフローチャートを用いて、ブリッジ装置402のCQ608及びCQ610にNVMeコマンドのコマンド処理完了情報が書き込まれた後の処理を説明する。図12は、記憶装置が複数のコマンドにおける記憶処理(データの書き込み処理)を完了すると開始する。
S1201からS1203にて、CQ608及びCQ610に書込まれたコマンド処理完了情報にエラー処理情報が含まれているかを順々に確認していく。確認した情報は図13のリビルドリスト1300で管理される。リビルドリスト1300は、記憶装置でのエラー処理情報の有無とそれに伴う記憶装置のデータ修復及びCU401への通知手段を示す情報が格納される。
CQ1キュー位置1301の列は、CQ608のポインタ情報を格納する。最初の行にはCQ608のHeadポインタ807に一致した情報が格納され、最終行のCQ608のTailポインタ808の情報まで順々に格納される。
CQ2キュー位置1302の列は、CQ610のポインタ情報を格納する。最初の行にはCQ610のHeadポインタ811に一致した情報が格納され、最終行のCQ610のTailポインタ812の情報まで順々に格納される。
CQ1エラー情報1303の列は、CQ1キュー位置1301に格納されている位置情報の箇所のコマンド処理完了情報にエラー処理情報が含まれているかどうかを示す。エラー処理情報がある場合には“1”が書き込まれ、ない場合には“0”が書き込まれる。
CQ2エラー情報1304の列は、CQ2キュー位置1302に格納されている位置情報の箇所のコマンド処理完了情報にエラー処理情報が含まれているかどうかを示す。エラー処理情報がある場合には“1”が書き込まれ、ない場合には“0”が書き込まれる。
修復処理および通知1305の列は、データの修復処理の有無とCU401への通知の方法を示す。CQ1エラー情報1303とCQ2エラー情報1304共にエラー処理情報がない場合は、修復処理を行わずCU401にマスタ記憶装置であるCQ(Host1)608のコマンド処理完了情報を通知することを示す“0”が書き込まれる。(リビルドリスト1300内のアドレス1310で示されている行を参照)
CQ1エラー情報1303もしくはCQ2エラー情報1304の一方にエラー処理情報がある場合には修復処理を行いCU401に正常な記憶装置のCQのコマンド処理完了情報を通知することを示す“1”が書き込まれる。(リビルドリスト1300内のアドレス1311で示されている行を参照)
CQ1エラー情報1303とCQ2エラー情報1304共にエラー処理情報がある場合は、修復処理を行わずCU401にマスタ記憶装置であるCQ608のコマンド処理完了情報を通知することを示す“2”が書き込まれる。(リビルドリスト1300内の1312で示されている行を参照)
記憶装置アドレス1306の列は、コマンドが処理を実施した記憶装置のアドレス情報が書き込まれる。
図12の説明に戻る。S1201において、サブCPU601は、ブリッジ装置402内のCQ608に格納されているコマンド処理完了情報にエラー処理情報が含まれているか確認する。
確認を行ったCQ608のポインタ情報をCQ1キュー位置1301に格納する。当該のコマンド処理完了情報にエラー処理情報が含まれている場合には、CQ1エラー情報1303にエラーあり(1)を格納し、エラー処理情報が含まれない場合には、エラーなし(0)を格納する。また、コマンドが処理を行った記憶装置のアドレスを記憶装置アドレス1306に格納する。
S1202において、サブCPU601は、ブリッジ装置402内のCQ610に格納されているコマンド処理完了情報にエラー処理情報が含まれているか確認する。確認を行ったCQ610のポインタ情報をCQ2キュー位置1302に格納する。そして、当該のコマンド処理完了情報にエラー処理情報が含まれている場合には、CQ2エラー情報1304にエラーあり(1)を格納し、エラー処理情報が含まれない場合には、エラーなし(0)を格納する。
S1203において、サブCPU601は、CQ608とCQ610のコマンド処理完了情報を全て確認し終えたかを判断するために、確認し終えたコマンド処理完了情報のキューの位置情報とCQのTailポインタが一致しているか確認する。確認し終えたコマンド処理完了情報のキューの位置情報とCQのTailポインタが一致している場合は、すべて情報を確認し終えているため、S1204に進む。一致していない場合には、次のコマンド処理完了情報を確認するために、S1201に進む。
S1201からS1203で、各CQのコマンド処理完了情報にエラー情報を含んでいるかの確認が終わり、その結果からリビルドリスト1300が作成される。
S1204において、サブCPU601は、作成されたリビルドリスト1300の修復処理および通知1305を参照して、“1”が書き込まれているか否かを確認し、確認結果に応じて遷移する。言い換えると、CQ608とCQ610の同一のキュー位置において、1つの記憶装置のみでエラーが発生したかを確認する。
修復処理および通知1305において“1”が書き込まれていない場合、すなわち修復処理および通知1305に“0”または“2”が書き込まれている場合は、S1207に進む。言い換えると、CQ1エラー情報1303とCQ2エラー情報1304の両方が“0”である場合と、両方が“1”である場合は、S1207に進む。さらに言い換えると、1つの記憶装置のみでエラーが発生している状況ではない場合はS1207に進む。
修復処理および通知1305において“1”が書き込まれている場合、すなわち修復処理および通知1305に“0”または“2”が書き込まれていない場合は、修復処理を実行するためにS1205に進む。言い換えると、CQ1エラー情報1303とCQ2エラー情報1304のどちらか一方が“0”、他方が“1”である場合に、S1205に進む。さらに言い換えると、1つの記憶装置のみでエラーが発生している場合には、S1205に進む。
S1205において、サブCPU601は、ミラーリングシステムにおいて記憶装置404および記憶装置403の両方に同じコマンドを送信するミラー状態を解除する。そして、サブCPU601は、CQ608とCQ610の同一のキュー列においてエラーが発生していないCQに対応する記憶装置からデータを読み出す。例えば、リビルドリスト1300のアドレス1311の行において、コマンド処理完了情報にエラー処理情報を含まないことを示す“0”が書き込まれたCQ610に対応する記憶装置404のアドレスBからデータを読み出す。読み出したデータはブリッジ装置402内のMEM606を用いて一時保存してもよいし、ブリッジ装置402内にリビルド専用のバッファメモリを用意して一時保存してもよい。S1205を終えるとS1206に遷移する。
S1206において、サブCPU601は、CQ608とCQ610の同一のキュー列においてエラーが発生したCQに対応する記憶装置にS1205にて読み出したデータを書き込む。例えば、リビルドリスト1300のアドレス1311の行において、コマンド処理完了情報にエラー処理情報を含むことを示す“1”が書き込まれたCQ608に対応する記憶装置403のアドレスBに、S1205の例で読み出したデータを書き込む。S1206を終えるとS1207に遷移する。
S1207において、サブCPU601は、リビルドリスト1300の最終行まで修復処理の判定が行われたかを確認する。すべて修復処理の判定が完了している場合には、S1208に進む。判定がすべて完了していない場合には、S1204に進む。
最終行までの修復処理の例を、図13を用いて説明する。図13であれば、前述したアドレス1311の行において修復処理を行い、アドレス1313の行で修復処理を行う。アドレス1313の行では、まずコマンド処理完了情報にエラー処理情報を含まないことを示す“0”が書き込まれたCQ608に対応する記憶装置403のアドレスDからデータを読み出す。そして、コマンド処理完了情報にエラー処理情報を含むことを示す“1”が書き込まれたCQ610に対応する記憶装置403のアドレスDに、読み出したデータを書き込む。
S1208において、サブCPU601は、ブリッジ装置402で持っているコマンド処理完了情報をCU401に格納する。CQ608またはCQ610のどちらのコマンド処理完了情報をCU401に格納するか判断するために、リビルドリスト1300の修復処理および通知1305を参照する。
リビルドリスト1300の修復処理および通知1305に“0”が書き込まれている場合、CU401のCQ506にマスタ記憶装置であるCQ608のコマンド処理完了情報を書き込む。修復処理および通知1305に“1”が書き込まれている場合、CU401のCQ506に正常であることを示す記憶装置のCQのコマンド処理完了情報を書き込む。ここで“1”を書き込まない理由は、修復処理によって、記憶装置403と記憶装置404にデータを正常に記憶することが出来たからである。
修復処理および通知1305に“2”が書き込まれている場合、CU401のCQ506にマスタ記憶装置であるCQ608のコマンド処理完了情報を書き込む。このとき、マスタ記憶装置のコマンド処理エラー情報を書き込む理由は、記憶装置403と記憶装置404のどちらもエラーとなっているため、修復処理できないからである。
S1209においてサブCPU601は、記憶装置に対するコマンド処理が完了して、その処理完了通知をすべてCU401のCQ506に書き込み終えたことをCU401に通知する。サブCPU601は、割り込みを使用してCU401に終了したコマンド処理のコマンド完了情報がCQ506にすべて書き終えたことを通知する。
S1208のCU401のCQ506への通知の仕方について具体的な説明を図17(a)(b)を用いて行う。図17は、ミラーリングシステムの応答構成を示すブロック図である。図17において“×”は、エラーとなるコマンド(応答)を示している。“×”がついていないものは、正常となるコマンド(応答)を示している。図17では、アドレス1310に対応するキューをコマンドA、アドレス1311に対応するキューをコマンドB、アドレス1312に対応するキューをコマンドC、アドレス1313に対応するキューをコマンドDとする。また各コマンドに対応する応答を応答A〜応答Dとする。なお、従来との通知の差分を容易な形で説明するために、アドレス1312については、正常となるコマンドであるものとする。その他のコマンドは省略する。
従来の通知の仕方を図17(a)に示す。従来の通知では、1度の書き込み処理に対して応答を行う。そのため従来の通知の仕方を適用すると、次のようになる。サブCPU601は、記憶装置403の応答として、応答Bにおいてエラーを受ける。また、記憶装置404の応答として、応答Dにおいてエラーを受ける。そのため、サブCPU601は、CU401に、エラーが生じた旨の応答を1つの応答で返す。そして、CU401は、コマンドA、コマンドB、コマンドC、コマンドDのリトライを実行する。
一方、本実施例では、図17(b)に示すようにサブCPU601は、CU401から受信した各コマンドの各々に対して応答を返す。これにより、CU401は、各コマンドの各々に対してエラーか正常かを判断することが可能となる。さらに、本実施例では、図17(b)に示すようにアドレス1311とアドレス1313に修復処理を実行し、アドレス1311とアドレス1313のキュー位置において正常である旨の通知をすることが出来る。そのため、サブCPU601は、CU401に、応答Aから応答Dにおいて正常である旨の通知を返す。
つまり、従来の構成を適用すると、複数のコマンドを1度の書き込み処理として扱ってしまう。さらに、一方の記憶装置への書き込みが成功しており、データ修復可能であるにも関わらずホストシステムに当該書き込み処理に対して書き込みエラーを通知してしまうおそれがある。
しかし、本実施例の構成によれば、サブCPUは、両記憶装置の応答を確認した上でCU401に各コマンドに対する応答を送信することが可能となる。そして、データ修復可能なものはデータ修復するためコマンドのリトライを削減することが可能となる。
以上の本実施例の構成によれば、複数のコマンドを一度に扱うプロトコルを用いた際に、複数の記憶装置の同一のキュー位置における複数の記憶装置の各々の応答に応じてホストシステムに応答可能なミラーリングシステムを提供することが可能となる。
(実施例2)
実施例1では、ブリッジ装置402に格納されたコマンド処理完了情報のエラー処理情報を基に、リビルドリスト1300を作成し、1つ1つのコマンド単位で修復を行うか判定していく構成のミラーリングシステムの説明をした。
実施例2では、1度に扱う複数コマンドの中で、同アドレスへの書き込みアクセスが複数あり、その際の書き込みデータが異なる場合の修復方法に関して図14〜図16を用いて説明する。図4〜図11までは実施例1と同様であるため説明を省略する。
図14に本実施例の具体的な状況図を示す。コマンドAからコマンドEはNVMeプロトコルで1度に扱う1つのコマンド群であり、コマンドBとコマンドEは同アドレスへのデータ書き込みであるが、書き込みを行う順番と書き込むデータが異なる。
このような状況下で、ブリッジ装置を介して第1記憶装置と第2記憶装置にコマンド処理を実施する。その結果、第1記憶装置側ではコマンドBがエラーを起こし、第2記憶装置側ではコマンドEがエラーを起こした状況を示している。
図14で示す状況では、コマンドBで書き込んだデータは、最終的な書き込みを行ったコマンドEで書き込んだデータで上書きされているので、修復処理ではコマンドEの修復処理のみを行うように制御する。すなわち、コマンドBの修復処理はスキップし、コマンドEの修復処理のみを行う。以下で具体的な方法を説明する。
実施例2において、ブリッジ装置402のCQ608およびCQ610に各記憶装置のコマンド処理完了情報が書き込まれた後、ブリッジ装置402でのデータの修復処理を説明する。本実施例では、図15を用いて実施例1の図12との差分を説明する。同様の構成には同様の番号を付して説明を省略する。
S1501において、サブCPU601は、例として図16(a)に示すリビルドリスト1600aの修復処理および通知1305を参照して、修復処理を実行するものか否かを確認する。具体的には、修復処理および通知1305が“1”であるか否かを確認する。なお、実施例1の図12のように言い換えてもよい。
リビルドリスト1600aの確認は、リビルドリスト1600aの末尾から確認を行っていく。なお、図16(a)は図13で説明したリビルドリスト1300と同じ構成である。
サブCPU601は、リビルドリスト1600aの修復処理および通知1305を参照し、修復処理を実行することを示す“1”が書き込まれているかを確認する。そして修復処理を実行するもの(“1”が書き込まれているもの)でリビルドリスト内に記憶装置アドレス1306が同一アドレスになっているものがあるか否かを判断する。同一アドレスが存在すれば、S1502に進む。同一アドレスが存在しなければ、S1503に進む。言い換えると、CQ608とCQ610の同一のキュー位置で、一方が“1”、他方が“0”の構成が、複数のキュー位置にあり、且つ、複数のキュー位置の中に書き込み先が同一アドレスのキュー位置が有る否かを判断する。
S1502において、サブCPU601は、同一アドレスの修復処理のキュー位置の中で、コマンド処理順が最新以外の物の修復処理および通知1305の“1”を“3”に書き換える。言い換えると、同一のアドレスに最後に書き込みを行ったキュー位置に対応する修復および通知1305を1として残し、それ以外のキュー位置に対応する修復および通知1305を3に書き換える。修復処理および通知1305に“3”が書き込まれた場合、修復処理を行わず、CU401に通知するCQの情報は正常な記憶装置のCQのコマンド処理完了情報(“0”)を通知することを示す。
図16を用いて具体的に説明する。図16(a)のリビルドリスト1600aの末尾から、修復処理を実行することを示す“1”が書き込まれているコマンド処理を確認する。
ここで修復処理および通知に“1”が書き込まれているキュー位置の記憶装置アドレス1306を確認する。ここでは、アドレス1602がアドレスBであることを確認する。そして、修復処理および通知に“1”が書き込まれている他のキュー位置を確認し、アドレスBの有無を確認する。
ここでは、アドレス1601がアドレスBとなっている。これより以前のコマンド処理の中で修復処理を実行するキュー位置で同一アドレスの物があるか確認する。そして、アドレス1601は、アドレス1602よりも前に書き込みを行っているため、1601の行の記憶装置アドレス1306に対応する修復処理および通知1305の“1”の情報を“3”に書き換える。置き換えた構成を図6(b)に示す。図6(b)では、通知処理及び通知1603が“3”に置き換えられている。
S1503において、サブCPU601は、リビルドリスト1600の最終行から1行目まで同一アドレスの修復処理の物があるかを確認し終えたかを確認する。すべての確認が完了している場合には、S1504に進む。確認がすべて完了していない場合には、S1501に進む。
S1504において、サブCPU601は、作成されたリビルドリスト1600bの修復処理および通知1305を参照して、“1”が書き込まれているか否かを確認する。言い換えると、CQ608とCQ610の同一のキュー位置において、1つの記憶装置のみでエラーが発生したかを確認する。
修復処理および通知1305において“1”が書き込まれていない場合には、(1つの記憶装置のみでエラーが発生していない場合)、すなわち修復処理および通知1305に“0”、“2”または“3”が書き込まれている場合は、S1207に進む。言い換えると、CQ1エラー情報1303とCQ2エラー情報1304の両方が“0”である場合と、両方が“1”である場合には、S1207に進む。さらに、CQ1エラー情報1303とCQ2エラー情報1304の一方が“1”で他方が“0”であり、且つ、対応する記憶装置アドレス1306が同じ場合には、S1207に進む。
修復処理および通知1605において“1”が書き込まれている場合には、すなわち修復処理および通知1605に“0”、“2”または“3”が書き込まれていない場合は、修復処理を実行するためにS1205に進む。言い換えると、CQ1エラー情報1303とCQ2エラー情報1304の一方が“1”で他方が“0”であり、且つ、対応する記憶装置アドレス1306が違う場合には、S1205に進む。さらに言い換えると、1つの記憶装置のみでエラーが発生している場合にS1205に進む。
S1509は、S1209と同様であるが、スキップしたアドレスBへの書き込みを指示するコマンドへの応答に対して、サブCPU601が正常に処理した旨のコマンドをCU401に返す点で異なる。
以上の本実施例の構成においても、複数のコマンドを一度に扱うプロトコルを用いた際に、複数の記憶装置の同一のキュー位置における複数の記憶装置の各々の応答に応じてホストシステムに応答可能なミラーリングシステムを提供することが可能となる。
(その他の実施形態)
以上、本発明の様々な例と実施形態を示して説明したが、本発明の趣旨と範囲は、本明細書内の特定の説明に限定されるものではない。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
401 CU
402 ブリッジ装置
403 第1記憶装置
404 第2記憶装置

Claims (18)

  1. 不揮発性の第1記憶手段および不揮発性の第2記憶手段を有する情報処理装置であって、
    少なくとも2つの要求をコントローラユニットから受信する第1受信手段と、
    前記少なくとも2つの要求を受信した順番に前記第1記憶手段に送信する第1送信手段と、
    前記少なくとも2つの要求を受信した順番に前記第2記憶手段に送信する第2送信手段と、
    前記少なくとも2つの要求を送信した順番に対応して、前記第1記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第2受信手段と、
    前記少なくとも2つの要求を送信した順番に対応して、前記第2記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第3受信手段と、
    前記第2受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第1保持手段と、
    前記第3受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第2保持手段と、
    前記少なくとも2つの要求のうち同じ要求に対応する前記第1保持手段および前記第2保持手段が保持した各々の応答に基づいて、前記同じ要求に対応する応答を送信する第3送信手段と、を有することを特徴とする情報処理装置。
  2. 前記第1保持手段が保持した応答および前記第2保持手段が保持した応答にエラーを示す情報が含まれるかを確認する確認手段をさらに有し、
    前記第3送信手段は、前記同じ要求に対応する前記第1保持手段および前記第2保持手段が保持した各々の応答に前記エラーを示す情報が含まれるか否かに応じた前記同じ要求に対する応答を送信することを特徴とする請求項1に記載の情報処理装置。
  3. 前記第1受信手段は、前記少なくとも2つの要求として、第1アドレスにデータを記憶させる第1要求および第2アドレスにデータを記憶させる第2要求を少なくとも受信し、
    前記第2受信手段は、少なくとも前記第1要求に対する第1応答および前記第2要求に対する第2応答を、前記第1記憶手段から順番に受信し、
    前記第3受信手段は、少なくとも前記第1要求に対する第3応答および前記第2要求に対する第4応答を、前記第2記憶手段から順番に受信し、
    前記第1保持手段は、少なくとも前記第1応答および前記第2応答を受信した順番に保持し、
    前記第2保持手段は、少なくとも前記第3応答および前記第4応答を受信した順番に保持し、
    前記第3送信手段は、前記第1応答がエラーを示す情報を含まず且つ前記第3応答がエラーを示す情報を含むことに従って、前記第1要求に対してエラーを示す情報を含まない第5応答を前記コントローラユニットに送信することを特徴とする請求項2に記載の情報処理装置。
  4. 前記第3送信手段は、前記第2応答がエラーを示す情報を含み且つ前記第4応答がエラーを示す情報を含むことに従って、前記第2要求に対してエラーを示す情報を含む第6応答を前記コントローラユニットに送信することを特徴とする請求項3に記載の情報処理装置。
  5. 前記3送信手段が前記第6応答を送信した後、前記第1受信手段は、前記コントローラユニットから第2要求を再び受信することを特徴とする請求項4に記載の情報処理装置。
  6. 前記第3送信手段は、前記第2応答または前記第4応答の一方がエラーを示す情報を含み、他方がエラーを示す情報を含まないことに従って、前記第2要求に対してエラーを示す情報を含まない第7応答を前記コントローラユニットに送信することを特徴とする請求項3乃至5のいずれか1項に記載の情報処理装置。
  7. 前記第1記憶手段と前記第2記憶手段をミラーリングシステムとしてミラー状態で制御する制御手段を有することを特徴とする請求項3乃至6のいずれか1項に記載の情報処理装置。
  8. 前記制御手段は、前記確認手段がエラーを示す情報を確認すると、ミラー状態を解除することを特徴とする請求項7に記載の情報処理装置。
  9. 前記制御手段は、
    前記第1応答がエラーを示す情報を含まず且つ前記第3応答がエラーを示す情報を含むことに従って、前記第1要求に対応する前記第1記憶手段の第1アドレスからデータの読み出しを行い、前記第1要求に対応する前記第2記憶手段の第1アドレスに前記第1記憶手段の第1アドレスから読み出したデータを書き込ませることを特徴とする請求項8に記載の情報処理装置。
  10. 前記制御手段は、前記第4応答がエラーを示す情報を含まず且つ前記第2応答がエラーを示す情報を含むことに従って、前記第2要求に対応する前記第2記憶手段の第2アドレスからデータの読み出しを行い、前記第2要求に対応する前記第1記憶手段の第2アドレスに前記第2記憶手段の第2アドレスから読み出したデータを書き込ませることを特徴とする請求項9に記載の情報処理装置。
  11. 前記第1記憶手段および前記第2記憶手段は、SSDであることを特徴とする請求項1乃至10のいずれか1項に記載の情報処理装置。
  12. 前記第3送信手段は、前記第1受信手段が受信した要求の各々に対応する応答を送信することを特徴とする請求項1乃至11のいずれか1項に記載の情報処理装置。
  13. 前記第1受信手段が受信した前記少なくとも2つの要求を、受信した順番に保持する第3保持手段を有することを特徴とする請求項1乃至12のいずれか1項に記載の情報処理装置。
  14. 前記コントローラユニットは、プリンタを制御するプリンタ処理部を含むことを特徴とする請求項1乃至13のいずれか1項に記載の情報処理装置。
  15. 前記コントローラユニットは、スキャナを制御するスキャナ処理部を含むことを特徴とする請求項1乃至14のいずれか1項に記載の情報処理装置。
  16. 不揮発性の第1記憶手段と、不揮発性の第2記憶手段と、少なくとも2つの要求をコントローラユニットから受信する第1受信手段と、前記少なくとも2つの要求を受信した順番に前記第1記憶手段に送信する第1送信手段と、前記少なくとも2つの要求を受信した順番に前記第2記憶手段に送信する第2送信手段と、前記少なくとも2つの要求を送信した順番に対応して、前記第1記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第2受信手段と、前記少なくとも2つの要求を送信した順番に対応して、前記第2記憶手段から前記少なくとも2つの要求の各々に対応する応答を受信する第3受信手段と、前記第2受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第1保持手段と、前記第3受信手段が受信した順番に前記少なくとも2つの要求に対応する応答を保持する第2保持手段と、を有する情報処理装置の制御方法であって、
    前記少なくとも2つの要求のうち同じ要求に対応する前記第1保持手段および前記第2保持手段が保持した各々の応答に基づいて、前記同じ要求に対応する応答を送信するステップと、を有することを特徴とする情報処理装置の制御方法。
  17. 請求項16に記載の制御方法を、コンピュータに実行させるためのプログラム。
  18. 請求項17に記載のプログラムを格納したコンピュータで読み取り可能な記憶媒体。
JP2019236840A 2019-12-26 2019-12-26 情報処理装置および情報処理装置の制御方法 Pending JP2021105844A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019236840A JP2021105844A (ja) 2019-12-26 2019-12-26 情報処理装置および情報処理装置の制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019236840A JP2021105844A (ja) 2019-12-26 2019-12-26 情報処理装置および情報処理装置の制御方法

Publications (1)

Publication Number Publication Date
JP2021105844A true JP2021105844A (ja) 2021-07-26

Family

ID=76918904

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019236840A Pending JP2021105844A (ja) 2019-12-26 2019-12-26 情報処理装置および情報処理装置の制御方法

Country Status (1)

Country Link
JP (1) JP2021105844A (ja)

Similar Documents

Publication Publication Date Title
JP5126595B2 (ja) 画像処理装置及び画像処理システム
JP6875808B2 (ja) 情報処理装置
JP2009081742A (ja) 画像形成装置
US10931834B2 (en) Information processing apparatus
JP2006041764A (ja) ログ記録装置、ログ記録プログラムおよび記録媒体
US8634087B1 (en) Print control apparatus, data management method, and non-transitory computer-readable medium
JP2021105844A (ja) 情報処理装置および情報処理装置の制御方法
JP2021105843A (ja) 情報処理装置および情報処理装置の制御方法
JP6406219B2 (ja) 通信装置及び画像形成装置
JP2021086583A (ja) 情報処理装置、制御装置および制御装置の制御方法
JP2018063676A (ja) 情報処理装置及びその制御方法、並びにプログラム
JP2012103873A (ja) 画像処理装置及びミラーリング判定方法
US20140146352A1 (en) Print control apparatus, image forming system, and non-transitory computer-readable medium
JP4589768B2 (ja) 情報処理装置
JP2020154376A (ja) 情報処理システム、情報処理装置及び情報処理プログラム
JP2014138265A (ja) 画像形成装置
JP2020060869A (ja) 情報処理装置、情報処理装置の制御方法、及びプログラム
US11842066B2 (en) Control apparatus and information processing system for providing a bridge apparatus between a host controller and a non-volatile storage medium to encrypt and decrypt data
US11669268B2 (en) Information processing apparatus and control method therefor
JP2006222581A (ja) 画像形成装置及びその制御方法、コンピュータプログラム及び記憶媒体
US20220206730A1 (en) Image processing apparatus, method, and non-transitory computer-readable storage medium for storing program
JP2009124553A (ja) 画像読取装置、画像読取装置の制御方法、及び画像読取装置の制御プログラム
JP2022057870A (ja) 制御装置および情報処理システムに関する。
JP5677705B2 (ja) 画像形成装置
CN104619509A (zh) 图像形成装置以及显示装置