以下、本実施の形態について図面を参照して説明する。
[第1の実施の形態]
図1は、第1の実施の形態の情報処理装置の構成例および動作例を示す図である。図1に示す情報処理装置10は、通信装置11,12を有する。通信装置11と通信装置12とは、伝送路1〜3を介して接続されている。通信装置11,12は、伝送路1〜3を介して通信を行う通信インタフェースである。また、伝送路1〜3は、それぞれシリアル伝送路である。そして、通信装置11は、伝送路1〜3のうち複数の伝送路をまとめて用いて通信装置12にデータを送信することが可能になっている。なお、通信装置11と通信装置12とは、3本の伝送路1〜3に限らず、2以上の任意の数の伝送路を介して接続されていればよい。
通信装置11は、送信部11aと制御部11bを有する。通信装置11では、伝送路1〜3を用いた通信装置12とのデータ通信が可能な状態で、伝送路1〜3の中から異常の予兆の有無の診断を行う対象伝送路が指定されると、次のような動作が行われる。なお、ここでは例として、伝送路1が対象伝送路に指定されたとする。また、データ通信可能な状態とは、例えば、データの送受信が可能な状態、データ送信中の状態、データ受信中の状態などを含み得る。
送信部11aは、伝送路1〜3のうち、対象伝送路に指定された伝送路1以外の残りの伝送路2,3を用いて通信装置12とのデータ通信が可能な状態を継続しながら、伝送路1に診断用のテスト信号を送信する。ここで、送信部11aは、通信装置12からデータを受信する機能を有してもよい。制御部11bは、伝送路1におけるテスト信号の検出結果に基づいて、伝送路1における異常の予兆の有無を診断し、診断結果を出力する。これにより、通信装置11は、伝送路1における異常の予兆の診断を、通信装置12との通信を継続しながら実行できる。すなわち、伝送路1におけるデータ通信が正常に実行されている状態において、テスト信号の検出結果を基に伝送路1において通信の異常が発生する可能性が高いか否かを判定できる。
送信部11aは例えば、図1に示すように、テスト信号出力部11a1、データ出力部11a2およびスイッチ11a3を有していてもよい。テスト信号出力部11a1は、スイッチ11a3が備える入力端子の1つにテスト信号を出力する。データ出力部11a2は、スイッチ11a3が備える、伝送路1〜3と同数の入力端子に、通信装置12へ送信するデータを振り分けて供給する。スイッチ11a3は、制御部11bからの指示に応じて、これらの入力端子と伝送路1〜3との間の接続経路を切り替える。
制御部11bは、通信装置12へのデータ送信を伝送路1〜3を用いて実行させる場合、スイッチ11a3の入力端子のうちデータ出力部11a2と接続された各入力端子と、伝送路1〜3とが一対一で接続されるようにスイッチ11a3を制御する。一方、制御部11bは、例えば伝送路1の診断を実行させる場合、スイッチ11a3における伝送路1の接続先を、スイッチ11a3の入力端子のうちテスト信号出力部11a1に接続された入力端子に切り替えるようにスイッチ11a3を制御する。これにより、データ出力部11a2による伝送路2,3を用いたデータ通信を継続させながら、伝送路1において診断を実行できる。
なお、対象伝送路は、例えば、診断制御装置13から指定されてもよい。診断制御装置13は、例えば、伝送路1〜3の中から対象伝送路を順次選択して通信装置11に指定する。これにより、通信装置11は、通信装置12との通信を継続しながら、伝送路1〜3のそれぞれにおける通信異常の診断を実行できる。また、診断結果は、制御部11bから診断制御装置13に送信されてもよい。このような診断制御装置13は、図1の例のように情報処理装置10の内部に搭載されていてもよい。
伝送路1〜3における異常の予兆の診断は、例えば、次のように行われる。なお、テスト信号としては、例えば、パルス信号が用いられる。制御部11bは、通信装置11が通信装置12と通信を開始する際に、送信部11aに、伝送路1〜3のそれぞれにテスト信号を送信させる。制御部11bは、伝送路1〜3のそれぞれにおけるテスト信号の波形の立ち上がりにかかる立ち上がり時間を検出し、例えば通信装置11内のメモリに保存する。
その後、通信装置11と通信装置12との通信が開始され、伝送路1〜3を用いて通信装置12に対するデータ通信が行われている状態において、対象伝送路が指定される。対象伝送路として伝送路1が指定されたとすると、上記のように、送信部11aは、伝送路1〜3のうち伝送路1以外の残りの伝送路2,3を用いて通信装置12に対するデータ通信を継続しながら、伝送路1に診断用のテスト信号を送信する。制御部11bは、伝送路1において検出された、テスト信号の波形の立ち上がり時間が判定範囲に含まれるかを判定する。この判定範囲は、通信開始時に伝送路1において検出された立ち上がり時間を基準として決定される。制御部11bは、検出された立ち上がり時間が判定範囲に含まれない場合、伝送路1に異常の予兆があると判定する。
このような診断方法によれば、制御部11bは、ACカップリングコンデンサなどの伝送路1上に挿入されたコンデンサにおいて、経年劣化が進んでいるか否かを判定できる。そして、通信装置11は、上記のように残りの伝送路2,3を用いたデータ通信を継続しながら、このような診断を実行できる。
[第2の実施の形態]
次に、図1の情報処理装置10の例としてストレージ装置を適用したストレージシステムについて説明する。
図2は、第2の実施の形態のストレージシステムの例を示す図である。ストレージシステムは、ストレージ装置100およびホスト装置400を含む。ストレージ装置100とホスト装置400とは、ファイバチャネル(FC:Fibre Channel)やiSCSI(Internet Small Computer System Interface)などを用いたSAN(Storage Area Network)を介して接続される。
ストレージ装置100は、CM(Controller Module)200a,200bおよびDE(Device Enclosure)300を有する。CM200a,200bは、ホスト装置400からの要求に応じて、DE300に搭載された記憶装置へのアクセスを制御するストレージ制御装置である。CM200a,200bは、例えば、一方が運用系として動作し、他方が待機系として動作する。あるいは、CM200a,200bは、それぞれ個別の論理記憶領域に対するアクセス制御を実行してもよい。
DE300は、ホスト装置400からのアクセス対象の記憶装置として、HDD(Hard Disk Drive)を備えたディスクアレイ装置である。なお、DE300は、HDDに代えてSSD(Solid State Drive)などの他の種類の記憶装置を搭載してもよい。ホスト装置400は、CM200aまたはCM200bを介してDE300に搭載されているHDDにアクセスする。
図3は、CMのハードウェア構成例を示す図である。CM200aは、CPU(Central Processing Unit)201a、RAM(Random Access Memory)202a、PCIeスイッチ203a、CA(Channel Adapter)204a,IOC(In/Out Controller)205a、SASエクスパンダ206a、PCH(Platform Controller Hub)207a、SSD208a、FPGA(Field Programmable Gate Array)209aおよびフラッシュメモリ209a1を有する。CM200bは、CPU201b、RAM202b、PCIeスイッチ203b、CA204b、IOC205b、SASエクスパンダ206b、PCH207b、SSD208b、FPGA209bおよびフラッシュメモリ209b1を有する。CM200aとCM200bは、同じハードウェア構成である。そこで、第2の実施の形態では主としてCM200aのハードウェア構成について説明し、CM200bのハードウェア構成の説明については適宜省略する。
CPU201aは、CM200a全体を統括的に制御する。CPU201aは、複数のプロセッシング要素を含むマルチプロセッサであってもよい。RAM202aは、CM200aの主記憶装置として使用され、CPU201aに実行させるプログラムの少なくとも一部や、このプログラムによる処理に用いられる各種データを一時的に記憶する。
PCIeスイッチ203aは、PCIeバスを介してCPU201aと接続されている。また、PCIeスイッチ203aは、PCIeケーブルを介して、他方のCM200b内のPCIeスイッチ203bと接続されている。ここで、CPU201aとCPU201bとは、PCIeスイッチ203aとPCIeスイッチ203bとの間の通信経路を通じて通信できる。例えば、CPU201a,201bは、RAM202a,202bにそれぞれ記憶されたデータを、上記通信経路を通じて他方のCMのCPUに送信することができる。
CA204aは、PCIeバスを介してCPU201aと接続されている。CA204aは、CPU201aとホスト装置400との間でデータを送受信するインタフェース処理を実行する。
IOC205aは、PCIeバスを介してCPU201aと接続されている。また、IOC205aは、SASケーブルを介して、SASエクスパンダ206aおよびSASエクスパンダ206bと接続されている。IOC205aは、CPU201aとDE300内のHDDとの間のインタフェース処理を実行する。
SASエクスパンダ206aは、IOC205aに接続されているとともに、SASケーブルを介してIOC205bにも接続されている。また、SASエクスパンダ206aは、SASケーブルを介して、DE300と接続されている。SASエクスパンダ206aは、IOC205a,205bとDE300内のHDDとの間でデータを中継する。
ここで、IOC205aは、SASエクスパンダ206aを通じてDE300と接続されている。これとともに、IOC205aは、SASエクスパンダ206bを通じてDE300と接続されている。このように、IOC205aとDE300とが2つのSASエクスパンダ206a,206bを通じて接続されることで、IOC205aからDE300へのアクセス経路が冗長化されている。
同様に、IOC205bは、SASエクスパンダ206bを通じてDE300と接続されている。これとともに、IOC205bは、SASエクスパンダ206aを通じてDE300と接続されている。このように、IOC205bとDE300とが2つのSASエクスパンダ206a,206bを通じて接続されることで、IOC205bからDE300へのアクセス経路も冗長化されている。
PCH207aは、CPU201aとSSD208aおよびFPGA209aとの間で、データを送受信する。SSD208aは、CM200aの補助記憶装置として使用され、CPU201aにより実行されるファームウェア等を記憶する。なお、補助記憶装置としては、例えば、HDD等の他の種類の不揮発性記憶装置が使用されてもよい。
FPGA209aは、CM200a内の各部における異常の有無を監視する。本実施の形態では、このような異常監視機能の1つとして、FPGA209aは、ストレージ装置100内のPCIeおよびSASの伝送路の異常を検出するための診断を制御する機能を有する。なお、FPGA209aは、例えば、プログラムを実行可能なプロセッサや、プログラムなどのデータを一時的に蓄積可能なメモリを有している。この場合、FPGA209aの異常監視機能は、例えば、フラッシュメモリ209a1に記憶されたプログラムをFPGA209aが有するプロセッサが実行することによって実現される。フラッシュメモリ209a1は、FPGA209aが実行する処理に用いられる情報を記憶する。
また、FPGA209aとFPGA209bとは互いに接続されており、例えば、一方のフラッシュメモリ209a1に格納されたデータを他方のフラッシュメモリ209b1にミラーリングすることが可能になっている。
図4は、DEのハードウェア構成例を示す図である。DE300は、SASエクスパンダ311a,311bと、HDD312a,312b,312c,・・・とを備える。
SASエクスパンダ311aは、SASエクスパンダ206aに接続されているとともに、SASケーブルを介してHDD312a,312b,312c,・・・と接続されている。SASエクスパンダ311aは、SASエクスパンダ206aと、HDD312a,312b,312c,・・・との間でデータを中継する。
SASエクスパンダ311bは、SASエクスパンダ206bに接続されているとともに、SASケーブルを介してHDD312a,312b,312c,・・・と接続されている。SASエクスパンダ311bは、SASエクスパンダ206bと、HDD312a,312b,312c,・・・との間でデータを中継する。
ところで、PCIeおよびSASの通信では、1つのポートでシリアル伝送路を複数束ねて利用することで、データ伝送の高速化を図ることが可能となっている。ここでいうシリアル伝送路とは、送信用の差動信号線ペアと、受信用の差動信号線ペアの合計4本の信号線を含む。このようなシリアル伝送路は、PCIeでは「レーン」と呼ばれる。以下、説明を簡単にするために、PCIeのシリアル伝送路だけでなく、SASのシリアル伝送路についても「レーン」と記載する。
図5は、ストレージ装置内の回路間のレーン数の例を示す図である。
CPU201aとPCIeスイッチ203aとの間は、4つのレーンにより接続される。CPU201aとCA204aとの間は、4つのレーンにより接続される。CPU201aとIOC205aとの間は、8つのレーンにより接続される。CPU201aとPCH207aとの間は、4つのレーンにより接続される。IOC205aとSASエクスパンダ206aとの間は、4つのレーンにより接続される。SASエクスパンダ206aとDE300のSASエクスパンダ311a(図4参照)との間は、1つのレーンにより接続される。
CPU201bとPCIeスイッチ203bとの間は、4つのレーンにより接続される。CPU201bとCA204bとの間は、4つのレーンにより接続される。CPU201bとIOC205bとの間は、8つのレーンにより接続される。CPU201bとPCH207bとの間は、4つのレーンにより接続される。IOC205bとSASエクスパンダ206bとの間は、4つのレーンにより接続される。SASエクスパンダ206bとDE300のSASエクスパンダ311b(図4参照)との間は、1つのレーンにより接続される。
PCIeスイッチ203aとPCIeスイッチ203bとの間は、4つのレーンにより接続される。IOC205aとSASエクスパンダ206bとの間は、4つのレーンにより接続される。IOC205bとSASエクスパンダ206aとの間は、4つのレーンにより接続される。
また、図5に示すように、各ポートには、そのポートに接続された伝送路を通じた通信を実行するためのインタフェース回路が配置されている。PCIeのポートには、PCIeに基づく通信を実行するPCIeインタフェースが配置され、SASのポートには、SASに基づく通信を実行するSASインタフェースが配置される。
図5の例では、CPU201a,201b、PCIeスイッチ203a,203b、CA204a,204b、IOC205a,205b、PCH207a,207bは、PCIeインタフェースを有する。IOC205a,205b、SASエクスパンダ206a,206b、SASエクスパンダ311a,311bは、SASインタフェースを有する。IOC205a,205bは、PCIeインタフェースとSASインタフェースとを有する。
PCIeインタフェースとSASインタフェースの基本的な構成は同じである。そのため、以下の説明では、これら2種類のインタフェース回路を区別せずに説明する。
図6は、インタフェース回路の構成と接続形態の例を示す図である。図6では例として、4つのレーン22a〜22dによって接続されたインタフェース回路21a,21bについて示している。すなわち、図6の例では、インタフェース回路21a,21bは、最大4レーンを1つの論理的な通信ポートとして使用して互いに通信できる。
インタフェース回路21aは、送受信部210a〜210d、制御回路220a、メモリ230a、パルスジェネレータ(PG)240a、MUX/DEMUX(Multiplexer/Demultiplexer)250aおよびスイッチ260aを有する。インタフェース回路21bは、送受信部210e〜210h、制御回路220b、メモリ230b、パルスジェネレータ240b、MUX/DEMUX250bおよびスイッチ260bを有する。
送受信部210aは、レーン22aを介して送受信部210eと接続されている。送受信部210bは、レーン22bを介して送受信部210fと接続されている。送受信部210cは、レーン22cを介して送受信部210gと接続されている。送受信部210dは、レーン22dを介して送受信部210hと接続されている。送受信部210a〜210hのそれぞれは、接続された他方の送受信部との間のデータ送受信を制御する。また、前述のように、レーン22a,22b,22c,22dは、それぞれ差動信号線ペアのセットであり、一方からの送信用の信号線ペア(2本)と、他方からの送信用の信号線ペア(2本)とを含む。
なお、送受信部210a〜210dは、レーン22a〜22dをそれぞれ構成する差動信号ペアのセットと、共通のコネクタを介して接続する。同様に、送受信部210e〜210hは、レーン22a〜22dをそれぞれ構成する差動信号ペアのセットと、共通のコネクタを介して接続する。
制御回路220aは、パルスジェネレータ240a、MUX/DEMUX250aおよびスイッチ260aを制御する。制御回路220aは、CPU201aと通信可能になっており、例えば、CPU201aからの指示に応じて、使用するレーン数の切り替えや後述するレーンの診断制御などを実行する。メモリ230aは、制御回路220aの処理で用いられる各種のデータを記憶する。なお、制御回路220aはプロセッサを有し、制御回路220aの処理の少なくとも一部は、メモリ230aに記憶されたファームウェアプログラムを制御回路220aのプロセッサが実行することで実現されてもよい。
パルスジェネレータ240aは、レーンにおける異常および異常予兆の診断用のテスト信号(パルス信号)を出力する回路である。MUX/DEMUX250aは、インタフェース回路21bに送信する送信データを送受信部210a〜210dのいずれかに振り分ける。また、MUX/DEMUX250aは、インタフェース回路21bから受信した受信データを送受信部210a〜210dから受信する。
スイッチ260aは、MUX/DEMUX250aからレーン22a〜22dのそれぞれに対する出力端子およびパルスジェネレータ240aの出力端子と、送受信部210a〜210dのそれぞれの入力端子との間の経路を切り替える。このスイッチ260aの詳細については後述する。なお、送受信部210a〜210dによって受信された信号は、スイッチ260aを介さずにMUX/DEMUX250aに直接入力される。
制御回路220b、メモリ230b、パルスジェネレータ240b、MUX/DEMUX250bおよびスイッチ260bの機能は、制御回路220a、メモリ230a、パルスジェネレータ240a、MUX/DEMUX250aおよびスイッチ260aと同じなので、説明を省略する。
図7は、レーンの構成例を示す図である。図7では例として、送受信部210aと送受信部210eとを接続するレーン22aについて示している。
送受信部210aは、Txドライバ211a、Rxドライバ212aおよび検出回路213aを有する。Txドライバ211aは、MUX/DEMUX250aからスイッチ260aを介して入力された送信データ、または、パルスジェネレータ240aからスイッチ260aを介して入力されたテスト信号を、差動信号に変換して出力する。Rxドライバ212aは、送受信部210eから受信した差動信号を所定形式の信号に変換し、MUX/DEMUX250aに出力する。
検出回路213aは、Txドライバ211aにテスト信号が入力された場合に、Txドライバ211aから出力される差動信号の電圧を監視し、電圧が所定の下限閾値から所定の上限閾値に到達するまでの時間を検出し、制御回路220aに通知する。下限閾値は、テスト信号の立ち上がり開始タイミングを検出するための閾値であり、上限閾値は、テスト信号の立ち上がり完了タイミングを検出するための閾値である。したがって、検出回路213aは、下限閾値と上限閾値とを用いることで、テスト信号の立ち上がり時間を検出できる。
なお、実際には、送受信部210aは例えば、シリアライザ、Txイコライザ、Rxイコライザ、デシリアライザなどをさらに有している。シリアライザは、入力された送信データまたはテスト信号をシリアル化してTxドライバ211aに出力する。Txイコライザは、Txドライバ211aからの出力信号の波形を整形する。この波形整形の種類としては、例えば、プリエンファシス調整とプリシュート調整とがある。また、検出回路213aは、Txイコライザからの出力されるテスト信号の立ち上がり時間を検出してもよい。Rxイコライザは、送受信部210eから受信した差動信号の波形を整形し、Rxドライバ212aに出力する。この波形整形の方法としては、DFE(Decision Feedback Equalization)やFFE(Feed-Forward Equalization)などの方法が用いられる。デシリアライザは、Rxドライバ212aから出力されたシリアル信号をパラレル信号に変換し、MUX/DEMUX250aに出力する。
一方、送受信部210eは、Txドライバ211b、Rxドライバ212bおよび検出回路213bを有する。Txドライバ211b、Rxドライバ212bおよび検出回路213bの機能は、それぞれTxドライバ211a、Rxドライバ212aおよび検出回路213aと同様であるので、ここでは説明を省略する。
また、送受信部210aから送受信部210eへの差動信号線においては、送信端に、ACカップリングコンデンサC1a,C2aが直列に接続されており、受信端に、一端がグランドに接続された終端抵抗R1a,R2aの他端が接続されている。ACカップリングコンデンサC1a,C2aは、送信側の送受信部210aの内部または外部に設けられており、DC(Direct Current)信号成分を除去する。終端抵抗R1a,R2aは、通信規格で決められた抵抗値(例えば50Ω)を有しており、受信側の送受信部210eの内部に設けられて、受信端での送信信号の反射を抑制する。同様に、送受信部210eから送受信部210aへの差動信号線においては、送信端に、ACカップリングコンデンサC1b,C2bが直列に接続されており、受信端に、一端がグランドに接続された終端抵抗R1b,R2bの他端が接続されている。
次に、インタフェース回路において実行されるレーンの診断について説明する。インタフェース回路は、パルスジェネレータからのパルス状のテスト信号を各レーンに送信して差動信号線の送信端における電圧の立ち上がりタイミングを検出することで、レーンの診断を行うことができる。この診断としては、レーンの異常を検出するための診断と、レーンの異常予兆を検出するための診断とがある。前者の診断は、相手側のインタフェース回路が新たに接続された直後のリンクアップ時に実行される。後者の診断は、基本的に、リンクアップ後に相手側との通信が実行されている通常運用時に実行される。
以下、例として、インタフェース回路21aの送受信部210aにおける診断の方法について説明する。
図8は、テスト信号送信時の電圧の推移を示す第1の図である。この図8に示す電圧は、送受信部210aのTxドライバ211aからテスト信号が送信された際に検出回路213aによって検出される差動信号の電圧である。また、図8における時間の原点(時刻0)は、検出回路213aによって検出された電圧が所定の下限閾値を超えたタイミング(立ち上がり開始タイミング)である。さらに、電圧v1は、立ち上がり完了タイミングを判定するための上限閾値である。なお、以上の点は図9についても同様である。
図8において、時間t1は、インタフェース回路21aに相手側のインタフェース回路が接続されていない状態でのテスト信号の立ち上がり時間の一例である。一方、時間t2は、インタフェース回路21aに相手側のインタフェース回路(ここでは、図6のインタフェース回路21bとする)が接続されている状態でのテスト信号の立ち上がり時間の一例である。相手側のインタフェース回路21bが接続された場合、差動信号線にはインタフェース回路21bの終端抵抗R1a,R2aが接続されるため、テスト信号の立ち上がり時間が長くなる。
PCIeやSASなどのシリアル通信規格では、リンクアップ時において、このような終端抵抗の有無によるテスト信号の立ち上がり時間の違いから、相手側のインタフェース回路が接続されているか否かを判定するデバイス検出手順が規定されている。この手順では、終端抵抗などの回路の規定に基づいて立ち上がり時間の閾値が決められており、リンクアップ時におけるテスト信号の立ち上がり時間の検出値が閾値以上の場合に、相手側のインタフェース回路が接続されていると判定される。本実施の形態のインタフェース回路21aにも、このようなデバイス検出機能が実装されている。
これに加えて、インタフェース回路21aには、相手側のインタフェース回路が接続されていると判定された場合に、レーンに異常が発生しているか否かを診断する機能も実装されている。この診断では、インタフェース回路21aの制御回路220aは、リンクアップ時に検出されたテスト信号の立ち上がり時間が時間L1から時間L2の範囲(以下、第1の正常範囲)に含まれるか否かを判定する。制御回路220aは、検出された立ち上がり時間が第1の正常範囲に含まれる場合、レーンを正常と判定し、含まれない場合、レーンを異常と判定する。例えば、制御回路220aは、立ち上がり時間として図8に示す時間t3が検出された場合、時間t3が第1の正常範囲に含まれないため、レーンを異常と判定する。
この診断により、レーン上のデバイスに発生した何らかの異常に起因する立ち上がり時間の異常が検出される。立ち上がり時間の異常が発生した場合、診断対象レーンにおいて信号を正常に送信できない可能性がある。上記診断により異常が検出された場合、例えば、異常が発生したレーンを使用せずに通信を行うことで、通信異常の発生を回避できる。なお、このような立ち上がり時間の異常の原因としては、例えば、SERDES(Serializer/Deserializer)回路など、送受信部210aや相手側の送受信部210eの内部回路の製造バラツキがある。
閾値となる時間L1,L2としては、PCIeインタフェースとSASインタフェースのそれぞれについて、あらかじめ決められた時間が用いられる。第1の正常範囲は、少なくとも、規格上の正常な立ち上がり時間を含むように設定される。また、時間L1は、デバイス検出手順において相手側のインタフェース回路が接続されていると判定するための閾値の時間より長い時間とされる。これにより、相手側のインタフェース回路が接続されていると判定された場合でも、立ち上がり時間の異常が発生しているか否かを判断することができる。
図9は、テスト信号送信時の電圧の推移を示す第2の図である。この図9を用いて、レーンの異常予兆を検出するための診断について説明する。
図7に示したACカップリングコンデンサC1a,C2a,C1b,C2bのような伝送路上のコンデンサは本来、数百MΩ程度の抵抗値を有している。しかし、このようなコンデンサにクラックなどの異常が発生すると、抵抗値は徐々に低下していく。コンデンサの経年劣化が進み、異常の程度が悪化していくと、抵抗値は数百Ω程度まで下がってしまう場合がある。
このように抵抗値が低下していくと、差動信号の立ち上がり時間が短くなっていき、通常運用中に突然リンクダウンが発生する確率が高くなっていく。そこで、インタフェース回路21aは、通常運用中に各レーンにテスト信号を送信し、その立ち上がり時間を検出する。インタフェース回路21aの制御回路220aは、検出された立ち上がり時間が、上記の第1の正常範囲より狭い第2の正常範囲に含まれるか否かを判定し、第2の正常範囲に含まれない場合には、そのレーンに異常の予兆があると判定する。
第2の正常範囲は、次のように設定される。制御回路220aは、リンクアップ時に検出された時間t2を基準に第2の正常範囲を決定する。具体的は、制御回路220aは、時間t2に所定の値を減算することで、第2の正常範囲の下限の時間L3を算出し、時間t2に同一の値を加算することで、第2の正常範囲の上限の時間L4を算出する。このように、リンクアップ時に検出された時間t2を基準に第2の正常範囲が設定されることで、コンデンサの経年劣化の進み具合を推定できる。
また、前述のように、第2の正常範囲は、第1の正常範囲より狭く設定される。これにより、リンクアップ時には異常と判定されず、現在通信が可能なレーンについても、その後の時間経過に伴う異常の予兆を検出できる。例えば、図9に示すように、通常運用中にある診断対象レーンにおいて、テスト信号の立ち上がり時間として時間t4が検出されたとする。時間t4は第1の正常範囲に含まれるので、リンクアップ時には異常と判定されず、診断対象レーンでは現在でも正常な通信が可能となっている。しかし、立ち上がり時間が第2の正常範囲に含まれないと判定されることで、異常予兆があり、その後に通信不能になる可能性が高いことを認識できる。
このような異常予兆を検出できることで、CM200a(またはCM200b)は、その後に発生し得るレーンの通信異常の影響を低減するための様々な対策をとることができる。例えば、CM200aは、異常予兆が検出されたレーンでの通信を停止して、そのレーンで通信不能になることによるポートのリンクダウンの発生を防止できる。あるいは、CM200aは、異常予兆が検出された場合に警告を発して、インタフェース回路や伝送路上の部品の交換をユーザに促すこともできる。
ところで、上記の異常予兆の診断は、通常運用時に実行される。従来のインタフェース回路は、通常運用時にポートでの通信を停止させずに診断を行うことは不可能であった。一方、PCIeなどのシリアル通信規格では、複数束ねたシリアル伝送路のうちの少なくとも1つにおける通信を停止させる省電力状態(L0s状態)が規定されている。
そこで、本実施の形態のインタフェース回路は、上記のL0s状態への遷移機能と、診断対象レーンを他のレーンと物理的に分離するためのスイッチとを用いて、診断対象レーン以外のレーンでの通信を継続しながら、診断対象レーンで診断を行うことを可能とする。
図10は、スイッチの接続状態の第1の例を示す図である。ここではまず、図10を用いて、インタフェース回路21a内のスイッチ260aおよびその周辺の構成例について説明する。
MUX/DEMUX250aは、バイト・ストライピング251を有する。バイト・ストライピング251は、送信データをレーン#0〜#3のいずれかに振り分ける。ここで、レーン#0〜#3とは、通信プロトコル上で用いられるレーンの識別番号である。例えば、インタフェース回路21aを制御するドライバは、インタフェース回路21aにレーンを指定する場合、レーン#0〜#3という識別番号を用いる。
スイッチ260aは、入力端子261〜265と出力端子266〜269とを有する。スイッチ260aは、制御回路220aからの指示に応じて、入力端子261〜265と出力端子266〜269との間の接続を切り替える。入力端子261には、パルスジェネレータ240aからのテスト信号が入力される。入力端子262〜265には、それぞれバイト・ストライピング251のレーン#0〜#3からの出力データが入力される。出力端子266〜269からの出力信号は、それぞれ送受信部210a〜210dに入力される。
図10は、診断が行われていない場合におけるスイッチ260aの接続状態を示している。この状態では、入力端子262〜265がそれぞれ出力端子266〜269に接続されている。この場合、バイト・ストライピング251のレーン#0〜#3からの出力データは、それぞれレーン22a〜22dを通じて出力される。この状態では、レーン22a〜22dをそれぞれレーン#0〜#3と認識しながら通信が行われる。
図11は、スイッチの接続状態の第2の例を示す図である。この図11は、制御回路220aに対してレーン#1の診断が指示された場合におけるスイッチ260aの接続状態を示している。この場合、スイッチ260aは、制御回路220aからの指示に応じて、出力端子267の接続先を入力端子263から入力端子261に切り替える。これにより、レーン22a,22c,22dでの通信を継続しながら、パルスジェネレータ240aからのテスト信号を送受信部210bに供給してレーン22bの診断を行うことが可能になる。
実際の処理では、制御回路220aは、インタフェース回路21aの状態を、通常状態(L0状態)から、レーン#1を休止させた省電力状態(L0s状態)に遷移させる。これにより、インタフェース回路21aは、通信プロトコルを変更することなく、レーン#1を使用せずに残りのレーン#0,#2,#3を用いて通信を継続できる。そして、遷移が完了した後、制御回路220aは、出力端子267の接続先を入力端子263から入力端子261に切り替えるようにスイッチ260aに指示する。切り替えが完了すると、制御回路220aは、パルスジェネレータ240aにテスト信号を出力させる。これにより、通信に使用されていないレーン#1に対応付けられていたレーン22bにおける診断を実行できる。
図12は、スイッチの接続状態の第3の例を示す図である。この図12は、制御回路220aに対してレーン#0の診断が指示された場合におけるスイッチ260aの接続状態を示している。この場合、診断対象レーンは、レーン#0に対応付けられているレーン22aとなる。
ここで、PCIe規格では、代表レーンであるレーン#0を使用せずに通信することはできない。そこで、制御回路220aは、レーン#0の接続先を、診断対象のレーン22aから他のレーンに切り替えるようにスイッチ260aに指示する。これにより、レーン#0での通信を継続しながら、それまでレーン#0に対応付けられていた診断対象レーンにおける診断を実行できるようになる。
具体的には、制御回路220aの制御によって、例えば図12に示すような状態に切り替えが行われる。まず、レーン#3を休止させた省電力状態(L0s状態)に遷移し、レーン#3が通信に使用されない状態とされる。そして、レーン#0に接続する入力端子262の接続先が、診断対象のレーン22aに接続する出力端子266から他の出力端子267に切り替えられる。また、この切り替えに伴い、入力端子263,264の接続先も、それぞれ出力端子268,269に切り替えられる。これにより、レーン22b〜22dをそれぞれレーン#0〜#2を認識した状態で通信が継続される。
そして、入力端子261と出力端子266とが接続されて、パルスジェネレータ240aから出力されたテスト信号が送受信部210aに送信され、レーン22aにおける診断が行われる。このような制御により、通信プロトコルを変更せずに、レーン#0を用いた通信を継続しつつ、レーン#0に対応付けられていた診断対象レーンにおける診断を実行できる。
次に、図13は、CMが備える処理機能の構成例を示すブロック図である。図13では例として、CM200aの処理機能について示している。
CM200aは、診断制御部209aa、動作制御部209ab、ドライバ201aa,201abを有する。診断制御部209aaおよび動作制御部209abは、FPGA209aによって実現され、ドライバ201aa,201abは、CPU201aによって実現される。例えば、プログラムを実行可能なプロセッサ209acをFPGA209aが備える場合、診断制御部209aaおよび動作制御部209abの処理は、プロセッサ209acが所定のファームウェアプログラムを実行することで実現される。また、ドライバ201aa,201abの処理は、CPU201aが所定のファームウェアプログラムを実行することで実現される。
また、フラッシュメモリ209a1には、FPGA209aの処理の実行時に参照される情報として、診断対象経路テーブル270と結果管理テーブル280が格納される。診断対象経路テーブル270には、ストレージ装置100内のインタフェース回路およびレーンの診断順を示す情報が登録される。結果管理テーブル280には、各インタフェース回路における診断結果と、レーンの使用状態を示す情報が登録される。なお、結果管理テーブル280は、シリアル伝送路を介して接続されたインタフェース回路のペアごとに作成される。
診断制御部209aaは、診断対象経路テーブル270に基づいて、診断対象のインタフェース回路およびレーンを決定する。診断制御部209aaは、ドライバ201aa,201abのいずれかを介して、診断対象のインタフェース回路に対して診断対象レーンを指定して診断の開始を指示する。
動作制御部209abは、ドライバ201aa,201abのいずれかを介して診断結果を受信し、診断結果を結果管理テーブル280に登録する。また、動作制御部209abは、結果管理テーブル280に登録されたストレージ装置100全体の診断結果に基づき、ドライバ201aa,201abのいずれかを介して、各インタフェース回路におけるレーンごとの使用、不使用を制御する。
ドライバ201aaは、ストレージ装置100内のインタフェース回路のうち、PCIeインタフェース21−1a,21−1b,・・・における通信動作や診断動作を制御する。診断動作の制御では、ドライバ201aaは、診断制御部209aaからの診断対象レーンおよび診断開始の指示を受信して、それらの指示を対応するPCIeインタフェースに送信する。また、ドライバ201aaは、PCIeインタフェースから送信された診断結果を、診断制御部209aaに送信する。さらに、ドライバ201aaは、動作制御部209abからの指示に応じて、PCIeインタフェースの各レーンの使用、不使用を制御する。
ドライバ201abは、ストレージ装置100内のインタフェース回路のうち、SASインタフェース21−2a,21−2b,・・・における通信動作や診断動作を制御する。ドライバ201abの処理は、ドライバ201aaがPCIeインタフェース21−1a,21−1b,・・・に対して行う処理と同様であるので、説明を省略する。
なお、CM200bも、図13に示したCM200aの処理機能と同様の処理機能を有する。また、CM200aのFPGA209aとCM200bのFPGA209bは、例えば、一方がマスタとして動作し、他方がスレーブとして動作する。例えばFPGA209aがマスタとすると、インタフェース回路の診断動作やレーンの使用、不使用の制御は、FPGA209aの診断制御部209aaおよび動作制御部209abが主導して実行される。
また、他方のCM200b内のインタフェース回路に指示が送信される場合、例えば、FPGA209aからの指示はFPGA209bに送信され、CPU201bにより実現されるドライバを介して、CM200b内のインタフェース回路に伝達される。また、診断結果など、インタフェース回路からFPGA209bに送信される情報は、上記と逆順のルートによって伝達される。
図14は、診断対象経路テーブルの例を示す図である。診断対象経路テーブル270は、フラッシュメモリ209a1に格納される。診断対象経路テーブル270は、レーンを診断する順番を特定可能な情報である。診断する順番は、FPGA209aの診断制御部209aaにより、ホスト装置400からDE300へのアクセス性能を考慮して決定される。診断する順番の決定方法は、後で詳細に説明する。診断対象経路テーブル270は、グループおよび診断対象経路の項目を有する。グループの項目は、グループを識別する情報を示す。診断対象経路の項目は、診断対象経路の情報を示す。
1つのグループに対応する診断対象経路は、診断対象とされる伝送路の位置が、その伝送路の両端に接続する各デバイスの名称によって指定される。診断対象経路の項目には、このようなデバイス名のペアが少なくとも1組登録される。また、診断対象経路には、伝送路において診断対象とされるレーン番号がさらに指定されていてもよい。
また、診断対象経路テーブル270に登録されている1つのグループは、さらに小グループに分類される。例えば、グループ“1”は小グループ“1a”〜“1d”にさらに分類される。小グループは、対応するグループの診断対象経路に登録された伝送路を、レーンごとに分割したものである。
診断制御部209aaは、診断対象経路テーブル270を参照して、診断するレーンを決定する。診断制御部209aaは、グループ“1”から順番に診断するレーンを決定する。また、診断制御部209aaは、グループ“1”の小グループ“1a”から順番に診断するレーンを決定する。
例えば、図14では、小グループ“1a”に対応する診断対象経路として“CM#0 CPU−CM#0 IOC間 Lane#0”が登録されている。これは、CM#0(CM200a)のCPU201aとIOC205aとを接続する伝送路のレーン#0が、診断対象とされることを示す。この場合、診断制御部209aaは、該当する伝送路の両端に接続されているインタフェース回路に対し、ドライバ(このケースではドライバ201aa)を介して、レーン#0における診断開始指示を送信する。各インタフェース回路は、レーン#0における送信用の差動信号線における診断を実行し、診断結果をドライバ201aaを介して診断制御部209aaに通知する。
また、図14では、小グループ“1a”に対応する診断対象経路として、“CM#0 CPU−CM#0 IOC間 Lane#0”と“CM#0 IOC−CM#0 SASExp間 Lane#0”という2カ所の伝送路が登録されている。この場合、診断制御部209aaは、2カ所の伝送路において並行して診断を実行させる。
図15は、結果管理テーブルの例を示す図である。結果管理テーブル280a,280b,280c,・・・は、フラッシュメモリ209a1に格納される。結果管理テーブル280a,280b,280c,・・・にはそれぞれ、1組のデバイスのペア間における1方向に対する伝送路の診断結果が、レーンごとに登録されている。例えば、結果管理テーブル280aは、“CM#0 CPU → CM#0 PCH間”で特定される伝送路の各レーンの診断結果を示す。すなわち、結果管理テーブル280aには、CPU201aからPCH207aへの送信用伝送路における各レーンの診断結果が登録されている。
診断結果の項目には、“正常”、“異常予兆”、“異常”の何れかが登録される。“正常”は、診断対象レーンが正常であることを示す。“異常予兆”は、診断対象レーンに異常予兆があることを示す。“異常”は、診断対象レーンが異常であることを示す。
さらに、各結果管理テーブルには、レーンごとに使用フラグおよび時間L3,L4が登録されている。使用フラグの項目は、レーンを使用する(アクティブにする)か、あるいはそのレーンを使用せずに閉塞するかを示す。使用フラグの項目には、使用する場合、“true”が登録され、使用しない場合、“false”が登録される。時間L3,L4は、異常予兆の診断に用いる第2の正常範囲の下限、上限をそれぞれ示す。
次に、リンクアップ時の診断処理について、フローチャートを用いて説明する。
図16は、リンクアップ時の診断処理のフローチャートの例を示す図である。以下、図16に示す処理をステップ番号に沿って説明する。
(S11)このステップS11の処理は、例えば、ストレージ装置100の電源がオンになるのに伴ってインタフェース回路21aが起動した場合や、インタフェース回路21aがリセットされて再起動した場合に実行される。インタフェース回路21aの制御回路220aは、診断対象レーンを切り替えながら、テスト信号の立ち上がり時間の検出処理を実行する。
具体的には、制御回路220aは、診断対象レーンを決定する。制御回路220aは、パルスジェネレータ240aに接続された入力端子261を、診断対象レーンに接続された出力端子に接続するために経路の切り替えをスイッチ260aに実行させる。そして、制御回路220aは、パルスジェネレータ240aにテスト信号を送信させる。検出回路213aは、診断対象レーンにおけるテスト信号の立ち上がり時間を検出し、制御回路220aに通知する。制御回路220aは、検出された立ち上がり時間に基づいて相手側のインタフェース回路21bが接続されていることを検出すると、検出された立ち上がり時間を診断対象レーンの番号に対応付けてメモリ230aに格納する。
インタフェース回路21aは、ポート内の全てのレーンに対して上記処理を実行し、レーン毎に立ち上がり時間を検出してメモリ230aに格納する。なお、制御回路220aによって相手側のインタフェース回路が接続されていないと判定された場合には、ステップS12以降の処理は実行されない。
(S12)インタフェース回路21aの制御回路220aは、診断開始通知をCPU201aに送信する。
(S13)CPU201aのドライバ(ここでは例として、ドライバ201aaとする)は、診断開始通知をFPGA209aに送信する。
(S14)FPGA209aの診断制御部209aaは、フラッシュメモリ209a1を参照し、診断開始通知の送信元のインタフェース回路21aに対応する第2の正常範囲の情報(時間L3,L4)が格納されているか否かを判定する。この判定は、例えば、診断開始通知の送信元のインタフェース回路21aに対応する結果管理テーブル280がフラッシュメモリ209a1に格納されているか否かによって行うことができる。該当する結果管理テーブル280が格納されている場合、その結果管理テーブル280に第2の正常範囲の情報が登録されている。診断制御部209aaは、結果管理テーブル280が格納されている場合、処理をステップS15に進める。結果管理テーブル280が格納されていない場合、処理をステップS16に進める。
ここで、第2の正常範囲の情報が登録されていない場合とは、例えば、診断開始通知の送信元のインタフェース回路21aが新規に搭載された場合である。あるいは、以前に同じ位置に搭載されていてインタフェース回路が、診断開始通知の送信元のインタフェース回路21aに交換された場合も考えられる。
(S15)診断制御部209aaは、ステップS14で参照した結果管理テーブル280から、各レーンについての第2の正常範囲の情報(時間L3,L4)を取得する。診断制御部209aaは、第2の正常範囲の情報を異常予兆診断の開始指示とともにCPU201aに送信し、診断開始通知の送信元のインタフェース回路21aに対するこれらの情報の送信を指示する。
(S16)診断制御部209aaは、フラッシュメモリ209a1にあらかじめ記憶されている第1の正常範囲の情報(時間L1,L2)を取得する。診断制御部209aaは、第1の正常範囲の情報を異常診断の開始指示とともにCPU201aに送信し、診断開始通知の送信元のインタフェース回路21aに対するこれらの情報の送信を指示する。
なお、第1の正常範囲を示す時間L1,L2は固定値であるので、メモリ230aにあらかじめ記憶されていてもよい。この場合、ステップS16では、第1の正常範囲の情報は送信されなくてよい。
(S17)診断制御部209aaは、新しいインタフェース回路21aが搭載されたことに伴い、診断対象経路テーブル270を更新する。詳しくは、診断制御部209aaは、ホスト装置400からDE300へのアクセス性能を考慮して、次の(1)〜(3)のようなルールにしたがって診断対象経路テーブル270を更新する。なお、(1)、(2)、(3)の順で優先度が高い。
(1)診断制御部209aaは、上流と下流とでデータ流量の差が大きくならないようにバランスを取りながら、同時に診断対象とする伝送路の位置を決定する。例えば、IOC205aの上流のレーン数、すなわち、CPU201aとIOC205aとの間のレーン数は、8である。一方、IOC205aとSASエクスパンダ206aとの間のレーン数は、4であり、IOC205aとSASエクスパンダ206bとの間のレーン数は、4である。このため、IOC205aの下流のレーン数の合計は、8である。この場合、上流のレーン数と下流のレーン数が同じであるため、上流と下流でそれぞれ1レーンの診断を行っても、上流と下流とでデータ流量に差がでない。そこで、診断制御部209aaは、例えば、CPU201aとIOC205aとの間の4レーンと、IOC205aとSASエクスパンダ206aとの間の4レーンとを、同時に診断させる1つのグループに登録する。また、診断制御部209aaは、CPU201aとIOC205aとの間の残りの4レーンと、IOC205aとSASエクスパンダ206bとの間の4レーンとを、同時に診断させる別のグループに登録する。このように、上流と下流とでデータ流量に差がないように診断対象レーンが選択されることで、ストレージ装置100内で部分的に通信の停滞が発生し、それが原因でDE300へのアクセス性能が低下する可能性を低減できる。
なお、上記の例では、CPU201aとIOC205aとの間で通信に利用されるレーン数と、IOC205aとSASエクスパンダ206a,206bとの間で通信に利用されるレーン数とが同数になるように、同時に診断させるレーンの組み合わせが決定された。しかし、他の例として、CPU201aとIOC205aとの間で通信に利用されるレーン数と、IOC205aとSASエクスパンダ206a,206bとの間で通信に利用されるレーン数との差が一定値以下になるように、同時に診断させるレーンの組み合わせが決定されてもよい。あるいは、CPU201aとIOC205aとの間で通信に利用されるレーン数と、IOC205aとSASエクスパンダ206a,206bとの間で通信に利用されるレーン数との比率が一定範囲に収まるように、同時に診断させるレーンの組み合わせが決定されてもよい。
(2)診断制御部209aaは、DE300へのアクセス性能への影響が小さい範囲で、多数のレーンで同時に診断されるようにする。例えば、上記のようにIOC205aの上流と下流のレーン数はともに8であり、比較的多いと言える。このため、上流と下流でそれぞれ1レーンを診断対象としても、DE300へのアクセス性能の低下幅は比較的小さい。そこで、診断制御部209aaは、IOC205aの上流の1レーンと下流の1レーンとが同時に診断対象となるようにグループの設定を行う。
(3)診断制御部209aaは、CM200a内の伝送路が優先して診断され、CM200b内の伝送路がその後に診断されるように、レーンの診断順を決定する。これにより、診断の実行中でも、CM200a,200bのうち一方は、アクセス性能を維持しながら動作できる。
また、診断制御部209aaは、上記のような診断対象経路テーブル270の更新に加え、新しいインタフェース回路21aに対応する結果管理テーブル280を作成し、フラッシュメモリ209a1に格納する。
(S18)CPU201aのドライバ201aaは、ステップS15またはステップS16でFPGA209aから送信された情報をインタフェース回路21aに送信する。
(S19)インタフェース回路21aの制御回路220aは、CPU201aから受信した第1の正常範囲または第2の正常範囲の情報をメモリ230aに格納する。制御回路220aは、異常診断の開始指示を受信した場合、ステップS11で検出された立ち上がり時間が、受信した第1の正常範囲に含まれるか否かを判定することで、各レーンの異常の有無を判定する。これにより、各レーンにおける異常の診断が実行される。一方、制御回路220aは、異常予兆診断の開始指示を受信した場合、ステップS11で検出された立ち上がり時間が、受信した第2の正常範囲に含まれるか否かを判定することで、各レーンの異常予兆の有無を判定する。これにより、各レーンにおける異常予兆の診断が実行される。制御回路220aは、診断結果をCPU201aに送信する。
(S20)CPU201aのドライバ201aaは、受信した診断結果をFPGA209aに送信する。
(S21)FPGA209aの動作制御部209abは、診断結果受信処理を実行する。この処理では、動作制御部209abは、受信した診断結果を、その送信元のインタフェース回路21aに対応する結果管理テーブル280に登録する。また、動作制御部209abは、レーンの異常が検出された場合、インタフェース回路21aのどのレーンを使用状態にし、どのレーンを閉塞させるかを制御する異常対応処理を実行する。なお、この診断結果受信処理については、後の図19において詳しく説明する。
図17は、判定処理のフローチャートの例を示す図(その1)である。図17の処理は、図16のステップS19の処理に対応する。以下、図17に示す処理をステップ番号に沿って説明する。
(S31)制御回路220aは、ポート内の複数のレーンの中から診断対象レーンを1つ選択する。制御回路220aは、診断対象レーンについて検出された立ち上がり時間をメモリ230aから取得する。
(S32)制御回路220aは、FPGA209aから第2の正常範囲の情報を取得したか否かを判定する。第2の正常範囲の情報を取得した場合、処理をステップS41に進める。第2の正常範囲の情報を取得していない場合(すなわち、第1の正常範囲の情報を取得した場合)、処理をステップS33に進める。
(S33)制御回路220aは、ステップS31で取得した立ち上がり時間が、FPGA209aから通知された第1の正常範囲外であるか否かを判定する。立ち上がり時間が第1の正常範囲外である場合、処理をステップS34に進める。立ち上がり時間が第1の正常範囲に含まれる場合、処理をステップS35に進める。
(S34)制御回路220aは、診断対象レーンが異常であることをCPU201aに通知する。そして、制御回路220aは、処理をステップS39に進める。
通知を受けたCPU201aは、診断対象レーンが異常であることをFPGA209aに通知する。
(S35)送受信部210は、制御回路220aの指示に基づき、診断対象レーンのTx−Rx間のリンクを確立する。
(S36)制御回路220aは、図9で説明した手順で、立ち上がり時間を基準に第2の正常範囲を決定する。
(S37)制御回路220aは、診断対象レーンが正常であることをCPU201aに通知する。通知を受けたCPU201aは、診断対象レーンが正常であることをFPGA209aに通知する。
(S38)制御回路220aは、第2の正常範囲の情報(時間L3,L4)をCPU201aに送信する。CPU201aは、第2の正常範囲の情報をFPGA209aに通知する。
(S39)制御回路220aは、ポート内の全てのレーンを診断したか否かを判定する。全てのレーンを診断した場合、判定処理を終了する。全てのレーンを診断していない場合、処理をステップS31に進める。
図18は、判定処理のフローチャートの例を示す図(その2)である。以下、図18に示す処理をステップ番号に沿って説明する。
(S41)制御回路220aは、ステップS31で取得した立ち上がり時間が、FPGA209aから通知された第2の正常範囲外であるか否かを判定する。立ち上がり時間が第2の正常範囲外である場合、処理をステップS42に進める。立ち上がり時間が第2の正常範囲に含まれる場合、処理をステップS43に進める。
(S42)制御回路220aは、診断対象レーンが異常予兆であることをCPU201aに通知する。そして、処理をステップS39に進める。通知を受けたCPU201aは、診断対象レーンが異常予兆であることをFPGA209aに通知する。
(S43)送受信部210は、制御回路220aの指示に基づき、診断対象レーンのTx−Rx間のリンクを確立する。
(S44)制御回路220aは、診断対象レーンが正常であることをCPU201aに通知する。そして、処理をステップS39に進める。通知を受けたCPU201aは、診断対象レーンが正常であることをFPGA209aに通知する。
このように、インタフェース回路21aは、リンクアップ時の診断処理で異常レーンや異常予兆レーンを検出することができる。
次に、図19は、診断結果受信処理のフローチャートの例を示す図である。図19の処理は、図16のステップS21の処理に対応する。以下、図19に示す処理をステップ番号に沿って説明する。
(S51)FPGA209aの動作制御部209abは、CPU201aから、インタフェース回路21aの各レーンの診断結果を受信する。また、診断結果に加えてレーンごとの第2の正常範囲の情報も受信される場合もある。
(S52)動作制御部209abは、各レーンの診断結果を、診断が行われたインタフェース回路21aに対応する結果管理テーブル280に登録する。
(S53)動作制御部209abは、すべてのレーンの診断結果が正常であるか否かを判定する。診断結果が正常でないレーンがある場合、処理をステップS54に進める。一方、すべてのレーンの診断結果が正常の場合、動作制御部209abは、各レーンに対応する結果管理テーブル280の使用フラグの項目にtrueを登録する。また、動作制御部209abは、第2の正常範囲の情報を受信した場合、それらの情報を各レーンに対応する結果管理テーブル280の時間L3,L4の項目に登録する。そして、動作制御部209abは、診断結果受信処理を終了する。
(S54)動作制御部209abは、異常対応処理を実行する。この処理については、後の図23、図24において詳しく説明する。
なお、動作制御部209abは、例えばステップS51またはステップS52の後に、診断結果を外部機器(例えば、ホスト装置400またはストレージ装置100の管理端末)に通知するようにCPU201aに指示してもよい。この場合、指示を受けたCPU201aは、例えば、診断内容を示す表示情報を外部機器に表示させる。これにより、表示情報を視認したユーザは、異常または異常予兆が検出されたことや、それらがどのデバイスのどのレーンで検出されたかを認識することができる。
次に、通常運用時の診断処理について、シーケンス図とフローチャートを用いて説明する。通常運用とは、ストレージ装置100内でホスト装置400からの要求に応じたDE300へのアクセス処理が実行されている状態である。
図20は、通常運用時の診断制御処理のシーケンスの例を示す図(その1)である。以下、図20に示す処理をステップ番号に沿って説明する。
(ST100)FPGA209aの診断制御部209aaは、診断対象経路テーブル270を参照して、診断対象レーンを決定する。以下、インタフェース回路21aとインタフェース回路21bとの間の伝送路に含まれる1つのレーンが診断対象レーンに決定されたとする。
(ST101)FPGA209aの診断制御部209aaは、診断対象レーンに対する診断開始指示をCPU201aに送信する。この診断開始指示には、診断対象レーンの一方に接続されたデバイスまたはインタフェース回路21aの識別情報と、診断対象レーンの番号とが含まれる。
(ST102)FPGA209aの診断制御部209aaは、診断対象レーンに対する診断開始指示をCPU201aに送信する。この診断開始指示には、診断対象レーンの他方に接続されたデバイスまたはインタフェース回路21bの識別情報と、診断対象レーンの番号とが含まれる。なお、診断対象レーンの番号は、ステップST101と同じである。
なお、上記のステップST101,ST102の処理は、診断制御部209aaが、診断対象経路テーブル270の小グループを先頭から順に選択するたびに実行される。ここで、選択された小グループに伝送路が複数登録されている場合、登録されている伝送路ごとにステップST101,ST102以降の処理が実行される。これにより、登録された複数の伝送路において並列的に診断が行われる。
(ST103)CPU201aのドライバ(ここでは例として、ドライバ201aaとする)は、ステップST101で送信された診断開始指示において指定されたインタフェース回路21aに診断開始指示を送信する。この診断開始指示には、診断対象レーンの番号が含まれる。
(ST104)CPU201aのドライバ201aaは、ステップST102で送信された診断開始指示において指定されたインタフェース回路21bに診断開始指示を送信する。この診断開始指示には、診断対象レーンの番号が含まれる。
(ST105)インタフェース回路21aは、診断開始通知をインタフェース回路21bに送信する。
(ST106)インタフェース回路21bは、診断開始承諾通知をインタフェース回路21aに送信する。
(ST107)インタフェース回路21aは、診断対象レーンを休止させた省電力状態(L0s状態)に遷移する。なお、診断対象レーンとして代表レーン(レーン#0)が指定された場合、インタフェース回路21aは、レーン#0以外のあらかじめ決められたレーン(図12の例ではレーン#3)を休止させる。
(ST108)インタフェース回路21aは、省電力状態への遷移完了通知をインタフェース回路21bに送信する。なお、診断対象レーンとしてレーン#0が指定された場合には、ステップST107と同様にレーン#0以外のあらかじめ決められたレーンが休止される。
(ST109)インタフェース回路21bは、診断対象レーンを休止させた省電力状態(L0s状態)に遷移する。
(ST110)インタフェース回路21bは、省電力状態への遷移完了通知をインタフェース回路21aに送信する。
(ST111)インタフェース回路21aは、診断対象レーンについての異常予兆の診断を実行する。
(ST112)インタフェース回路21bは、診断対象レーンについての異常予兆の診断を実行する。
図21は、通常運用時の診断制御処理のシーケンスの例を示す図(その2)である。以下、図21に示す処理をステップ番号に沿って説明する。
(ST121)インタフェース回路21aは、診断対象レーンの診断が完了すると、診断完了通知をインタフェース回路21bに送信する。
(ST122)インタフェース回路21bは、診断対象レーンの診断が完了すると、診断完了通知をインタフェース回路21aに送信する。
(ST123)インタフェース回路21aは、ステップST121の送信処理とステップST122で送信された情報の受信処理とが完了すると、省電力状態を解除し、通常状態(L0状態)に遷移する。
(ST124)インタフェース回路21aは、通常状態への遷移完了通知をインタフェース回路21bに送信する。
(ST125)インタフェース回路21bは、ステップST121で送信された情報の受信処理と、ステップST122の送信処理とが完了すると、省電力状態を解除し、通常状態(L0状態)に遷移する。
(ST126)インタフェース回路21bは、通常状態への遷移完了通知をインタフェース回路21aに送信する。インタフェース回路21bは、遷移完了通知の送信を契機として、診断開始前に使用していた、診断対象レーンを含むすべてのレーンを用いた通信を再開する。インタフェース回路21aも、遷移完了通知の受信を契機として、診断開始前に使用していた、診断対象レーンを含むすべてのレーンを用いた通信を再開する。
(ST127)インタフェース回路21aは、診断結果をCPU201aに送信する。
(ST128)CPU201aは、ステップST127で送信された診断結果をFPGA209aに送信する。FPGA209aの診断制御部209aaは、インタフェース回路21aからインタフェース回路21bへの伝送路に対応する結果管理テーブル280を特定する。診断制御部209aaは、特定した結果管理テーブル280において診断対象レーンに対応付けられた診断結果を、CPU201aから受信した診断結果によって更新する。
(ST129)インタフェース回路21bは、診断結果をCPU201aに送信する。
(ST130)CPU201aは、ステップST129で送信された診断結果をFPGA209aに送信する。FPGA209aの診断制御部209aaは、インタフェース回路21bからインタフェース回路21aへの伝送路に対応する結果管理テーブル280を特定する。診断制御部209aaは、特定した結果管理テーブル280において診断対象レーンに対応付けられた診断結果を、CPU201aから受信した診断結果によって更新する。
なお、ステップST128,ST130で診断結果を受信したとき、診断制御部209aaは、診断結果を外部機器(例えば、ホスト装置400またはストレージ装置100の管理端末)に通知するようにCPU201aに指示してもよい。この場合、指示を受けたCPU201aは、例えば、診断内容を示す表示情報を外部機器に表示させる。これにより、表示情報を視認したユーザは、異常予兆が検出されたことや、それらがどのデバイスのどのレーンで検出されたかを認識することができる。
(ST131)FPGA209aの動作制御部209abは、診断対象レーンに異常予兆があると診断された場合、異常対応処理を実行する。この異常対応処理は、後の図23、図24において詳しく説明する。
以上の図20、図21の処理では、ステップST105,ST106の処理によって、インタフェース回路21a,21bの双方での診断の開始タイミングを同期させることができる。そして、ステップST121,ST122の処理によって、インタフェース回路21a,21bの双方での診断の終了タイミングを同期させることができる。インタフェース回路21a,21bの間では双方向通信が行われるため、一方向でのみ診断が行われると通信のエラーが発生する場合がある。上記のようにインタフェース回路21a,21bの双方での診断の開始および終了タイミングを同期させることで、このような通信エラーの発生を防止できる。
図22は、通常運用時にインタフェース回路が実行する診断処理の例を示すフローチャートである。図22の処理は、図20のステップST111でインタフェース回路21aが実行する処理に対応する。なお、図20のステップST112でも、インタフェース回路21bによって図22と同様の処理が実行される。以下、図22に示す処理をステップ番号に沿って説明する。
(S61)制御回路220aは、診断が指示された診断対象レーンが、パルスジェネレータ240aに接続されるようにスイッチ260aに接続切り替えを指示する。スイッチ260aは、指示に応じてスイッチ260aの接続を切り替える。このとき、診断実行前に使用されていたレーンのうち、診断対象レーンを除くレーンを用いたインタフェース回路21bとの通信が継続される。
ここで、伝送路において実際に診断されるレーンは、FPGA209aの診断制御部209aaからCPU201aのドライバ201aaを介して指定された診断対象レーンの番号に対応付けられているレーンである。例えば、図10〜図13の構成では、診断対象レーンとしてレーン#0が指定された場合、レーン22aの診断が行われ、診断対象レーンとしてレーン#1が指定された場合、レーン22bの診断が行われる。
ステップS61では、診断対象レーンとしてレーン#0以外のレーンが指定された場合、図11のように、スイッチ260aでは実際に診断されるレーンに関する接続の切り替えのみが実行される。一方、診断対象レーンとしてレーン#0が指定された場合には、図12のようにレーン#0に対する伝送路上のレーンの付け替えが行われるようにスイッチ260aの接続が切り替えられる。なお、診断対象レーンとしてレーン#0が指定された場合、図20のステップST107では、制御回路220aは、レーン#0でなく、他のレーンのうち伝送路上のレーンとの接続が切断されるレーン(図12ではレーン#3)を休止させる。
(S62)制御回路220aは、パルスジェネレータ240aにテスト信号の出力を指示する。パルスジェネレータ240aは、指示に応じてテスト信号を送信する。これにより、伝送路上の診断対象レーンの差動信号線にテスト信号が送信される。検出回路213aは、差動信号線における電圧の立ち上がり時間を検出し、検出された立ち上がり時間を制御回路220aに通知する。
(S63)制御回路220aは、メモリ230aから診断対象レーンに対応する第2の正常範囲の情報(時間L3,L4)を取得する。制御回路220aは、検出された立ち上がり時間が第2の正常範囲外であるか否かを判定する。立ち上がり時間が第2の正常範囲外である場合、処理をステップS64に進める。立ち上がり時間が第2の正常範囲に含まれる場合、処理をステップS65に進める。
(S64)制御回路220aは、診断対象レーンに異常予兆があると判定する。そして、制御回路220aは、処理をステップS66に進める。
(S65)制御回路220aは、診断対象レーンを正常と判定する。
(S66)制御回路220aは、接続状態をステップS61の開始前の状態に戻すようにスイッチ260aに指示する。スイッチ260aは、指示に応じてスイッチ260aの接続を切り替える。そして、診断処理を終了する。
このように、制御回路220aは、第2の正常範囲の情報を用いて、診断対象レーンに異常予兆があるか否かを判定できる。
次に、異常対応処理について説明する。
図23は、異常対応処理の例を示すフローチャート(その1)である。図23の処理は、図19のステップS54または図21のステップST131においてFPGA209aの動作制御部209abが実行する処理に対応する。また、図23の処理は、同一ポートにおける異常または異常予兆が検出された診断対象レーンごとに実行される。以下、図23に示す処理をステップ番号に沿って説明する。
(S71)動作制御部209abは、診断対象レーンと同じポート内に、使用しているレーンが2以上存在しているか否かを判定する。使用しているレーンとは、結果管理テーブル280の使用フラグの項目がtrueになっているレーンである。
使用しているレーンが2以上存在している場合、処理をステップS72に進める。使用しているレーンが2以上存在しない場合、処理をステップS75に進める。
(S72)動作制御部209abは、診断対象レーンの診断結果が異常であるか否かを判定する。診断結果が異常である場合、処理をステップS73に進める。診断結果が異常でない場合(すなわち異常予兆が検出された場合)、処理をステップS77に進める。
(S73)動作制御部209abは、診断対象レーンと同じポート内に、使用禁止になっている異常予兆レーンが存在するか否かを判定する。使用禁止になっているレーンとは、結果管理テーブル280の使用フラグの項目がfalseになっているレーンである。異常予兆レーンとは、結果管理テーブル280において診断結果が異常予兆となっているレーンである。使用禁止の異常予兆レーンが存在する場合、処理をステップS74に進める。使用禁止の異常予兆レーンが存在しない場合、処理をステップS81に進める。
(S74)動作制御部209abは、診断対象レーンと同じポート内に存在する異常予兆レーンから1つを選択し、選択したレーンの使用禁止を解除する。すなわち、動作制御部209abは、選択したレーンに対応する結果管理テーブル280の使用フラグの項目にtrueを登録する。動作制御部209abは、処理をステップS81に進める。
(S75)動作制御部209abは、診断対象レーンの診断結果が異常であるか否かを判定する。診断結果が異常である場合、処理をステップS76に進める。診断結果が異常でない場合(すなわち異常予兆が検出された場合)、処理をステップS79に進める。
(S76)動作制御部209abは、診断対象レーンを使用禁止に設定する。すなわち、動作制御部209abは、診断対象レーンに対応する結果管理テーブル280の使用フラグの項目にFalseを登録する。そして、処理をステップS82に進める。
(S77)動作制御部209abは、診断対象レーンと同じポート内に使用禁止になっている異常レーンが存在するか否かを判定する。異常レーンとは、結果管理テーブル280において診断結果が異常となっているレーンである。使用禁止の異常レーンが存在する場合、処理をステップS79に進める。使用禁止の異常レーンが存在しない場合、処理をステップS78に進める。
(S78)動作制御部209abは、診断対象レーンと同じポート内に使用禁止になっている異常予兆レーンが存在するか否かを判定する。使用禁止の異常予兆レーンが存在する場合、処理をステップS79に進める。使用禁止の異常予兆レーンが存在しない場合、処理をステップS81に進める。
(S79)動作制御部209abは、診断対象レーンの使用を継続する。すなわち、動作制御部209abは、診断対象レーンに対応する結果管理テーブル280の使用フラグの項目にtrueを登録する。そして、処理をステップS82に進める。
図24は、異常対応処理の例を示すフローチャート(その2)である。以下、図24に示す処理をステップ番号に沿って説明する。
(S81)動作制御部209abは、診断対象レーンを使用禁止に設定する。すなわち、動作制御部209abは、診断対象レーンに対応する結果管理テーブル280の使用フラグの項目にFalseを登録する。この場合、同じポートにおいて使用されている他のレーンが存在しているので、このレーンを用いて運用が継続される。
(S82)動作制御部209abは、ポート内の全レーンにおける診断が完了したか否かを判定する。診断が未実行のレーンがある場合、処理を終了する。全レーンにおける診断が完了した場合、処理をステップS83に進める。
(S83)動作制御部209abは、ポートにおけるレーン使用状況の変更内容をインタフェース回路21a,21bに反映する。具体的には、動作制御部209abは、結果管理テーブル280から使用フラグが変更されたレーンを特定する。動作制御部209abは、特定されたレーンのうち、使用フラグがtrueのレーンの使用を再開させ、使用フラグがfalseのレーンを閉塞するようにCPU201aに指示する。CPU201aのドライバ201aaは、指示に応じてインタフェース回路21a,21bにおけるレーンの使用状況を変更させる。
なお、ステップS83では、動作制御部209abは、レーン使用状況の変更内容を外部機器(例えば、ホスト装置400あるいはストレージ装置100の管理端末)に通知するようにCPU201aに指示してもよい。この場合、指示を受けたCPU201aは、例えば、変更内容を示す表示情報を外部機器に表示させる。
以上の図23,24の処理によれば、異常および異常予兆が検出されていないレーンは、そのまま継続して使用される一方、異常が検出されたレーンは閉塞される。また、異常予兆が検出されたレーンは、他のレーンの中に、異常の検出によって閉塞されているレーンがある場合に限って使用される。このように限定された条件下でのみ異常予兆が検出されたレーンが使用されることで、通信性能を可能な限り高く維持しつつ、コンデンサの経年劣化に伴う通信の切断が発生する確率を低減できる。
また、異常予兆が検出されたレーンを使用し続ける場合、動作制御部209abは、そのレーンの使用優先度を下げるようにCPU201aを介してインタフェース回路21aに指示してもよい。これにより、当該レーンにおいて通信の切断が発生する確率をさらに低減できる。
なお、代表レーン(レーン#0)を閉塞するように指示された場合、インタフェース回路21aでは、図12のようにレーン#0に対する伝送路上のレーンの付け替えが行われるようにスイッチ260aの接続が切り替えられる。すなわち、入力端子262,263,264がそれぞれ出力端子267,268,269に接続されるようにスイッチ260aの接続が切り替えられる。また、出力端子266はどの入力端子にも接続されないようにスイッチ260aの接続が切り替えられる。これにより、レーン#0を使用する状態のまま、異常または異常予兆が検出されたレーン22aが使用しないようにすることができる。
次に、ポート内のレーン数が少ない場合の処理を説明する。インタフェース回路では、診断対象レーンに対して診断を実行している間、診断対象レーンと同じポート内の残りのレーンで通信が継続される。このように、診断の実行前より少ない数のレーンを用いて通信が継続されるので、これらのレーンにおける通信負荷が高くなる。そのため、通信のタイムアウトが発生しやすくなる、応答遅延が大きくなる可能性があるといった問題がある。そこで、ポート内のレーン数が少ない場合には、次の図25に示すような診断制御処理が実行される。
図25は、ポート内のレーン数が少ない場合に行う診断処理のシーケンスの例を示す図である。図25では、図20と同じ処理には同じステップ番号を付して示している。また、図25では例として、IOC205aとSASエクスパンダ206aとの間の伝送路が診断対象に指定されたものとする。そして、図20におけるインタフェース回路21aは、診断対象の伝送路においてIOC205a側に接続されたSASインタフェースであるものとする。また、図20におけるインタフェース回路21bは、診断対象の伝送路においてSASエクスパンダ206a側に接続されたSASインタフェースであるものとする。なお、CPU201aでの処理は、SASインタフェース用のドライバ201abによって実行される。
まず、図20のステップST100に代えてステップST100aが実行される。
(ST100a)FPGA209aの診断制御部209aaは、ステップST100と同様に、診断対象経路テーブル270を参照して、診断対象レーンを決定する。これに加えて、診断制御部209aaは、診断対象経路テーブル270、または、診断対象レーンが含まれる伝送路に対応する結果管理テーブル280を参照して、診断対象レーンと同じポート内のレーンの数を特定する。このとき、診断制御部209aaは、レーン数が少ないと判定したとする。例えば、ポート内のレーン数が4以下の場合、レーン数が少ないと判定される。
レーン数が少なくないと判定された場合、図20のステップST101以降の処理が実行される。一方、レーン数が少ないと判定された場合、図20のステップST101の前に、以下のステップST100b〜ST100jの処理が実行される。
(ST100b)FPGA209aの診断制御部209aaは、診断対象の伝送路の一方に接続されたインタフェース回路21aを宛先とするタイムアウト時間の延長指示を、CPU201aに送信する。
(ST100c)CPU201aのドライバ201abは、通信のタイムアウト時間の延長指示をインタフェース回路21aに送信する。インタフェース回路21aは、タイムアウト時間を延長する設定処理を実行し、CPU201aに延長完了通知を送信する。
(ST100d)CPU201aのドライバ201abは、FPGA209aに延長完了通知を送信する。
(ST100e)FPGA209aの診断制御部209aaは、診断対象の伝送路の他方に接続されたインタフェース回路21bを宛先とするタイムアウト時間の延長指示を、CPU201aに送信する。
(ST100f)CPU201aのドライバ201abは、通信のタイムアウト時間の延長指示をインタフェース回路21bに送信する。インタフェース回路21bは、タイムアウト時間を延長する設定処理を実行し、CPU201aに延長完了通知を送信する。
(ST100g)ドライバ201abは、FPGA209aに延長完了通知を送信する。
(ST100h)FPGA209aの診断制御部209aaは、診断対象の伝送路の上流側に接続されたインタフェース回路21aを備えるデバイス、すなわちIOC205aを宛先としたIO(Input Output)負荷調整指示を、CPU201aに送信する。また、IO負荷調整指示では、IOC205aがSASエクスパンダ206aに送信データを振り分ける割合を低くし、IOC205aがSASエクスパンダ206bに送信データを振り分ける割合を高くすることが指示される。
(ST100i)CPU201aのドライバ201abは、IOC205aにIO負荷調整指示を送信する。IOC205aは、指示にしたがってSASエクスパンダ206a,206bのそれぞれに対するデータ振り分けの割合を変更し、CPU201aに調整完了通知を送信する。
(ST100j)CPU201aのドライバ201abは、FPGA209aに調整完了通知を送信する。
FPGA209aの診断制御部209aaは、調整完了指示を受信すると、図20のステップST101,ST102の処理を実行する。以後、図20と同様の処理が実行される。
なお、図示しないが、FPGA209aの診断制御部209aaは、図21のステップST128,ST130で送信された診断結果を受信すると、ステップST100b,ST100e,ST100hで指示した内容を元に戻すための指示を、CPU201aを介して対応する各部に送信する。
以上の図25の処理によれば、診断の実行中にインタフェース回路21a,21b間でタイムアウトによる通信の中断が発生する可能性を低減できる。また、IOC205aからSASエクスパンダ206aを経由してDE300に送信されるデータ量が低減される。そのため、インタフェース回路21a,21b間の通信がボトルネックとなってホスト装置400からDE300に対するアクセス性能が低下する可能性を低減できる。
なお、ステップST100b〜ST100gの処理と、ステップST100h〜ST100jの処理のうち、一方だけが実行されてもよい。また、ステップST100h〜ST100jの処理は、CPU201aまたはCPU201bからDE300への通信経路が途中で分岐している構成で、その分岐先の通信経路上に位置するインタフェース回路で診断が実行される場合に適用可能である。
[第3の実施の形態]
次に、PCIeバス、PCIeケーブル、SASケーブルに予備レーンが追加される場合を説明する。
図26は、第3の実施の形態のストレージ装置におけるレーン数の例を示す図である。図26に示すように、第3の実施の形態のストレージ装置では、第2の実施の形態に対してインタフェース回路間の接続レーン数だけが異なる。具体的には、インタフェース回路間の伝送路に、診断時に通信するための予備レーンが追加されている。例えば、CPU201aとPCIeスイッチ203aとの間は、予備レーンが追加されることで合計5レーンが接続される。
図27は、第3の実施の形態におけるインタフェース回路の内部構成例を示す図である。第3の実施の形態では、図10〜図12に示したインタフェース回路21aは、図27のインタフェース回路21a1のように変形される。
インタフェース回路21a1は、相手側のインタフェース回路とレーン22a〜22eによって接続されている。これらのうち、レーン22eが予備レーンに設定される。また、インタフェース回路21a1は、レーン22eを介して信号を送受信するための送受信部210eをさらに有する。また、インタフェース回路21a1のスイッチ260a1は、送受信部210eと接続する出力端子269aをさらに有する点で、図10〜図12のスイッチ260aと異なる。
診断が実行されていない状態では、図10と同様に、入力端子262〜265がそれぞれ出力端子266〜269に接続されている。また、例えば、レーン#1の診断が指示された場合には、図27に示すように、入力端子263の接続先が出力端子267から出力端子269aに変更され、さらに、入力端子261と出力端子267とが接続される。この状態で、送受信部210bがレーン22bの診断を実行する。これとともに、レーン22a,22c〜22eを用いて相手側のインタフェース回路との間の通信が継続される。このような構成によれば、相手側のインタフェース回路との通信で使用されるレーン数が診断実行前と変化しない。このため、相手側のインタフェース回路との間の通信負荷が高まることが原因となって、通信速度が低下することや、タイムアウトの発生による通信の中断が発生しやすくなることがなくなる。
また、上記構成によれば、診断実行時と未実行時とで使用レーン数が変化しないため、図16のステップS17で示したようにホスト装置400からDE300へのアクセス性能を考慮しながら同時に診断を実行する箇所を決定する必要がなくなる。さらに、図25に示したようなタイムアウト時間の延長やIO負荷調整を行う必要もなくなる。したがって、ホスト装置400からDE300へのアクセス性能の低下や、部分的な通信の断絶といった事態を招くことなく、診断制御手順を簡易化できる。
また、以上の各実施の形態に関し、さらに以下の付記を開示する。
(付記1) 第1の通信装置と、
複数の伝送路を介して前記第1の通信装置と接続された第2の通信装置と、を備え、
前記第1の通信装置は、
前記複数の伝送路を用いた前記第2の通信装置とのデータ通信が可能な状態で、前記複数の伝送路の中から診断を行う対象伝送路が指定されると、前記複数の伝送路のうち前記対象伝送路以外の残りの伝送路を用いて前記第2の通信装置とのデータ通信が可能な状態を継続しながら、前記対象伝送路にテスト信号を送信する送信部と、
前記対象伝送路における前記テスト信号の検出結果に基づいて、前記対象伝送路における異常の予兆の有無を診断し、診断結果を出力する制御部と、
を有する、
情報処理装置。
(付記2) 前記制御部は、
前記第2の通信装置との通信開始時に、前記送信部に、前記複数の伝送路のそれぞれに前記テスト信号を送信させ、前記複数の伝送路のそれぞれにおける前記テスト信号の波形の立ち上がりにかかる第1の立ち上がり時間を検出し、
前記対象伝送路が指定され、前記対象伝送路に前記テスト信号が送信されると、前記対象伝送路における前記テスト信号の波形の立ち上がりにかかる第2の立ち上がり時間が、前記対象伝送路における前記第1の立ち上がり時間を基準として決定される判定範囲に含まれるかを判定し、その判定結果に基づいて前記対象伝送路における異常の予兆の有無を診断する、
付記1記載の情報処理装置。
(付記3) 前記送信部は、
複数の入力端子のうちの第1の入力端子に前記テスト信号を供給するテスト信号出力部と、
前記第2の通信装置へ送信するデータを、前記複数の入力端子のうち前記第1の入力端子を除く残りの複数の第2の入力端子に対して振り分けて供給し、前記複数の第2の入力端子の数は前記複数の伝送路の数と同じである、データ出力部と、
前記複数の入力端子のそれぞれと、前記複数の伝送路のそれぞれとの間の接続経路を切り替えるスイッチと、
を有し、
前記制御部は、
前記第2の通信装置に対するデータ送信を前記複数の伝送路を用いて実行させる場合、前記複数の第2の入力端子と前記複数の伝送路とが一対一で接続されるように前記スイッチを制御し、
前記第2の通信装置に対するデータ送信を前記残りの伝送路を用いて実行させる場合、前記複数の伝送路のうち前記対象伝送路の接続先を前記第1の入力端子に切り替えるように前記スイッチを制御する、
付記1または2記載の情報処理装置。
(付記4) 前記制御部は、前記複数の伝送路のうち、通信プロトコルで規定された代表伝送路として使用されていた第1の伝送路が前記対象伝送路として指定された場合、前記第1の伝送路の接続先を前記第1の入力端子に切り替えるとともに、前記複数の第2の入力端子のうち前記第1の伝送路に接続されていた第3の入力端子の接続先を、前記複数の伝送路のうち前記第1の伝送路以外の第2の伝送路に切り替えるように前記スイッチを制御し、前記第2の伝送路を前記代表伝送路として使用可能状態に維持させる、
付記3記載の情報処理装置。
(付記5) 前記複数の伝送路の中から前記対象伝送路を順次選択し、選択された前記対象伝送路を前記第1の通信装置に指定する診断制御装置をさらに有する、
付記1乃至4のいずれか1つに記載の情報処理装置。
(付記6) 前記診断制御装置は、前記対象伝送路を指定して前記対象伝送路における診断を実行させる際に、前記複数の伝送路の数が所定の閾値以下の場合、前記第1の通信装置から前記第2の通信装置へのデータ通信に対する前記第2の通信装置からの応答のタイムアウト時間を長くするように、前記第1の通信装置に設定する、
付記5記載の情報処理装置。
(付記7) 前記情報処理装置は、
前記第1の通信装置と前記第2の通信装置とをそれぞれ含む第1の通信装置群と第2の通信装置群と、
送信するデータを前記第1の通信装置群に含まれる前記第1の通信装置と前記第2の通信装置群に含まれる前記第1の通信装置とに振り分ける第3の通信装置と、
を有し、
前記診断制御装置は、前記第1の通信装置群に含まれる前記第1の通信装置に前記対象伝送路を指定して前記対象伝送路における診断を実行させる際に、前記第1の通信装置群に含まれる前記第1の通信装置に対して振り分けるデータ量の比率を低下させるように前記第3の通信装置に指示する、
付記5または6記載の情報処理装置。
(付記8) 前記情報処理装置は、前記第1の通信装置と前記第2の通信装置とをそれぞれ含む複数の通信装置群を有し、
前記診断制御装置は、診断順情報に基づいて、前記複数の通信装置群のうちのどの通信装置群に含まれるどの伝送路を前記対象伝送路に指定するかを決定し、
前記診断順情報には、第1の通信経路上に前記複数の通信装置群のうちの第1の通信装置群が存在し、前記第1の通信経路から分岐して同一装置に接続する複数の第2の通信経路のそれぞれに前記複数の通信装置群のうち第2の通信装置群が存在する場合、前記第1の通信装置群に含まれる前記複数の伝送路の数と、前記第2の通信装置群のそれぞれに含まれる前記複数の伝送路の数の合計数との差または比率に基づいて、前記複数の通信装置群に含まれる前記複数の伝送路のそれぞれと、前記第2の通信装置群のそれぞれに含まれる前記複数の伝送路のそれぞれとの間で、同時に前記対象伝送路として指定する伝送路の組み合わせが登録される、
付記5または6記載の情報処理装置。
(付記9) 前記第1の通信装置は、前記複数の伝送路に加えて予備の伝送路を介して前記第2の通信装置と接続され、
前記送信部は、前記複数の伝送路を用いた前記第2の通信装置に対するデータ通信中に前記対象伝送路が指定されると、前記残りの伝送路と前記予備の伝送路とを用いて前記第2の通信装置に対するデータ通信を継続しながら、前記対象伝送路にテスト信号を送信する、
付記1乃至8のいずれか1つに記載の情報処理装置。
(付記10) 第1の通信装置が複数の伝送路を用いて第2の通信装置とのデータ通信が可能な状態で、前記複数の伝送路の中から診断を行う対象伝送路を前記第1の通信装置に指定することで、前記複数の伝送路のうち前記対象伝送路以外の残りの伝送路を用いて前記第2の通信装置とのデータ通信が可能な状態を継続しながら、前記対象伝送路にテスト信号を送信する診断動作を前記第1の通信装置に実行させる制御部と、
前記対象伝送路における前記テスト信号の検出結果に基づく、前記対象伝送路における異常の予兆の有無の診断結果を、前記第1の通信装置から受信する受信部と、
を有する診断制御装置。
(付記11) 前記制御部は、前記対象伝送路を指定して前記対象伝送路における診断を実行させる際に、前記複数の伝送路の数が所定の閾値以下の場合、前記第1の通信装置から前記第2の通信装置へのデータ通信に対する前記第2の通信装置からの応答のタイムアウト時間を長くするように、前記第1の通信装置に設定する、
付記10記載の診断制御装置。
(付記12) 前記第1の通信装置と前記第2の通信装置とをそれぞれ含む第1の通信装置群と第2の通信装置群とが存在し、前記第1の通信装置群に含まれる前記第1の通信装置と前記第2の通信装置群に含まれる前記第1の通信装置とが第3の通信装置に搭載されている場合に、前記診断制御装置は、前記第1の通信装置群に含まれる前記第1の通信装置に前記対象伝送路を指定して前記対象伝送路における診断を実行させる際に、前記第3の通信装置が前記第1の通信装置群に含まれる前記第1の通信装置と前記第2の通信装置群に含まれる前記第1の通信装置とに送信データを振り分ける際の振り分けデータ量の比率について、前記第1の通信装置群に含まれる前記第1の通信装置に対するデータ量を低下させるように前記第3の通信装置に指示する、
付記10または11記載の診断制御装置。
(付記13) 複数の伝送路を介して他の通信装置と接続された通信装置であって、
前記複数の伝送路を用いた前記他の通信装置とのデータ通信が可能な状態で、前記複数の伝送路の中から診断を行う対象伝送路が指定されると、前記複数の伝送路のうち前記対象伝送路以外の残りの伝送路を用いて前記他の通信装置とのデータ通信が可能な状態を継続しながら、前記対象伝送路にテスト信号を送信する送信部と、
前記対象伝送路における前記テスト信号の検出結果に基づいて、前記対象伝送路における異常の予兆の有無を診断し、診断結果を出力する制御部と、
を有する通信装置。
(付記14) 前記制御部は、
前記他の通信装置との通信開始時に、前記送信部に、前記複数の伝送路のそれぞれに前記テスト信号を送信させ、前記複数の伝送路のそれぞれにおける前記テスト信号の波形の立ち上がりにかかる第1の立ち上がり時間を検出し、
前記対象伝送路が指定され、前記対象伝送路に前記テスト信号が送信されると、前記対象伝送路における前記テスト信号の波形の立ち上がりにかかる第2の立ち上がり時間が、前記対象伝送路における前記第1の立ち上がり時間を基準として決定される判定範囲に含まれるかを判定し、その判定結果に基づいて前記対象伝送路における異常の予兆の有無を診断する、
付記13記載の通信装置。
(付記15) 前記送信部は、
複数の入力端子のうちの第1の入力端子に前記テスト信号を供給するテスト信号出力部と、
前記他の通信装置へ送信するデータを、前記複数の入力端子のうち前記第1の入力端子を除く残りの複数の第2の入力端子に対して振り分けて供給し、前記複数の第2の入力端子の数は前記複数の伝送路の数と同じである、データ出力部と、
前記複数の入力端子のそれぞれと、前記複数の伝送路のそれぞれとの間の接続経路を切り替えるスイッチと、
を有し、
前記制御部は、
前記他の通信装置に対するデータ送信を前記複数の伝送路を用いて実行させる場合、前記複数の第2の入力端子と前記複数の伝送路とが一対一で接続されるように前記スイッチを制御し、
前記他の通信装置に対するデータ通信を前記残りの伝送路を用いて実行させる場合、前記複数の伝送路のうち前記対象伝送路の接続先を前記第1の入力端子に切り替えるように前記スイッチを制御する、
付記13または14記載の通信装置。