(57)【特許請求の範囲】
【請求項１】
入力された実行すべき処理に対して、該処理の実行結果を出力する入出力ＣＰＵと、
前記入出力ＣＰＵからの指示にしたがって、前記処理を実行する複数の処理ＣＰＵと、
各処理ＣＰＵに対応付けられ、前記入出力ＣＰＵに入力された処理および該処理の実行結果を格納する複数の記憶部と、
前記複数の記憶部間で共通する格納先を示す格納先情報と、入力された処理を複数の処理ＣＰＵにおいて並列に実行するための冗長度あるいは該処理の優先度についての重み付け情報とを格納する格納部と、
を備え、
前記入出力ＣＰＵは、前記複数の処理ＣＰＵにかかる負荷の状態あるいは入力された処理に含まれる優先度に基づいて前記重み付け情報を設定して前記格納部に格納し、
前記処理ＣＰＵは、前記格納先情報を前記格納部から読み出し、各処理ＣＰＵに対応付けられた記憶部における前記処理の格納先から該処理を読み出して実行する
ことを特徴とする処理装置。
【請求項２】
前記複数の処理ＣＰＵの負荷が所定の値を超えていると判定されると、前記入出力ＣＰＵは、２以上の処理ＣＰＵにより冗長的に実行されている処理について、１以上の処理ＣＰＵにおいて該処理を廃棄する
ことを特徴とする請求項１記載の処理装置。
【請求項３】
前記複数の処理ＣＰＵの負荷が所定の値を超えていると判定されると、前記入出力ＣＰＵは、より小さい値の前記冗長度を再設定する
ことを特徴とする請求項１記載の処理装置。
【請求項４】
前記複数の処理ＣＰＵの負荷が所定の値を超えていると判定されると、前記入出力ＣＰＵは、該処理ＣＰＵの負荷に応じて、複数の処理ＣＰＵにより冗長的に実行されている処理について、段階的に前記冗長度を上げる、あるいは段階的に前記冗長度を下げる
ことを特徴とする請求項１記載の処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のＣＰＵにより冗長処理を実行するための技術に関する。
【背景技術】
【０００２】
近年のＩＴ（Information Technology）の社会への普及により、ＩＴを利用した各種情報システムが社会に提供されてきている。これらシステムを実現する情報通信機器は、現代社会において必要不可欠な社会インフラ・ライフラインとなりつつあり、膨大な量の情報処理を常に停止させることなく実行できることが求められている。このような要求に応じるには、情報システムを構成する情報通信機器が、膨大な量の情報を迅速に滞りなく処理する必要がある。そこで、このような要求に応えるため、例えば通信システム等の大量の情報を迅速に確実に処理することが求められるシステムにおいては、ＣＰＵを複数備え、負荷分散制御を行うためのハード構成が採用された装置が使用されている。
【０００３】
図１６は、従来における処理回路の構成図である。処理回路１００は、複数の（図１６においては０番からｍ番までの）ＣＰＵ１０１が、ＣＰＵ間で同期処理を行うための共通メモリ１０２、外部との入出力を行うための複数の（図１６においては０番からｎ番までの）Ｉ／Ｏ１０３を含み、互いに共通バス１０４に接続されている。図１６に示す構成を採用する処理回路においては、負荷を分散するために、Ｉ／Ｏ１０３からの割り込み処理を並列に複数のＣＰＵ１０１に入力し、その割込みを最初に取りに行ったＣＰＵ１０１が、その処理について実行する方法、あるいは、各ＣＰＵ１０１に対してトランザクションを転送し、処理を実行させる方法がとられていた。この他、負荷分散制御を行うためのハード構成としては、全ての処理回路を現用として使用する全現用構成や、冗長構成であるＮ＋１構成が使用されていた。
【０００４】
この他には、多重系計算機システムにおいて、ＣＰＵの台数やデータの重要度等に応じて冗長化システムを変更することのできる技術が提供されている（例えば、特許文献１）。
【特許文献１】特開昭６０−５５４６４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来の処理回路のような構成では、共通バスに複数のＣＰＵが並列に接続されているため、ハードウェアの共通バス・インタフェースに障害が発生した場合には、システムとして動作不能になってしまう。また、負荷が増大してＣＰＵの共通バスアクセスの頻度が増大すると、バスのボトルネックにより性能が頭打ちになっていた。更には、ＣＰＵに障害が発生した場合等は、その障害の発生したＣＰＵにおいて処理中のトランザクションについては救済する方法がなかった。
【０００６】
本発明は、ＣＰＵのトランザクションの実行速度および障害耐力をより向上させることのできる技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、本発明は、入力された実行すべき処理に対して、該処理の実行結果を出力する入出力ＣＰＵと、前記入出力ＣＰＵからの指示にしたがって、前記処理を実行する複数の処理ＣＰＵと、各処理ＣＰＵに対応付けられ、前記入出力ＣＰＵに入力された処理および該処理の実行結果を格納する複数の記憶部と、前記複数の記憶部間で共通する格納先を示す格納先情報を格納する格納部と、を備え、前記処理ＣＰＵは、前記格納先情報を前記格納部から読み出し、各処理ＣＰＵに対応付けられた記憶部における前記処理の格納先から該処理を読み出して実行する構成とする。
【０００８】
処理回路への処理の入出力に関わる入出力ＣＰＵを、処理を実行する複数の処理ＣＰＵとは別個に設け、複数の処理ＣＰＵは、各処理ＣＰＵに対応する記憶部から格納先情報に基づいて処理を読み出して実行する。大量の実行すべき処理が処理回路に入力／出力される場合であっても、各処理ＣＰＵは自装置に対応する記憶部から処理を読み出して実行するので、処理の実行速度に与える影響が小さく抑えられる。また、複数の処理ＣＰＵにより処理が実行されるので、処理を実行中のある処理ＣＰＵに障害が発生した場合であっても、その処理については他の処理ＣＰＵでも実行されるので、障害耐力が高まる。
【０００９】
更には、前記格納部には、入力された処理を複数の処理ＣＰＵにおいて並列に実行するための冗長度あるいは該処理の優先度についての重み付け情報が更に格納され、前記入出力ＣＰＵは、前記処理回路にかかる負荷の状態あるいは入力された処理に含まれる優先度に基づいて前記重み付け情報を設定して前記格納部に格納することとしてもよい。
【００１０】
更には、前記複数の処理ＣＰＵの負荷が前記所定の値を超えていると判定されると、前記入出力ＣＰＵは、２以上の処理ＣＰＵにより冗長的に実行されている処理について、１以上の処理ＣＰＵにおいて該処理を廃棄することとしてもよい。前記入出力ＣＰＵは、より小さい値の前記冗長度を再設定することとしてもよいし、あるいは、前記入出力ＣＰＵは、該処理ＣＰＵの負荷に応じて、複数の処理ＣＰＵにより冗長的に実行されている処理について、段階的に冗長度を上げる、あるいは段階的に冗長度を下げることとしてもよい。
【発明の効果】
【００１１】
本発明によれば、簡易な回路構成で、処理の実行速度および障害耐力を向上させることができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の好適な実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施形態に係る処理回路の構成図である。図１に示す処理回路１は、トランザクション入出力処理ＣＰＵ１１、複数の処理ＣＰＵ１２（１２Ａ、１２Ｂ、１２Ｃ）、複数の入力メモリ１３（１３Ａ、１３Ｂ、１３Ｃ）、複数の出力メモリ１４（１４Ａ、１４Ｂ、１４Ｃ）、ポインタセットＦＩＦＯ（first in first out）１５、ポインタリードレジスタ１６、通信用バス１７およびバス１８を含んで構成される。
【００１３】
トランザクション入出力処理ＣＰＵ（以下、トランザクションＣＰＵ）１１は、処理回路１の外部からのトランザクションの入力に対して、そのトランザクションの処理結果を外部に対して出力する。入力メモリ１３は、処理回路１に入力されたトランザクションを格納する。処理ＣＰＵ１２は、処理回路１に入力されたトランザクションを入力メモリ１３から読み出して実行する。出力メモリ１４は、処理ＣＰＵ１２によるトランザクションの処理結果を格納する。ポインタリードレジスタ１６は、入力メモリ１３上におけるトランザクションの格納先であるアドレス等の、各処理ＣＰＵ１２が入力メモリ１３からトランザクションを読み出して実行するために必要な情報を格納する。ポインタセットＦＩＦＯ１５は、ポインタリードレジスタ１６に格納されている情報数、すなわちトランザクション数（キューの数）をＦＩＦＯで管理する。通信用バス１７は、トランザクションＣＰＵ１１と各処理ＣＰＵ１２との間の通信のために用いられるバスである。バス１８は、各処理ＣＰＵ１２がトランザクションを実行するとき、および実行結果を出力するときに使用されるバスである。
【００１４】
なお、図１においては処理ＣＰＵ１２、入力メモリ１３および出力メモリ１４は３組備えた構成とされているがこれに限らない。処理ＣＰＵ１２、入力メモリ１３および出力メモリ１４を２組以上備えた構成であれば、以下に説明する冗長構成を備えた処理ＣＰＵ１２によるトランザクションの実行が可能とされる。
【００１５】
本実施形態に係る処理回路１においては、複数の処理ＣＰＵ１２が並列に配置され、１つの処理ＣＰＵ１２に対し、入力メモリ１３や出力メモリ１４が１対１に対応づけて設けられている。そして、トランザクションＣＰＵ１１において検出されたトランザクションについては、全ての入力メモリ１３上の共通するアドレスに同期書き込みされ、そのアドレスを含む情報はポイントリードレジスタ１６に格納される。処理ＣＰＵ１２は、ポインタリードレジスタ１６から処理ＣＰＵ１２間で共通するアドレス等の情報を読み出し、読み出した情報を用いて、入力メモリ１３に格納されているトランザクションを取り出す。トランザクションの実行は、複数の処理ＣＰＵ１２により並列に行われる。処理ＣＰＵ１２は、自装置に対応する出力メモリ１４に実行結果を格納する。出力メモリ１４に格納された処理結果は、トランザクションＣＰＵ１１からＩ／Ｏを介して出力される。
【００１６】
なお、処理回路１内でトランザクションを入力メモリ１３に格納する処理、そのアドレスを含む情報を、ポインタセットＦＩＦＯ１５を介してポインタリードレジスタ１６に保持する処理、その情報に基づいてトランザクションを処理ＣＰＵ１２が読み出して実行する処理、実行結果を出力メモリ１４に格納する処理、トランザクションが完了したことを処理ＣＰＵ１２がトランザクションＣＰＵ１１に割り込み通知する処理および出力メモリ１４から実行結果を読み出してトランザクションＣＰＵ１１に転送する処理は、通信用バス１７とは別個のバス１８を介して行われる。
【００１７】
詳しくは後述するが、上記のトランザクションを実行するための情報には、共通するアドレスを表すポインタの他、ポインタ値の有効／無効を判定するためのフラグを含む。フラグにより重み付けがされており、フラグには、多重処理構成とされる処理ＣＰＵ１２の冗長度や、トランザクションの優先度等の情報が格納される。
【００１８】
以下の説明においては、トランザクションとは、例えば無線通信ネットワークにおけるインフラ側の装置において処理される一連の処理を指し、インフラ側の装置としては、例えば、基地局制御装置が挙げられる。基地局制御装置において実行される一連の処理の一例としては、基地局制御装置が、自装置を介して相手端末と通信を開始しようとしている端末からの要求を受けて、相手端末側の基地局制御装置との間でネゴシエーションをし、通話パスを確立するために実行する処理が挙げられる。トランザクションは無線通信に関する処理に限定するものではなく、一般的なトランザクションについても含むものであるが、以下の説明においては、通信における基地局制御装置に備えられた処理回路１について述べることとし、以下において「装置」とは、基地局制御装置を指すこととする。
【００１９】
以下、図２から図８を参照して、本実施形態に係る処理回路１の基本的な動作について説明する。
図２は、トランザクションＣＰＵ１１におけるトランザクションの入出力処理についてのフローチャートである。図２（ａ）は、外部からトランザクションが入力されたときのフローチャートである。まず、ステップＳ１で、あるトランザクションがＩ／Ｏから入力されると、ステップＳ２で、入力メモリ１３にトランザクションのデータを転送する。ステップＳ３で、ポインタセットＦＩＦＯ１５に入力メモリ１３におけるトランザクションの格納先等の情報を書き込み、処理を終了する。図２（ａ）の処理終了後、処理ＣＰＵ１２によりトランザクションが実行され、実行結果は、トランザクションＣＰＵ１１に割り込み通知される。
【００２０】
図２（ｂ）は、トランザクションの処理結果を外部に出力するときのフローチャートである。まず、ステップＳ１１で、処理ＣＰＵ１２から割り込み通知を受けると、ステップＳ１２で、その処理ＣＰＵ１２に対応する出力メモリ１４から処理結果のデータを引き取る。ステップＳ１３で、引き取ったデータをＩ／Ｏに出力し、処理を終了する。
【００２１】
図３は、処理ＣＰＵ１２におけるトランザクションの実行に関する基本動作を示したフローチャートである。なお、本実施形態においては、例えばフラグに「３」が設定されている場合は、３個の処理ＣＰＵ１２によりトランザクションが実行されることを意味する。
【００２２】
まず、ステップＳ２１で、ポインタリードレジスタ１６からデータを読み出し、ステップＳ２２で、読み出したデータのうち、処理ＣＰＵ１２の冗長度を示すフラグの値が「０」であるか否かを判定する。冗長度を示すフラグに「０」が設定されている場合は、特に処理を行わずに処理を終了する。フラグにゼロ以外の値が設定されている場合は、ステップＳ２３に進み、入力メモリ１３の所定のポインタから実行すべきトランザクションを引き取る。ステップＳ２４では、トランザクションを処理するに際し、そのトランザクションの優先度を判断して処理する必要があるか否かを判定する。優先度を考慮する必要がない場合は、ステップＳ２５に進み、トランザクションを実行し、ステップＳ２６で、出力メモリ１４に処理結果を書き込む。最後に、ステップＳ２７で、トランザクションＣＰＵ１１に対して割り込み（ＩＲＱ）通知を送信して、処理を終了する。
【００２３】
一方、ステップＳ２４の判定において、優先度を考慮する必要があると判定された場合は、ステップＳ２８に進み、トランザクションの優先度を示すフラグの値に、「優先」が格納されているか否かを判定し、優先処理を行うべきトランザクションであると判定された場合は、ステップＳ２９で、処理キューの先頭に、そのトランザクションのタスクを設定して上記のステップＳ２５に戻り、トランザクションを実行する。ステップＳ２５以降は上記と同様の処理を行う。処理キューの先頭にタスクを設定することで、そのトランザクションについては、先に処理が開始されていた他のトランザクションよりも先に実行される。優先トランザクションが先に実行されることで、緊急性の高い処理、例えばＶＩＰ  ＣＡＬＬや１１０番、１１９番等への接続等が保障される。
【００２４】
一方、ステップＳ２８で、フラグに「優先」以外、すなわち「普通」処理や「低優先」処理を示す値が格納されている場合は、ステップＳ３０に進み、処理キューの最後尾にそのトランザクションのタスクを設定して、優先処理の場合と同様にステップＳ２５に戻り、トランザクションを実行し、ステップＳ２６からステップＳ２７の処理を実行して終了する。
【００２５】
図３に示すように、各処理ＣＰＵ１２は、ポインタリードレジスタ１６からポインタを読み出すときに冗長度フラグを参照し、フラグの値が「０」でなければそのトランザクションを実行する。以下、図４を参照して、冗長度を示すフラグにより複数の処理ＣＰＵ１２においてトランザクションを実行する方法を説明する。
【００２６】
図４は、トランザクションの実行によるフラグの値の設定処理を示したフローチャートである。図４に示す一連の処理は、トランザクションＣＰＵ１１があるトランザクションについてＩ／Ｏを介して受け付けたことを契機として開始され、トランザクションＣＰＵ１１により実行される。
【００２７】
ステップＳ４１で、ポインタセットＦＩＦＯ１５を介してフラグに値を設定すると、ステップＳ４２で、処理ＣＰＵ１２からポインタリードレジスタ１６のフラグの読み出しがあるまで待機する。処理ＣＰＵ１２からの読み出しを認識すると、ステップＳ４３に進み、フラグの値を１減算する。ステップＳ４４で、フラグの値がゼロであるか否かを判定する。フラグに１以上の値が格納されている場合は、先のステップでフラグを読み出した処理ＣＰＵ以外の処理ＣＰＵ１２にそのトランザクションを実行させる必要があると判断して、ステップＳ４２に戻る。フラグの値が「０」になると、処理を終了する。フラグの値が「０」に設定された後は、対応するトランザクションについてのポインタ値は無効となり、入力メモリ１３からそのトランザクションを破棄する。
【００２８】
ポインタリードレジスタ１６のフラグにより、そのトランザクションを実行すべき処理ＣＰＵ１２の数が示されている。フラグが示す数の処理ＣＰＵ１２が、それぞれポインタリードレジスタから必要な情報を読み出して自装置と対応付けられた入力メモリ１３からトランザクションを読み出して実行する。各処理ＣＰＵ１２が入力メモリ１３からトランザクションを読み出すごとに図４に示す処理が実行され、フラグが「０」になるまで、各処理ＣＰＵ１２において図３の処理が実行される。あるトランザクションについては複数の処理ＣＰＵ１２において実行されるので、例えある処理ＣＰＵ１２において障害が発生してトランザクションが実行不可能となった場合であっても、他の処理ＣＰＵ１２において実行することができるので、処理回路１の障害耐力の向上に資する。
【００２９】
なお、３個以上の処理ＣＰＵ１２によりトランザクションが実行された場合は、例えば処理の実行結果を互いに比較して多数決でトランザクションＣＰＵ１１に渡す結果を選択することとしてもよい。これにより、更に処理の信頼度を向上させることができる。
【００３０】
フラグの値は、例えば予めプログラムに定義しておくこととしてもよいし、あるいは、処理回路１を備えた装置の局データにより設定することとしてもよい。更に、プログラムや局データにおいて、処理すべきトランザクションが実行される環境等に応じて適切な値が設定されることとしてもよい。
【００３１】
本実施形態に係る処理回路１は、処理ＣＰＵ１２の冗長度やトランザクションの優先度等の情報がフラグに含まれていることを用いて、例えば処理ＣＰＵ１２にかかる負荷の度合等に応じて、トランザクションを実行させることができる。例えば、処理ＣＰＵ１２が定期的にポインタリードレジスタ１６を読み出す処理（図３においてはステップＳ２１の処理）を行う時間の間隔を、処理ＣＰＵ１２にかかる負荷に応じて変化させることができる。以下、処理ＣＰＵ１２がポインタリードレジスタ１６の読み出しを実行する時間間隔を、リード間隔とする。
【００３２】
図５は、処理ＣＰＵ１２にかかる負荷に応じてリード間隔を設定する処理を示したフローチャートである。図５の処理は、各処理ＣＰＵ１２において、定期的に実行される。
ステップＳ５１で、処理ＣＰＵ１２における負荷状況を判断するための値を計測する。ここで、負荷状況を判断するための値とは、例えば図５のフローチャートに示すＣＰＵ使用率等の負荷率の他、ポインタセットＦＩＦＯ１５のＦＩＦＯの深さ（キューの長さ）、単位時間当たりに読み出されるポインタ数（冗長度の変化量、処理中のトランザクション数）等を指し、以下の説明においては、このステップで計測された値を測定値ａと表記する。
【００３３】
ステップＳ５２で、測定値ａが、閾値ｎを超えているか否かを判定し、測定値ａが閾値ｎを超えている場合はステップＳ５３に進み、ポインタリードレジスタ１６のリード間隔の値に、過負荷時のリード間隔として予め用意されている値を設定する。ＣＰＵ使用率を測定して判定する場合、例えば閾値ｎ＝５０％であり、過負荷時のリード間隔として２０［ｍｓ］が設定される。測定値ａが閾値ｎ以下の場合は、ステップＳ５４に進む。
【００３４】
ステップＳ５４で、設定されているポインタリードレジスタ１６のリード間隔として、通常負荷時の値が設定されているか否かを判定する。リード間隔として通常負荷時の値が設定されている場合は、ステップＳ５５に進み、通常負荷時の値を設定して処理を終了する。通常負荷時のリード間隔は、例えば１０［ｍｓ］である。なお、ステップＳ５５は、処理ＣＰＵ１２にかかっている負荷は比較的低いけれどもリード間隔として過負荷時の値が設定されているとして、通常負荷時の値に設定し直すための処理である。ステップＳ５４の判定でリード間隔には通常負荷時の値が設定されていると判定された場合は、ステップＳ５１に戻る。以降、測定値ａ（図５の例においてはＣＰＵ使用率ａ）等が閾値ｎ以下である期間内は、値の計測および閾値ｎとの比較を繰り返す。
【００３５】
なお、閾値ｎや設定するリード間隔は、プログラムや局データにより予め設定されているほか、トランザクションＣＰＵ１１からの指示により変更されることとしてもよい。
図５の処理により、ＣＰＵ使用率ａが高いときはリード間隔を長く、使用率が低いときはリード間隔を短く設定される。処理ＣＰＵ１２の負荷状態に応じてポインタリードレジスタ１６を読み出す間隔を設定することで、各処理ＣＰＵ１２の負荷を均一になるように制御される。
【００３６】
図６は、処理ＣＰＵの負荷状態に応じて、処理の冗長度を設定する処理を示したフローチャートである。図６の処理は、図５のステップＳ５１で処理ＣＰＵ１２において測定された測定値ａを用いて、トランザクションＣＰＵ１１により、定期的にトランザクションの処理により処理ＣＰＵ１２にかかる負荷を監視することで実現される。
【００３７】
まず、ステップＳ６１で、測定値ａを読み出し、ステップＳ６２で、閾値ｎを超えているか否かを判定する。測定値ａが閾値ｎ以下の場合はステップＳ６３に進み、冗長度として所定の値ｘを設定し、処理を終了する。ここで所定の値ｘとは、既に述べた通り、プログラムや局データにより設定される。
【００３８】
ステップＳ６３の判定において測定値ａが閾値ｎを超えている場合はステップＳ６４に進み、処理ＣＰＵ１２が過負荷状態にあるとして処理ＣＰＵ１２に通知を行う。ステップＳ６５で、フラグの冗長度を１に設定し、処理を終了する。
【００３９】
図６の処理を実行することにより、トランザクションＣＰＵ１１が、各処理ＣＰＵ１２において計測した上記測定値ａに基づいて処理ＣＰＵ１２の負荷状態に応じた適切な冗長度が設定される。負荷状態に応じて冗長度を設定することで、負荷が高い状態のときは、トランザクションを実行する処理ＣＰＵ１２について、並列処理を実行する多重処理構成から一重処理構成へとその構成が変更される。これにより、負荷が低いときは多重処理構成で処理の信頼性が高められ、負荷が高いときは一重処理構成に変更して処理ＣＰＵ１２にかかる負荷が低減される。
【００４０】
図７は、ポインタリードレジスタ１６に格納されるデータ構成を示した図である。図７（ａ）に示すように、１つのトランザクションについてのポインタリードレジスタ１６の構成は、フラグおよびポインタ値を含んで構成される。図７（ｂ）は、フラグの構成を示した図である。フラグが示す内容は、トランザクションが実行する環境等に応じて決定される。例えば、図７（ｂ）における「ケース１」の処理を実行するときは、冗長度すなわち処理ＣＰＵ１２の冗長構成についての情報が含まれる。「ケース２」の処理を実行するときは冗長度とトランザクションの優先度についての情報が、「ケース３」の処理を実行するときは優先度および優先度に応じて設定される冗長度についての情報が含まれる。
【００４１】
ケース１のフラグ構成をとるときは、トランザクションを実行する処理ＣＰＵ１２の数がフラグにより決定され、１つの処理ＣＰＵ１２がトランザクションの実行を開始するごとに、図４に示す処理によってフラグの値がゼロになるまで１ずつ減算されていく。
【００４２】
ケース２のフラグ構成をとるときは、フラグには冗長度および優先度がそれぞれ別個に設定されており、トランザクション実行時にそれぞれ必要な値を読み出すことにより、処理ＣＰＵ１２の冗長構成、優先度に応じたトランザクション処理が実行される。
【００４３】
ケース３のフラグ構成をとるときは、トランザクションに予め設定されている優先度に応じて処理ＣＰＵ１２の冗長度およびそのトランザクションの処理回路１における優先度を示すフラグにより決定される。優先度の高いトランザクションが入力された場合は、これに応じてフラグには大きい値が設定され、トランザクション処理がより多重化される。
【００４４】
なお、優先度の高いトランザクションとしては、例えば、ＶＩＰ  ＣＡＬＬや、あるいは１１０や１１９、すなわち警察署や消防署への接続が挙げられる。あるいは、装置の設置箇所に応じて優先度を設定する等でもよい。
【００４５】
上記の３つのケースのうちいずれのケースでトランザクションを実行するかについては、予めプログラムや局データにおいて定義して固定されたケースで実行することとしてもよいし、あるいは、例えば本実施形態に係る処理回路１を備えた装置の初期化時等の所定のタイミングで、いずれのケースによってトランザクションを実行するかについて選択することとしてもよい。
【００４６】
図８は、フラグの構成を選択する処理を示したフローチャートである。まず、ステップＳ７１で、装置の初期化処理が開始したことをトランザクションＣＰＵ１１が認識すると、ステップＳ７２で、優先度を考慮に入れてトランザクションを実行するか否かを示す値を不図示のメモリを参照し、「優先度を考慮しない」を示す値が格納されている場合はステップＳ７３に進み、使用するフラグの構成として上記の「ケース１」を設定し、ステップＳ７７に進む。
【００４７】
ステップＳ７２の判定において「優先度を考慮する」を示す値が格納されている場合は、ステップＳ７４に進み、更に、フラグの冗長度はトランザクションの優先度を兼ねるか否か、すなわち冗長度はトランザクションの優先度に応じて設定するか否かについて判定する。冗長度と優先度とを別個に設定する場合はステップＳ７５に進み、使用するフラグの構成として上記の「ケース２」を設定し、ステップＳ７７に進む。冗長度を優先度に応じて設定する場合は、ステップＳ７６に進み、フラグの構成として「ケース３」を設定し、ステップＳ７７に進む。ステップＳ７７で、フラグ構成を各処理ＣＰＵ１２に対して通知し、処理を終了する。
【００４８】
ステップＳ７２やステップＳ７４の処理においてフラグ構成を決定するために参照される値の他、トランザクションを冗長構成で実行するためや、優先度の高いトランザクションについては優先的に実行するため、更には、処理ＣＰＵ１２の負荷状態を適切に保つための各種の値（設定データ）が、予めプログラムや装置の局データに設定されている。
【００４９】
図９は、本実施形態に係る処理回路１において参照される設定データの一例である。トランザクションＣＰＵ１１は、図１においては不図示のメモリに格納された設定データを参照して、上記の各種設定や判定等を行う。設定データは、上記の優先度の考慮の有無を判定するための優先度考慮有無情報や、冗長度と優先度とを兼用するか否かを判定するための兼用可否情報の他に、ポインタリードレジスタ１６のリード間隔の初期値、設定すべき冗長度を含む。更には、ポインタリードレジスタ１６のリード間隔を負荷状態に応じて設定するためのデータ、処理ＣＰＵ１２の負荷状態に応じて冗長度を変更するためのデータ、処理ＣＰＵ１２の負荷が高いと判定してトランザクションを廃棄するためのデータおよび処理ＣＰＵにより異なるリード間隔を設定して、特定の処理ＣＰＵについては負荷の低い状態を保つためのデータ等が格納されている。
【００５０】
本実施形態に係る処理回路１は、図９に示すデータを用いて、処理ＣＰＵ１２の負荷率や、ＦＩＦＯの深さ（ＦＩＦＯ長）、単位時間当たりの冗長度の変化量等に基づいて、トランザクションの実行を制御する。以下、図面を参照して、上記以外の制御方法について説明する。
【００５１】
図１０は、処理ＣＰＵ１２の負荷率に応じて冗長度を設定する処理を示したフローチャートである。図１０に示す処理は、例えばＩ／Ｏから入力されたトランザクションをトランザクションＣＰＵ１１において受け付けるタイミングで実行される。
【００５２】
まず、ステップＳ８１で、処理ＣＰＵ１２の負荷率Ｘを測定する。ここで、負荷率Ｘとは、既述の通り、例えば処理ＣＰＵ１２の使用率、ＦＩＦＯの深さ等のいずれかについての測定値である。次に、ステップＳ８２で、負荷率Ｘが所定の閾値Ａよりも小さいか否かを判定する。ステップＳ８２においては、負荷率Ｘが、冗長度を最大に設定しても処理速度に影響が小さいと予想されるほどに十分小さいか否かを判定している。負荷率Ｘが閾値Ａ未満であると判定されると、ステップＳ８３に進み、冗長度として最大値ｎ（ｎは正の整数）を設定し、処理を終了する。
【００５３】
ステップＳ８２の判定において負荷率Ｘが閾値Ａ以上であると判定されると、ステップＳ８４に進み、更に、負荷率Ｘが閾値Ｂ未満であるか否かを判定する。閾値Ｂは、上記の閾値Ａよりも小さい値が設定されている。負荷率Ｘが閾値Ｂ未満である場合はステップＳ８５に進み、冗長度として（ｎ−１）を設定して処理を終了する。負荷率Ｘが閾値Ｂ以上である場合は、順次先の判定において使用された閾値（ここでは閾値Ｂよりも小さい閾値Ｃ）と負荷率Ｘとを比較していき、冗長度を設定すると、負荷率Ｘが大きいほど冗長度としては小さい値が設定される。ステップＳ８６においては、負荷率Ｘを閾値の最大値（図１０の「ｆｕｌｌ」）と比較するが、この場合は、閾値の最大値との大小関係によらず、ステップＳ８７で冗長度としては最小値である１を設定し、処理を終了する。
【００５４】
図１０に示す処理を、Ｉ／Ｏから入力されたトランザクションをトランザクションＣＰＵ１１において受け付けるタイミング以外にも、定期的に実行することとしてもよい。定期的に図１０の一連の処理を実行することで、処理ＣＰＵ１２の負荷状態に応じて段階的に冗長度を上げていく、あるいは下げていくこともできる。例えば、トランザクションをＩ／Ｏから受け付けた時点においては（冗長度）＝３が設定されたとすると、その後各処理ＣＰＵ１２が他のトランザクションを実行することにより負荷率Ｘが上昇したような場合であっても、負荷率Ｘが上がるにつれて冗長度を順次２、１と下げていくことができる。逆に、トランザクションを受け付けた時点においては（冗長度）＝１が設定されたとしても、その後負荷率Ｘが下がるにつれて冗長度を順次２、３と上げていくこともできる。すなわち、トランザクションを実行する処理ＣＰＵ１２の負荷状態に応じて冗長度を変化させることで、トランザクションの実行の信頼度を最大限に高め、且つ負荷の上昇による処理性能の低下を防ぐことができる。
【００５５】
なお、図１０においては負荷率Ｘの大きさに応じて冗長度を設定する処理について示しているが、これに限るものではない。例えば、冗長度を設定する代わりに、ポインタリードレジスタ１６のリード間隔を設定することとしてもよい。負荷率Ｘが小さいほどリード間隔として小さい値を設定し、負荷率Ｘが大きいほどリード間隔として大きい値を設定することで、上記と同様の効果が得られる。
【００５６】
図１１は、優先処理のトランザクションが入力されたときの処理を示したフローチャートである。ステップＳ９１で、処理回路１を構成する複数の処理ＣＰＵ１２のうちの１つ（ここでは、処理ＣＰＵ１２Ｎとする）について、予め他の処理ＣＰＵ１２よりもリード間隔を長く、例えば最長となるように値を設定する。リード間隔を大きく取ることで、処理ＣＰＵ１２Ｎは、他の処理ＣＰＵ１２と比べて負荷を低く保たれる。ステップＳ９２で、トランザクションＣＰＵ１１において優先度の高いトランザクションがＩ／Ｏから入力されたことを検出すると、ステップＳ９３で、処理ＣＰＵ１２Ｎに対して割り込み通知を送信し、ステップＳ９４で、検出した優先度の高いトランザクションをポインタセットＦＩＦＯ１５に設定する。
【００５７】
トランザクションＣＰＵ１１から割り込み通知を受けた処理ＣＰＵ１２Ｎにおいては、そのリード間隔が最短となるように値を設定し直し、ステップＳ９６で、ポインタリードレジスタ１６の値を読み出す。トランザクションＣＰＵ１１は、処理ＣＰＵ１２Ｎがポインタリードレジスタ１６を読み出したことを処理ＣＰＵ１２Ｎから通知されると、ステップＳ９７で、ポインタリードレジスタ１６の値を再設定し、処理を終了する。処理ＣＰＵ１２Ｎは、ステップＳ９８で、優先トランザクションを入力メモリ１３から読み出して実行し、処理を終了する。なお、ステップＳ９８の処理においては、優先トランザクションについてはキューの先頭に設定し、他のトランザクションについてはキュー最後尾に順に配置していく。図１１に示す処理を実行することにより、優先トランザクションの実行の信頼性が高まる。
【００５８】
なお、図１１の例においては、ステップＳ９１で優先トランザクションが検出された場合の処理について示しているが、これに限らない。例えば、処理ＣＰＵ１２の負荷が急激に変動したことをトランザクションＣＰＵ１１において認識したことを契機として、複数の処理ＣＰＵ１２のうちある処理ＣＰＵについてリード間隔を設定し直すこととしてもよい。このような場合は、例えば、処理ＣＰＵ１２の負荷が急激に増大すると、ある処理ＣＰＵ１２についてはリード間隔が最長となるように再設定することで、負荷を低減させるのに効果がある。
【００５９】
図１２は、処理ＣＰＵ１２の負荷を低減させる処理の一例を示したフローチャートである。図１２を参照して、処理ＣＰＵ１２の負荷状態を判定するための指標の一つであるＦＩＦＯの深さを監視することにより、処理ＣＰＵ１２にかかる負荷を低減させる処理について説明する。なお、「ＦＩＦＯの深さ」とは、ＦＩＦＯにたまっているポインタ数を意味する。
【００６０】
まず、ステップＳ１０１で、ポインタセットＦＩＦＯ１５の深さＸを測定し、ステップＳ１０２で、測定値Ｘは閾値Ａを超えているか否かを判定し、閾値Ａよりも大きいと判定されるまで、定期的にＦＩＦＯの深さＸを測定する。閾値Ａは、上記のＣＰＵ使用率等についての閾値と同様に、プログラムや局データであらかじめ定義されている。
【００６１】
ＦＩＦＯの深さＸが閾値Ａを超えると、ステップＳ１０３に進み、処理ＣＰＵ１２に対して割り込み通知を送信する。割り込み通知を受けた処理ＣＰＵ１２においては、冗長度を示すフラグの値が「１」であるときに読み出されたトランザクション以外を廃棄して、処理を終了する。
【００６２】
ＦＩＦＯの深さが閾値Ａを超えると、未処理のトランザクションが蓄積されているために処理ＣＰＵ１２の負荷が増大することを予測し、複数の処理ＣＰＵ１２のうち１つの処理ＣＰＵ１２にのみトランザクションを実行させることとし、他の処理ＣＰＵ１２が読み出したトランザクションについては廃棄する。これにより、処理すべきトランザクションが未処理のまま蓄積されているような場合には、各トランザクションについては実行する処理ＣＰＵ１２の数を限定し、上記の例においては１つに限定し、負荷が増大しないようにすることができる。なお、トランザクションを廃棄せずに処理を続行させる処理ＣＰＵ１２については、任意の値を設定することができる。
【００６３】
図１３は、処理ＣＰＵ１２の負荷を低減させる処理の他の例を示したフローチャートである。図１３を参照して、処理ＣＰＵの負荷状態を判定するための他の指標の一つであるＣＰＵ使用率を監視して、図１２と同様にトランザクションを実行する処理ＣＰＵ１２の数を限定して負荷を低減させる処理について説明する。
【００６４】
まず、ステップＳ１１１で、処理ＣＰＵ１２において自装置の使用率Ｘを測定し、ステップＳ１１２で、測定の結果得られたＣＰＵ使用率ＸをトランザクションＣＰＵ１１に報告する。報告を受信したトランザクションＣＰＵ１１においては、ステップＳ１１３で、各処理ＣＰＵ１２から受信した値に基づいて、平均の処理ＣＰＵ１２の使用率を算出する。ステップＳ１１４で、トランザクションＣＰＵ１１は、平均のＣＰＵ使用率が、閾値Ａを超えているか否かを判定する。閾値Ａについては図１２の説明において既に記したのと同様、プログラムや局データに予め定義されている。ステップＳ１１４において平均ＣＰＵ使用率は閾値Ａ未満と判定されると、ステップＳ１１１の処理に戻る。以降、平均ＣＰＵ使用率が閾値Ａを超えるまで、ステップＳ１１１からステップＳ１１４の処理を繰り返す。
【００６５】
平均ＣＰＵ使用率が閾値Ａを超えると、ステップＳ１１５に進む。図１３に示すステップＳ１１５およびステップＳ１１６の処理については、図１２におけるステップＳ１０３およびステップＳ１０４の処理とそれぞれ同様であるのでここでは説明を割愛する。
【００６６】
図１３に示す処理を実行することで、トランザクションを実行すること等によってＣＰＵ使用率が上昇し、処理ＣＰＵ１２の負荷の増大が生じた場合等であっても、各トランザクションを実行する処理ＣＰＵ１２の数を限定することで図１２に示す処理を実行する場合と同様の効果が得られる。
【００６７】
図１４は、処理ＣＰＵ１２の負荷を低減させる処理の更に他の例を示したフローチャートである。図１４に示す処理において、処理ＣＰＵの負荷状態を判定するための他の指標の一つとして用いるのは、単位時間当たりのフラグすなわち冗長度の変化量である。
【００６８】
まず、ステップＳ１２１で、フラグの冗長度を示す値を、所定の時間間隔で、ここではＴ［ｓ］ごとにサンプリングする。次にステップＳ１２２で、単位時間当たりの冗長度の変化量Ｘを算出する。例えば時刻Ｔ１における冗長度をＦＬＧ（Ｔ１）、時刻Ｔ１からＴ［ｓ］後の時刻Ｔ２（＝Ｔ１＋Ｔ）における冗長度をＦＬＧ（Ｔ２）とすると、変化量Ｘは、Ｘ＝（ＦＬＧ（Ｔ１）−ＦＬＧ（Ｔ２））／Ｔで求められる。
【００６９】
ステップＳ１２３で、算出した変化量Ｘは、所定の閾値Ａ未満であるか否かを判定し、冗長度の単位時間当たりの変化量Ｘが閾値Ａ未満になるまで、ステップＳ１２１からステップＳ１２３までの処理を繰り返す。ここでの閾値Ａに関しては、冗長度の単位時間当たりの変化量についての閾値である。プログラムや局データにより予め定義されることについては上記の他の閾値についてと同様である。
【００７０】
ステップＳ１２４で変化量Ｘが閾値Ａ未満の条件を満たすと、ステップＳ１２４に進む。ステップＳ１２４およびステップＳ１２５の処理については、図１２のステップＳ１０３およびステップＳ１０４の処理とそれぞれ同様であるので、これらの処理の説明については割愛する。
【００７１】
あるトランザクションについて、単位時間当たりの冗長度の変化量、すなわちそのトランザクションを実行すべき複数の処理ＣＰＵ１２が実際にフラグ等の情報をレジスタから読み出して処理を開始する頻度が下降すると、処理ＣＰＵ１２の負荷が増大したと判断する。処理ＣＰＵ１２の負荷を低減させるため、そのトランザクションを実行する処理ＣＰＵ１２の数を限定することで、図１２や図１３に示す処理を実行する場合と同様の効果が得られる。
【００７２】
図１２から図１４を参照して、処理回路１内で処理ＣＰＵ１２の負荷が増大したときに、処理ＣＰＵ１２にかかる負荷を低減させるための処理方法を説明してきた。本実施形態に係る処理回路１は、回路外から入力されるトランザクションの量に応じた処理を実行することもできる。
【００７３】
図１５は、処理回路１に入力されるトランザクション量を監視してトランザクションを実行する処理を示したフローチャートである。まず、ステップＳ１３１で、ある１個以上の処理ＣＰＵ１２において、ポインタリードレジスタ１６を読み出すリード間隔として、設定しうる範囲で最長となる値を設定する。一方、トランザクションＣＰＵ１１は、ステップＳ１３２で、処理回路１がＩ／Ｏを介して入力されるトランザクションの単位時間当たりの量Ｘが、所定の閾値Ａ以上であるか否かを監視している。ステップＳ１３２の判定においてトランザクションの単位時間当たり入力量Ｘが閾値Ａを超えると、ステップＳ１３３に進む。ステップＳ１３３以降のトランザクションＣＰＵ１１、処理ＣＰＵ１２において実行される処理については、図１１のステップＳ９３以降の処理と同様であるのでここでは説明を省略する。
【００７４】
処理回路１に入力されるトランザクション量が急激に増大すると、トランザクションを実行する処理ＣＰＵ１２の負荷が急激に変動する前に、予め前記のポインタリードレジスタ１６を読み出すリード間隔として最長となる値を設定した処理ＣＰＵ１２のポインタリードレジスタ１６のリード間隔を短く、図１５の例においては最短に設定しておく。処理ＣＰＵ１２がポインタリードレジスタ１６からデータを読み出す頻度を高く設定することで、多量のトランザクションを処理する効率が高まる。
【００７５】
なお、図１５においては、処理はトランザクションの優先度によっては異ならず、同様の処理を実行することとしているが、これに限定されるものではない。例えば、優先トランザクションが入力された場合は、ステップＳ１３８で、優先トランザクションの実行については、キューの先頭に配置し、他のトランザクションよりも先に実行させることとしてもよい。
【００７６】
以上説明したように、本実施形態に係る処理回路１によれば、処理回路１を備えた装置等のシステムの負荷状態に合わせた処理ＣＰＵの冗長構成や優先度処理構成が構築される。これにより、ある処理ＣＰＵに障害が発生したような場合であっても、トランザクションの救済を図ることが可能とされる。また、トランザクションの実行には共通バスを介した通信はなされず、また、各処理ＣＰＵについて設けられた入力／出力メモリを用いてトランザクションの入出力を行う。これにより、従来のように共通バスのボトルネックの発生が起こらない。以上より、本実施形態に係る処理回路を用いることで、安定性の高いシステムを構築することができる。
【００７７】
（付記１）
入力された実行すべき処理に対して、該処理の実行結果を出力する入出力ＣＰＵと、
前記入出力ＣＰＵからの指示にしたがって、前記処理を実行する複数の処理ＣＰＵと、
各処理ＣＰＵに対応付けられ、前記入出力ＣＰＵに入力された処理および該処理の実行結果を格納する複数の記憶部と、
前記複数の記憶部間で共通する格納先を示す格納先情報を格納する格納部と、
を備え、
前記処理ＣＰＵは、前記格納先情報を前記格納部から読み出し、各処理ＣＰＵに対応付けられた記憶部における前記処理の格納先から該処理を読み出して実行する
ことを特徴とする処理装置。
（付記２）
前記複数の処理ＣＰＵは、設定された時間間隔で前記格納部に格納された格納先情報を読み出す処理を実行する
ことを特徴とする付記１記載の処理装置。
（付記３）
前記時間間隔は、処理ＣＰＵごとに設定されている
ことを特徴とする付記２記載の処理装置。
（付記４）
前記格納部には、入力された処理を複数の処理ＣＰＵにおいて並列に実行するための冗長度あるいは該処理の優先度についての重み付け情報が更に格納され、
前記入出力ＣＰＵは、前記処理回路にかかる負荷の状態あるいは入力された処理に含まれる優先度に基づいて前記重み付け情報を設定して前記格納部に格納する
ことを特徴とする付記１記載の処理装置。
（付記５）
前記処理ＣＰＵは、１の処理ＣＰＵにより前記処理が実行されるごとに前記冗長度を所定の値ずつ減算し、
前記複数の処理ＣＰＵは前記冗長度が無効値になるまで前記処理の読み出しを行う
ことを特徴とする付記４記載の処理装置。
（付記６）
前記処理ＣＰＵは、入力された処理に含まれる優先度とは独立して前記冗長度を設定する
ことを特徴とする付記４記載の処理装置。
（付記７）
前記処理ＣＰＵは、入力された処理に含まれる優先度が高いときは、該優先度に依存する高い値の前記冗長度を設定する
ことを特徴とする付記４記載の処理装置。
（付記８）
前記複数の処理ＣＰＵは、処理ＣＰＵごとに予め設定された時間間隔で前記格納先情報および前記重み付け情報を読み出す処理を実行し、
より時間間隔の短い読み出し処理を実行可能な処理ＣＰＵは、入力された処理に含まれる優先度が高いときは、該処理を優先的に実行する
ことを特徴とする付記４記載の処理装置。
（付記９）
前記複数の処理ＣＰＵは、該処理ＣＰＵの使用率に基づいて、該処理ＣＰＵの負荷が所定の値を超えているか否かを判定する
ことを特徴とする付記１記載の処理装置。
（付記１０）
前記入出力ＣＰＵは、前記記憶部に格納されている処理数に基づいて、前記複数の処理ＣＰＵの負荷が所定の値を超えているか否かを判定する
ことを特徴とする付記１記載の処理装置。
（付記１１）
前記入出力ＣＰＵは、前記複数の処理ＣＰＵが格納先情報を読み出す単位時間当たりの読み出し処理数に基づいて、該処理ＣＰＵの負荷が所定の値を超えているか否かを判定する、
ことを特徴とする付記１記載の処理装置。
（付記１２）
前記複数の処理ＣＰＵの負荷が前記所定の値を超えていると判定されると、前記入出力ＣＰＵは、２以上の処理ＣＰＵにより冗長的に実行されている処理について、１以上の処理ＣＰＵにおいて該処理を廃棄する
ことを特徴とする付記９記載の処理装置。
（付記１３）
前記複数の処理ＣＰＵの負荷が前記所定の値を超えていると判定されると、前記入出力ＣＰＵは、より小さい値の前記冗長度を再設定する
ことを特徴とする付記９記載の処理装置。
（付記１４）
前記複数の処理ＣＰＵの負荷が所定の値を超えていると判定されると、前記入出力ＣＰＵは、該処理ＣＰＵの負荷に応じて、複数の処理ＣＰＵにより冗長的に実行されている処理について、段階的に冗長度を上げる、あるいは段階的に冗長度を下げる
ことを特徴とする付記９記載の処理装置。
【図面の簡単な説明】
【００７８】
【図１】本実施形態に係る処理回路の構成図である。
【図２】トランザクションＣＰＵにおけるトランザクションの入出力処理についてのフローチャートである。
【図３】処理ＣＰＵにおけるトランザクションの実行に関する基本動作を示したフローチャートである。
【図４】トランザクションの実行によるフラグの値の設定処理を示したフローチャートである。
【図５】処理ＣＰＵにかかる負荷に応じてリード間隔を設定する処理を示したフローチャートである。
【図６】処理ＣＰＵの負荷状態に応じて、処理の冗長度を設定する処理を示したフローチャートである。
【図７】ポインタリードレジスタに格納されるデータ構成を示した図である。
【図８】フラグの構成を選択する処理を示したフローチャートである。
【図９】参照される設定データの一例である。
【図１０】処理ＣＰＵの負荷率に応じて冗長度を設定する処理を示したフローチャートである。
【図１１】優先処理のトランザクションが入力されたときの処理を示したフローチャートである。
【図１２】処理ＣＰＵの負荷を低減させる処理の一例を示したフローチャートである。
【図１３】処理ＣＰＵの負荷を低減させる処理の他の例を示したフローチャートである。
【図１４】処理ＣＰＵの負荷を低減させる処理の更に他の例を示したフローチャートである。
【図１５】処理回路に入力されるトランザクション量を監視してトランザクションを実行する処理を示したフローチャートである。
【図１６】従来における処理回路の構成図である。
【符号の説明】
【００７９】
１      処理回路
１１    トランザクション入出力処理ＣＰＵ（トランザクションＣＰＵ）
１２、１２Ａ、１２Ｂ、１２Ｃ    処理ＣＰＵ
１３、１３Ａ、１３Ｂ、１３Ｃ    入力メモリ
１４、１４Ａ、１４Ｂ、１４Ｃ    出力メモリ
１５    ポインタセットＦＩＦＯ
１６    ポインタリードレジスタ
１７    通信用バス
１８    バス
【図１】
0004567586.tif 000002
【図２】
0004567586.tif 000003
【図３】
0004567586.tif 000004
【図４】
0004567586.tif 000005
【図５】
0004567586.tif 000006
【図６】
0004567586.tif 000007
【図７】
0004567586.tif 000008
【図８】
0004567586.tif 000009
【図９】
0004567586.tif 000010
【図１０】
0004567586.tif 000011
【図１１】
0004567586.tif 000012
【図１２】
0004567586.tif 000013
【図１３】
0004567586.tif 000014
【図１４】
0004567586.tif 000015
【図１５】
0004567586.tif 000016
【図１６】
0004567586.tif 000017