(57)【要約】【課題】ＳＡＮに新しいデバイス種別を含めるようデータコレクタの機能性を拡張することに関わる効率的なシステムおよび方法を提供する。【解決手段】ネットワークのパフォーマンスデータ収集を拡張するシステムが開示される。本システムは、１つまたは複数のデバイス種別に対応する１つまたは複数のデバイスを含む。本システムは、デバイスに対応する１つまたは複数のデータソースも含み、データソースはデバイスからパフォーマンスデータを収集することが可能である。抽象データモジュール（Abstract Data Module）は、インタフェースおよび抽象クラス（Abstract Class）を含み、データソースに動作可能に接続される。本システムは、抽象データモジュールを使用して、データソースからパフォーマンスデータを収集することが可能であるデータコレクタを含む。【選択図】図１
2004164636.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークのパフォーマンスデータ収集を拡張するシステムであって、
１つまたは複数のデバイス種別に対応する１つまたは複数のデバイスと、
該１つまたは複数のデバイスに対応する１つまたは複数のデータソースであって、前記１つまたは複数のデバイスからパフォーマンスデータを収集することができる１つまたは複数のデータソースと、
該１つまたは複数のデータソースに動作可能に接続された抽象データモジュールと、
該抽象データモジュールに接続され、前記１つまたは複数のデータソースおよび前記抽象データモジュールを使用して前記１つまたは複数のデバイスからパフォーマンスデータを収集することのできるデータコレクタと、
を有するシステム。
【請求項２】
前記１つまたは複数のデータソースが、それぞれパフォーマンスビーンを有し、前記デバイスそれぞれのパフォーマンスデータが、対応する前記パフォーマンスビーンを使用して前記デバイスから対応する前記データソースに伝送される請求項１記載のシステム。
【請求項３】
前記抽象データモジュールが、前記１つまたは複数のデバイスの前記デバイス種別に関連する汎用特性を含む請求項１記載のシステム。
【請求項４】
前記データソースが、該データソースに対応する前記デバイスの前記デバイス種別に関連する固有の特性を含む請求項３記載のシステム。
【請求項５】
前記データソースの前記固有の特性が、前記抽象データモジュールの前記汎用特性と組み合わせられて、前記データコレクタが前記デバイスからパフォーマンスデータを収集できるようにする請求項４記載のシステム。
【請求項６】
ネットワークのパフォーマンスデータ収集を拡張する方法であって、
前記ネットワークに実装される１つまたは複数の対応するデバイスに１つまたは複数のデータソースを作成するステップであって、前記１つまたは複数のデバイスは１つまたは複数のデバイス種別に対応する、作成するステップと、
前記１つまたは複数のデータソースの完全な実装を作成するステップと、
前記１つまたは複数のデータソースの前記完全な実装を使用して、前記１つまたは複数のデバイスのパフォーマンスデータを収集するステップと、
を含む方法。
【請求項７】
前記１つまたは複数のデータソースを作成するステップが、前記１つまたは複数のデバイスの前記デバイス種別に関連する固有の特性を前記１つまたは複数のデータソースに実装することを含む請求項６記載の方法。
【請求項８】
前記１つまたは複数のデバイスの前記デバイス種別に関連する汎用特性を抽象データモジュールに実装することをさらに含む請求項７記載の方法。
【請求項９】
前記１つまたは複数のデータソースの完全な実装を作成するステップが、前記１つまたは複数のデータソースの前記固有の特性を前記抽象データモジュールの前記汎用特性と組み合わせることを含む請求項８記載の方法。
【請求項１０】
前記１つまたは複数のデータソースを作成するステップが、前記１つまたは複数のデータソースに対応する１つまたは複数のパフォーマンスビーンを作成することを含み、前記デバイスそれぞれのパフォーマンスデータが、対応する前記パフォーマンスビーンを使用して前記デバイスから対応する前記データソースに伝送される請求項６記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術分野は、ネットワークのパフォーマンスデータ収集であり、特に、ネットワークのパフォーマンスデータ収集を拡張するシステムおよび方法である。
【背景技術】
【０００２】
ストレージエリアネットワーク（ＳＡＮ）は、たとえばディスクアレイ、テープバックアップシステム、および他の関連デバイスを含む各種デバイスがリンクされたネットワークであることができる。ＳＡＮは、コンピュータネットワークにおける記憶リソースの統合に使用することができる。ストレージ（storage、記憶装置）の統合とは、記憶資源を集中化するとともに、多くのアプリケーションサーバ間で共有するという概念である。ストレージ統合の主な利点は、コンピュータネットワークの全記憶容量を管理する際の効率が上がることである。単一のインタフェースを通してすべての記憶資源を集中管理することによって、管理効率は上がる。加えて、コンピュータネットワークの記憶容量の管理に必要な人員の数が減るため、ストレージの統合を通して費用節減が成し遂げられる。さらに、記憶容量を必要に応じて特定のアプリケーションサーバに割り振ることによって、記憶容量の利用を最適化することができる。
【０００３】
ストレージ統合の利点を実現するため、ＳＡＮ内のデバイスのストレージパフォーマンスに関連する情報を収集することができる。情報は、デバイスのストレージパフォーマンスの監視し解析するのに使用し得るパフォーマンスデータの形であり得る。集められた情報を中央部で使用して、コンピュータネットワークの全記憶容量の最適化、ストレージパフォーマンスの予測不能なことの管理、ＳＡＮへのアップグレード変更の用意を行うようにすることができる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
データコレクタを使用して、ＳＡＮ内の分散したデバイスのパフォーマンスデータを集めることができる。通常、現行システムでのパフォーマンスデータ収集は、ＳＡＮ内の特定の種別のデバイスと結びついている。３つの汎用なデバイス種別としては、ホスト装置、データ記憶装置、および相互接続装置が挙げられる。ＳＡＮ内の新しい種別のデバイスからパフォーマンスデータを収集するように、データコレクタの機能性を拡張するには、データコレクタに大きな変更を加える必要がある。たとえば、新しいデバイス種別に関連する機能特性を、データコレクタに具体的にコード化しなければならず、通常、ＳＡＮ内のデバイスは共通する機能特性を共有しているため、データコレクタにおいて相当量のコードが複写されることになる。したがって、ＳＡＮに新しいデバイス種別を含めるようデータコレクタの機能性を拡張することに関わる現行のシステムおよび方法は、非効率的であるとともに冗長的である。
【課題を解決するための手段】
【０００５】
ネットワークのパフォーマンスデータ収集を拡張するシステムが開示される。本システムは、１つまたは複数のデバイス種別に対応する１つまたは複数のデバイスを含む。本システムは、デバイスに対応する１つまたは複数のデータソースも含み、データソースはデバイスからパフォーマンスデータを収集することが可能である。抽象データモジュール（Abstract Data Module）は、インタフェースおよび抽象クラス（Abstract Class）を含み、データソースに動作可能に接続される。本システムは、抽象データモジュールを使用して、データソースからパフォーマンスデータを収集することが可能であるデータコレクタを含む。
【０００６】
ネットワークのパフォーマンスデータ収集を拡張する方法も開示される。本方法は、ネットワークに実装する１つまたは複数の対応するデバイスの１つまたは複数のデータソースを作成するステップを含み、デバイスは１つまたは複数のデバイス種別に対応する。本方法は、データソースの完全な実装を作成するステップも含む。次いで、デバイスのパフォーマンスデータが、データソースの完全な実装（complete implementation）を使用して収集される。
【０００７】
詳細な説明では、同様の番号が同様の要素を指す添付図面を参照する。
【発明を実施するための最良の形態】
【０００８】
図１は、ストレージエリアネットワーク（ＳＡＮ）１０のパフォーマンスデータ収集を拡張するシステム５の一実施形態の模式図である。ＳＡＮ１０は、たとえばワークステーション、サーバ、ディスクアレイ、テープバックアップシステム、および他の関連デバイスを含む各種デバイス１２がリンクされたネットワークであることができる。デバイス１２は、たとえば、ホスト装置、記憶装置、相互接続装置、ネットワーク接続型記憶装置、およびホストバスアダプタ装置を含む、１つまたは複数の関連デバイス種別に対応する。したがって、ワークステーションおよびサーバはホスト装置に対応し、ディスクアレイは記憶装置に対応する。
【０００９】
デバイス１２は、たとえば、光ファイバチャネル、従来の銅製の陸線（land line）、またはワイヤレスリンクを使用することによって接続することができる。ＳＡＮ１０の全体のストレージパフォーマンスの監視、管理、および最適化を行うために、デバイス１２のパフォーマンスデータが収集される。ストレージパフォーマンスの最適化は、デバイス１２からパフォーマンスデータを収集するデータコレクタ２４で開始される。データコレクタ２４のパフォーマンスデータ収集は、以下に詳細に述べるように、データコレクタ２４が、ＳＡＮ１０に実装し得る新しいデバイス種別からパフォーマンスデータを収集することができるように、拡張することが可能である。デバイス１２のパフォーマンスデータは、各デバイス１２内にそれぞれ記憶することができる。たとえば、パフォーマンスデータは、各デバイス１２に含まれるデータベース（図示せず）内の記録として記憶することができる。データコレクタ２４は、各データベースにアクセスして、各デバイス１２の所望のパフォーマンスデータを検索することが可能である。
【００１０】
各デバイス１２は、対応するデータソース１６に接続されている。各データソース１６は、対応するパフォーマンスビーン（performance bean）１４およびパフォーマンスインタフェース１７を含み得る。各データソース１６は、対応するデバイス１２のデバイス種別に関連する固有の機能特性（specific functional characteristics）を実装する１つまたは複数のアルゴリズムを含み得る。対応するパフォーマンスビーン１４が、データソース１６によって実装される固有の機能特性を使用して、対応するデバイス１２からパフォーマンスデータを検索する。たとえば、固有の機能特性は、デバイス１２との通信方法に関連する。パフォーマンスビーン１４は、デバイス１２との通信方法を使用して、デバイス１２からパフォーマンスデータを検索することができる。
【００１１】
パフォーマンスビーン１４は、デバイス１２からパフォーマンスデータを検索する１つまたは複数のアルゴリズムを含み得る。パフォーマンスビーン１４は、対応するデバイス１２によってサポートされる通信方法と互換性のある方法を使用して、対応するデバイス１２からパフォーマンスデータを検索することができる。たとえば、記憶デバイス１２は、ＳＣＳＩコマンドを受信して、記憶デバイス１２から特定のパフォーマンスデータを検索することが可能であり得る。対応するパフォーマンスビーン１４は、ＳＣＳＩコマンドを記憶デバイス１２に送り、記憶デバイス１２からパフォーマンスデータを検索することができる。次いで、パフォーマンスビーン１４は、パフォーマンスデータを、対応するデータソース１６と互換性のあるフォーマットでパースすることができる。
【００１２】
各パフォーマンスビーン１４は、たとえば、コンポーネントベースのソフトウェアを開発する方法として既知のＪａｖａＢｅａｎｓ（商標）コンポーネントアーキテクチャ等、オブジェクト指向プログラミングにおいて既知の技法を用いて構築することができる。各パフォーマンスビーン１４は、データコレクタ２４がデバイス１２からパフォーマンスデータを収集するために使用し得るコンポーネントベースのソフトウェアを含む。各パフォーマンスビーン１４は、パフォーマンスビーン１４によって収集し得るパフォーマンスデータの種別についての情報、およびデバイス１２からパフォーマンスデータを収集する方法を含む。この情報は、各パフォーマンスビーン１４のＢｅａｎＩｎｆｏクラスに記憶される。各データソース１６は、パフォーマンスインタフェース１７を使用して対応するパフォーマンスビーン１４を通して、対応するデバイス１２からパフォーマンスデータを検索することができる。パフォーマンスビーン１４は、新しいデータソース１６による新しいデバイス１２からのパフォーマンスデータ収集のための導管として機能することができる。データ収集プロセスを実行するために、新しいデータソース１６はパフォーマンスインタフェース１７を呼び出し、次いで、パフォーマンスビーン１４によるデバイス１２からのデータ収集を開始する。
【００１３】
パフォーマンスインタフェース１７は、データソース１６によるデータ収集を制御する１つまたは複数のアルゴリズムを含み得る。たとえば、パフォーマンスインタフェース１７は、対応するデバイス１２からパフォーマンスデータを検索するために、対応するパフォーマンスビーン１４がポーリングされる最大または最小の時間間隔を求めるアルゴリズムを含み得る。さらに、パフォーマンスインタフェース１７は、パフォーマンスビーン１４が以前検索して記憶していたかもしれないパフォーマンスデータ値をリセットするアルゴリズムも含み得る。パフォーマンスインタフェース１７は、データソース１６それぞれによって使用される。
【００１４】
データソース１６は、抽象データモジュール１８に動作可能に接続される。抽象データモジュール１８は、１つまたは複数のアルゴリズムを使用して、データソース１６と抽象データモジュール１８とをインタフェースし得るインタフェース２０を含む。たとえば、インタフェース２０は、データ収集のスケジューリング、パフォーマンスデータの収集、および１つまたは複数のデータソース１６について集められたパフォーマンスデータの要約を行うアルゴリズムを使用し得る。データソース１６はすべて、データソース１６に関連するデバイス種別に関わりなく、インタフェース２０を使用し得る。
【００１５】
抽象データモジュール１８は、ＳＡＮ１０内のすべてのデバイス種別に共通する抽象クラス２２も含む。抽象クラス２２は、ＳＡＮ１０内のデバイス１２に対応するデバイス種別に関連する汎用機能特性（generic functional characteristics）を実装する１つまたは複数のアルゴリズムを含む。汎用機能特性は、デバイス１２に関連するすべてのデバイス種別に共通する機能特性に関連する。汎用機能特性の例としては、特定のデバイス１２に対して収集されたパフォーマンスデータの相関関係に関連する情報、パフォーマンスがどのように収集されたかに関連する情報、収集されたパフォーマンスデータの記憶領域場所、および収集すべき特定のパフォーマンスデータが挙げられる。
【００１６】
インタフェース２０および抽象クラス２２は、ＳＡＮ１０に実装可能なデバイス１２に関連する可能性のあるすべてのデバイス種別と互換性がある。インタフェース２０および抽象クラス２２は、抽象データモジュール１８に直接コード化することができる。あるいは、インタフェース２０および抽象クラス２２は、アルゴリズムによって抽象データモジュール１８に呼び出すことができる別個のソフトウェアモジュールとして存在してもよい。
【００１７】
抽象データモジュール１８は、データコレクタ２４に動作可能に接続される。拡張性を保証するために、データコレクタ２４は、新しいデータソース１６を作成する１つまたは複数のアルゴリズム、および新たに作成されたデータソース１６を通してパフォーマンスデータ収集を開始する１つまたは複数のアルゴリズムを含み得る。データコレクタ２４は、新しいデータソース１６および対応するパフォーマンスビーン１４それぞれに新しいオブジェクトをインスタンス化することによって、新しいデータソース１６および対応するパフォーマンスビーン１４を作成することができる。オブジェクトをインスタンス化する方法は、たとえばＪａｖａ（商標）プログラミング等、オブジェクト指向プログラミングにおいて既知である。データコレクタ２４は、新しいデータソース１６によるパフォーマンスデータ収集をスケジュールする１つまたは複数のアルゴリズムも含み得る。
【００１８】
データコレクタ２４は、デバイス１２について収集されたパフォーマンスデータを記憶するデータベース２６に動作可能に接続される。パフォーマンスデータはデータベース２６の記録として記憶することができ、データコレクタ２４はパフォーマンスデータにアクセスすることができる。
【００１９】
データコレクタ２４は、コンピュータまたは他のマシンによって実行されるソフトウェアに実装し得る。データコレクタ２４は、ソフトウェア（図示せず）のモジュールまたはコンポーネントであり得る。データソース１６、抽象データモジュール１８、パフォーマンスビーン１４、インタフェース２０、抽象クラス２２、およびパフォーマンスインタフェース１７も、ソフトウェアモジュールとして実装することができる。
【００２０】
図２は、ＳＡＮ１０のパフォーマンスデータ収集を拡張する方法３０の一実施形態の流れ図を示す。図２に示す一実施形態では、流れ図に、新しいデバイス種別の新しいデバイス１２をＳＡＮ１０に組み込むステップと、新しいデバイス１２からパフォーマンスデータを収集するステップと、が示される。
【００２１】
ステップ３４において、データコレクタ２４は、パフォーマンスデータを新しいデバイス１２から収集するのに必要なデータソース１６の種別を作成するために、新しいデバイス１２のデバイス種別を識別する。データコレクタ２４は、新しいデバイス１２をＳＡＮ１０に実装すべきときは常に、データコレクタ２４に動作可能に接続された処理手段（図示せず）から通知を受け取ることができる。処理手段は、コンピュータまたは他のマシンによって実行されるソフトウェアに実装し得る。処理手段は、たとえば、１つまたは複数の適宜プログラムされた汎用プロセッサ、特にプログラムされたプロセッサ、またはＡＳＩＣも含み得る。データコレクタ２４は、新しいデバイス１２のデバイス種別に対応する各種通知によって、新しいデバイス１２を通知することができる。通知は新しいデバイス１２のデバイス種別に対応するため、データコレクタ２４は、プロセッサから受け取る通知の種別によって新しいデバイス１２のデバイス種別を識別することができる。たとえば、データコレクタ２４は、ホストデバイス種別に対応する通知を受け取ったとき、新しいホストデバイスのデバイス種別を識別することができる。
【００２２】
ステップ３６において、データコレクタ２４は、ステップ３４において識別された新しいデバイス種別に新しいデータソース１６および対応するパフォーマンスビーン１４を作成する。作成されるデータソース１６の種別は、新しいデバイス１２のデバイス種別に依存する。たとえば、新しいデバイス１２がＢｒｏｃａｄｅ（商標）スイッチである場合、Ｂｒｏｃａｄｅ（商標）スイッチは相互接続装置の一種であるため、相互接続データソースがデータコレクタ２４によって作成される。新しいデータソース１６は、新しいデバイス１２に対応するデバイス種別に関連する固有の機能特性を実装することによって作成される。固有の機能特性は、データコレクタ２４がオブジェクトをインスタンス化し、新しいデバイス１２に対応する新しいデバイス種別の固有の機能特性をそのオブジェクトに直接コード化することによって実装することができる。固有の機能特性をオブジェクトにコード化することは、コンピュータプログラマによって手動で、またはオブジェクト作成モジュール（図示せず）によって自動的に行い得る。作成されるパフォーマンスビーン１４の種別も、新しいデバイス１２のデバイス種別に依存する。たとえば、Ｂｒｏｃａｄｅ（商標）スイッチの例では、相互接続データソースは、Ｂｒｏｃａｄｅ（商標）スイッチのパフォーマンスビーンを作成する。
【００２３】
ステップ３８において、データコレクタ２４が、新しいデータソース１６の固有の機能特性を汎用機能特性に組み合わせることによって、新しいデータソース１６の完全な実装が作成され、抽象データモジュール１８に含められる。汎用機能特性の例は上に提供した。固有の機能特性は、データコレクタ２４が新しいデータソース１６にインスタンス化されたオブジェクトに関連するクラスを、抽象データモジュール１８を含むように拡張することによって汎用機能特性と組み合わせることができる。インスタンス化されたオブジェクトのクラスを拡張する方法は、たとえばＪａｖａ（商標）プログラミング等、オブジェクト指向プログラミングにおいて既知である。
【００２４】
上で考察したように、抽象データモジュール１８は、ＳＡＮ１０に実装可能なすべてのデバイス種別に共通の抽象クラス２２を含む。抽象クラス２２は、ＳＡＮ１０に実装可能なすべてのデバイス種別に関連する汎用機能特性を実装する１つまたは複数のアルゴリズムを含む。したがって、抽象クラス２２を含むことにより、抽象データモジュール１８は、事前設計され、任意の新しいデータソース１６の部分的な実装を提供する。このため、新しいデータソース１６作成時に、新しいデバイス種別の汎用機能特性を新しいデータソース１６に直接コード化する必要がない。新しいデータソース１６の完全な実装により、データコレクタ２４は、新しいデータソース１６を通してパフォーマンスデータを収集することができる。データコレクタ２４は、予め規定された間隔でデバイス１２からパフォーマンスデータを収集することができる。
【００２５】
ステップ４０において、データコレクタ２４は、新しいデータソース１６の完全な実装を使用して新しいデバイス１２のパフォーマンスデータを収集する。したがって、新しいデバイス種別を有する新しいデバイス１２をＳＡＮ１０に実装した場合に、パフォーマンスデータ収集のためにデータコレクタ２４を変更する必要はない。このため、データコレクタの機能性を拡張する現行のシステムおよび方法に関わるコード複写という非効率性および冗長性を回避することができる。次いで、方法３０は終了する。
【００２６】
図３は、ＳＡＮ１０のパフォーマンスデータ収集を拡張する方法の併せて使用し得るコンピュータ３００の例示的なハードウェアコンポーネントを示す。コンピュータ３００は、インターネットまたは他の種類のコンピュータ網もしくは電話網等、ＳＡＮ１０との接続３２０を含む。通常、コンピュータ３００は、メモリ３０２、補助記憶装置３１２、プロセッサ３１４、入力装置３１６、表示装置３１０、および出力装置３０８を含む。
【００２７】
メモリ３０２は、ランダムアクセスメモリ（ＲＡＭ）または似た種類のメモリを含み得る。補助記憶装置３１２は、ハードディスクドライブ、フロッピーディスクドライブ、ＣＤ−ＲＯＭドライブ、または他の種類の不揮発性データ記憶装置を含むことができ、各種データベースまたは他の資源に対応し得る。プロセッサ３１４は、メモリ３０２、補助記憶装置３１２に記憶されている情報、またはインターネットもしくは他のネットワークから受け取った情報を実行することができる。データコレクタ２４は、プロセッサ３１４内に実装し得る。上に述べた方法等、ＳＡＮ１０のパフォーマンスデータ収集を拡張する方法を実行する命令は、メモリ３０２または補助記憶装置３１２に記憶することができる。同様に、データベース２６もメモリ３０２または補助記憶装置３１２に記憶することができる。入力装置３１６は、キーボード、キーパッド、カーソル制御装置、タッチスクリーン（おそらくスタイラス付き）、またはマイクロフォン等、データをコンピュータ３００に入力する任意のデバイスを含み得る。表示装置３１０は、可視画像を提示する任意の種類のデバイス、たとえばコンピュータモニタ、フラットスクリーンディスプレイ、またはディスプレイパネル等を含み得る。出力装置３０８は、プリンタ等の、データをハードコピーフォーマットで提示する任意の種類のデバイス、およびスピーカやデータを可聴形式で提供する任意のデバイスを含む他の種類の出力装置を含み得る。コンピュータ３００は、できるだけ複数の入力装置、出力装置、および表示装置を備える。
【００２８】
コンピュータ３００は、各種コンポーネントを備えて示されるが、当業者は、コンピュータ３００がさらに、または異なるコンポーネントを備え得ることを認めよう。さらに、ＳＡＮ１０のパフォーマンスデータ収集を拡張する方法に一貫する実施の態様は、メモリに記憶されているものとして説明されるが、当業者は、これらの態様が、ハードディスク、フロッピーディスク、またはＣＤ−ＲＯＭを含む補助記憶装置等他の種類のコンピュータプログラム製品またはコンピュータ可読媒体、インターネットまたは他のネットワークからの搬送波、あるいは他の形態のＲＡＭもしくはＲＯＭに記憶されていても、またはこれらから読み出されてもよいことを認めよう。コンピュータ可読媒体は、コンピュータ３００を制御して特定の方法を実行させる命令を含み得る。
【００２９】
本システムおよび本方法について例示的な一実施形態と併せて説明したが、当業者には多くの変更が容易に明らかであり、本明細書はいずれの変形も網羅するよう意図されていることが理解されよう。たとえば、本システムおよび本方法は、ストレージエリアネットワーク以外のソフトウェアアーキテクチャに適用することも可能である。
【図面の簡単な説明】
【００３０】
【図１】ストレージエリアネットワークのパフォーマンスデータ収集を拡張するシステムの一実施形態の模式図である。
【図２】ストレージエリアネットワークのパフォーマンスデータ収集を拡張する方法の一実施形態の流れ図を示す図である。
【図３】ストレージエリアネットワークのパフォーマンスデータ収集を拡張する方法と併せて使用し得るコンピュータの例示的なハードウェアコンポーネントを示す図である。
【符号の説明】
【００３１】
１０  ストレージエリアネットワーク
１２  デバイス
１４  パフォーマンスビーン
１６  データソース
１８  抽象データモジュール
２４  データコレクタ
【図１】
2004164636.tif 000003
【図２】
2004164636.tif 000004
【図３】
2004164636.tif 000005