JP2010073214A - マルチ呼処理スレッド処理方法及び呼処理装置 - Google Patents

マルチ呼処理スレッド処理方法及び呼処理装置 Download PDF

Info

Publication number
JP2010073214A
JP2010073214A JP2009260064A JP2009260064A JP2010073214A JP 2010073214 A JP2010073214 A JP 2010073214A JP 2009260064 A JP2009260064 A JP 2009260064A JP 2009260064 A JP2009260064 A JP 2009260064A JP 2010073214 A JP2010073214 A JP 2010073214A
Authority
JP
Japan
Prior art keywords
event
call processing
processing
call
scheduler
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.)
Granted
Application number
JP2009260064A
Other languages
English (en)
Other versions
JP5029675B2 (ja
Inventor
Tomotake Koike
友岳 小池
Tomokazu Ando
智和 安藤
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.)
Oki Electric Industry Co Ltd
Original Assignee
Oki Electric Industry Co Ltd
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 Oki Electric Industry Co Ltd filed Critical Oki Electric Industry Co Ltd
Priority to JP2009260064A priority Critical patent/JP5029675B2/ja
Publication of JP2010073214A publication Critical patent/JP2010073214A/ja
Application granted granted Critical
Publication of JP5029675B2 publication Critical patent/JP5029675B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Telephonic Communication Services (AREA)

Abstract

【課題】 OSのTSSスケジューラの実装に依存せず、CPUを最大限に使用し、呼処理イベントの処理を実行可能とするマルチ呼処理スレッド処理方法を提供する。
【解決手段】 呼処理プログラムは、VoIPアプリに加え、カーネル上位の呼処理イベントエンジンを有する。このエンジンにおいて、各パケット受信部は、呼制御パケットを受信すると、カーネルのTSSスケジューラにキューイング制御を実行させた後、第1のスケジューラに呼処理イベントをキューイングする。第1のスケジューラは、イベント処理用のスレッドを生成し、このイベント処理スレッドにより、呼処理イベントがキューから取り出されて実行される。この実行では、各種の呼処理サービスに係る各イベントキュー管理オブジェクトが生成され、呼処理イベントを振り分けてキューイングさせる。第2のスケジューラは、イベント処理スレッドを生成し、各イベントキュー管理オブジェクトから呼処理イベントを抽出して実行させる。
【選択図】 図7

Description

本発明はマルチ呼処理スレッド処理方法及び呼処理装置に関し、例えば、TSS(タイム・シェアリング・システム)スケジューラを搭載した汎用マルチタスクOSを適用したVoIPサーバに適用し得るものである。
多量のVoIP信号を取り扱うVoIPサーバにおいては、VoIPソフトスイッチが適用されている。このVoIPソフトスイッチが適用される、複数のユーザから同時にVoIP信号が到来するシステムでは、Linux(UNIX;登録商標)・Windows(登録商標)等の汎用マルチタスクOSを用い、シングルプロセッサ環境下でも、複数のプロセス(ユーザによる呼処理要求)があった場合に、CPU使用時間を分割して分配することで、あたかも同時に処理しているかのように見せるTSSスケジューラが採用されている。TSSスケジューラについては、各種文献に記載されている(例えば、非特許文献1参照)。
また、現行のハードウェアやオペレーションシステムは、このTSSスケジューラによるコンピューティングを行った際に高速に動作するよう最適化されている。
澤田勉、澤田綾子、永井正武共著、「LinuxとWindowsを理解するためのOS入門」、共立出版株式会社2003年11月発行、126〜130頁
TSSスケジューラはクォンタム(一定の時間)をプロセスに割り当てて実行している。通常、クォンタムの値は8〜10m秒程度となっている。この時間単位で、処理中のプロセスがCPUの処理から外され、別のプロセスへCPUを渡す。このとき、処理中のプロセスに係るCPUキャッシュはフラッシュされ、再度、別のプロセスに係るキャッシュが構築される。
しかし、一般的な呼制御信号のそれぞれは非常に短いパケットで構成されており、それぞれのイベントを処理するために使用する時間は、クォンタムより相当短い時間であり、そのような短い時間で処理が完了してしまう。これに合わせて、OSのチューニングなどによりクォンタムを短く設定することができるが、ディスパッチャによるCPUキャッシュのフラッシュが多発することとなり、CPUの性能が著しく低下することとなる。
さらに、ステートフルなVoIP呼制御を実現する場合は、イベントそれぞれが関連性を持ち、イベント処理が各状態に左右される。このときの処理の流れを一般的なマルチスレッド環境下で実現した呼制御アプリケーション(VoIP呼制御プロセス)例を、図2を用いて説明する。
呼信号(パケット)が入力されると、カーネル(のスケジューラ)内でのキューイングによる待ち時間の後、各入力部(Packet受信部)から呼処理イベントキューオブジェクトが生成され、イベントがキューイングされる(<1>、<2>、<3>)。呼処理イベントキュー毎にスレッドを割り当て、イベントドリブンでスレッドを生成若しくは予め生成済みのスレッドを割り当てる。このイベントキューは、呼グループ毎に生成されるオブジェクトとなっており、既存のオブジェクトへのイベントが入力された場合は該当するオブジェクトへのキューイングのみの動作となる(<4>)。このイベントドリブンでスレッドを生成する方式はそれぞれのイベントにスレッドが割り当てられるため、イベント処理のレスポンス時間の短縮が望める。しかし、呼イベント処理時間がシステムのスケジューラのクォンタムより短い場合、他のスレッド動作にCPUを渡すために無駄なコンテキストスイッチが必要となる。システムによっては他スレッドへCPUを迅速に渡すことができない場合もあり、CPUによるユーザプログラムの実行可能時間を十分に使えない。
次に、それぞれの呼オブジェクトは呼処理を実行する中でステートフルデータエリアである呼処理のリソースを生成(<5>)、変更(<6>)又は閲覧(<7>)する動作が頻繁に発生する。これらの動作は複数のオブジェクトがひとつのステートフルデータへアクセスすることを示している。このとき、スレッドの再入により、データの整合性が破壊されないため、データに対する排他制御を実現する必要がある。これは同時にスレッドが同一のエリアに対してアクセスを行った場合、唯一のスレッドのみが動作し、他のスレッドの動作を停止させるという制御となる。最も簡易的であり高速な排他制御を実現するために、ほぼ全てのOSが機能提供しているMutex(相互排他ロック)等の排他プリミティブがあるが、これを使用した排他制御では、他のスレッドにCPUが渡されるまで、カーネル内のスケジューラによるディスパッチャ処理に依存し、結果として大幅なスループット低減につながる。
また、イベントドリブンに複数のスレッドを生成することにより、システムのTSSスケジューラにてサービスインタラクティブ性を向上することができる一方、各呼イベント実行契機の発生時間の予測は不可能である。
図3は、一般的なTSSスケジューラにて輻輳的なイベント処理を行った場合の実行タイミングについてのタイムテーブル例を示している。図3の例は、簡易的に、1プロセッサシステムでイベント処理以外の別処理が極力ないものを想定した。
各イベント処理が終了すると、他プロセスにCPUを渡すディスパッチ(DP)が発生する。また、クォンタムQをオーバして処理を続けないように強制的に割り込みが発生しディスパッチを挟んでイベント処理の切り替えが発生する(図3ではイベント処理<2>から<3>)。これにより、不用意なディスパッチを招くこととなる。上述した通り、ディスパッチが発生すると、CPU内のキャッシュを再構築するため、ユーザプロセス処理のレイテンシー(呼び出し)に繋がる。また、スレッドごとの優先制御を行わないと、イベント処理<2>が処理途中でディスパッチされた際、別のイベント処理<3>が割り込んで順序性を乱してしまうこととなる。
そのため、OSのTSSスケジューラの実装に依存せず、CPUを最大限に使用し、呼処理イベントの処理を実行することが可能なマルチ呼処理スレッド処理方法及び呼処理装置が望まれている。
かかる課題を解決するため、第1の本発明は、シングルCPUがメモリ上に展開された呼処理プログラムに従い、輻輳的に発生する呼処理イベントを実行するマルチ呼処理スレッド処理方法において、(1)上記呼処理プログラムは、VoIPアプリケーションに加えて呼処理イベントエンジンを有し、OSに実装されているTSSスケジューラを含むカーネルの上位に上記呼処理イベントエンジンを位置させると共に、上位呼処理イベントエンジンの上位に上記VoIPアプリケーションを位置させ、(2)上記呼処理イベントエンジンによるコールエージェントプロセスは、1又は複数のパケット受信部と、第1の呼処理イベントスケジューラと、生成される1又は複数のイベントキュー管理オブジェクトと、第2の呼処理イベントスケジューラとを有し、(3)上記各パケット受信部は、呼制御に係るパケットを受信した際には、上記カーネルにその呼制御信号を引き渡して、上記TSSスケジューラにおけるキューイング制御を実行させた後、呼制御信号の返却を受けて、上記第1の呼処理イベントスケジューラに呼処理イベントをキューイングし、再びパケットの入力を待つように処理を戻し、(4)上記第1の呼処理イベントスケジューラは、呼処理イベントが入力されると、イベント処理を実行するためのスレッドを生成し、このイベント処理スレッドにより、呼処理イベントがキューから取り出されてイベント処理が実行され、(5)各種の呼処理サービスに係るそれぞれの呼処理イベントをキューイングしておくための上記各イベントキュー管理オブジェクトが生成され、呼処理イベントを振り分け、生成した上記各イベントキュー管理オブジェクト内のキュー配列へキューイングし、(6)上記第2の呼処理イベントスケジューラは、イベント処理スレッドを生成し、グルーピングされた上記各イベントキュー管理オブジェクトから呼処理イベントを抽出し、この抽出の際には、イベントキュー管理オブジェクトとイベント処理スレッドをバインドさせ、ステートフルエリアをアクセスしながら呼処理イベントを実行させることを特徴とする。
第2の本発明は、シングルCPUがメモリ上に展開された呼処理プログラムに従い、輻輳的に発生する呼処理イベントを実行する呼処理装置において、(1)上記呼処理プログラムは、VoIPアプリケーションに加えて呼処理イベントエンジンを有し、OSに実装されているTSSスケジューラを含むカーネルの上位に上記呼処理イベントエンジンを位置させると共に、上位呼処理イベントエンジンの上位に上記VoIPアプリケーションを位置させ、(2)上記呼処理イベントエンジンによるコールエージェントプロセスは、1又は複数のパケット受信部と、第1の呼処理イベントスケジューラと、生成される1又は複数のイベントキュー管理オブジェクトと、第2の呼処理イベントスケジューラとを有し、(3)上記各パケット受信部は、呼制御に係るパケットを受信した際には、上記カーネルにその呼制御信号を引き渡して、上記TSSスケジューラにおけるキューイング制御を実行させた後、呼制御信号の返却を受けて、上記第1の呼処理イベントスケジューラに呼処理イベントをキューイングし、再びパケットの入力を待つように処理を戻し、(4)上記第1の呼処理イベントスケジューラは、呼処理イベントが入力されると、イベント処理を実行するためのスレッドを生成し、このイベント処理スレッドにより、呼処理イベントがキューから取り出されてイベント処理が実行され、(5)上記イベント処理の実行では、各種の呼処理サービスに係るそれぞれの呼処理イベントをキューイングしておくための上記各イベントキュー管理オブジェクトが生成され、呼処理イベントを振り分け、生成した上記各イベントキュー管理オブジェクト内のキュー配列へキューイングし、(6)上記第2の呼処理イベントスケジューラは、イベント処理スレッドを生成し、グルーピングされた上記各イベントキュー管理オブジェクトから呼処理イベントを抽出し、この抽出の際には、イベントキュー管理オブジェクトとイベント処理スレッドをバインドさせ、ステートフルエリアをアクセスしながら呼処理イベントを実行させることを特徴とする。
本発明のマルチ呼処理スレッド処理方法及び呼処理装置によれば、OSのTSSスケジューラの実装に依存せず、CPUを最大限に使用し、呼処理イベントの処理を実行することができるようになる。
実施形態のマルチ呼処理スレッド処理方法の実行環境の説明図である。 ステートフルなVoIP呼制御を実現する従来のVoIP呼制御プロセス例を示す説明図である。 一般的なTSSスケジューラにて輻輳的なイベント処理を行った場合の実行タイミングについてのタイムテーブル例を示す説明図である。 実施形態の呼処理イベントスケジューラをTSSスケジューラに併用した場合における輻輳的なイベント処理を行った場合の実行タイミングについてのタイムテーブル例を示す説明図である。 実施形態のユーザ実行用スレッドの基本動作を示すフローチャートである。 実施形態のハングチェックスレッドの動作を示すフローチャートである。 実施形態の呼処理イベントエンジンによるCA(コールエージェント)プロセスの構造例を示す説明図である。 実施形態の呼処理イベントスケジューラの正常シーケンスを示すシーケンス図である。 実施形態の呼処理イベントスケジューラの異常シーケンスを示すシーケンス図である。
(A)実施形態
以下、本発明によるマルチ呼処理スレッド処理方法及び呼処理装置の一実施形態を、図面を参照しながら詳述する。
この実施形態のマルチ呼処理スレッド処理方法が実装されたマルチ呼処理スレッド処理装置(呼処理装置)は、例えば、多量のVoIP信号(例えば、80万回線)を取り扱うコールエージェント(電話交換システムの一種)に適用されているものであり、ハードウェア的には、一般的なコールエージェントと同様である。すなわち、CPU、メモリ、内蔵HDD等の大容量記憶装置、キーボード、マウス、ディスプレイ、通信インタフェース部などを備えており、CPUは、システムバスを介してメモリに接続され、また、システムバス及び入出力デバイスを介して、大容量記憶装置、キーボード、マウス、ディスプレイ、通信インタフェース部等と接続されている。
このマルチ呼処理スレッド処理装置は、例えば、Linux・Windows等の汎用マルチタスクOSを適用している。上述したように、汎用マルチタスクOSはカーネル内にTSSスケジューラを有している。
マルチ呼処理スレッド処理装置1は、図1に示すように、汎用マルチタスクOS20におけるカーネル21内のTSSスケジューラ22に加え、ユーザ層に位置する、スケジューラ機能(呼処理イベントスケジューラ31)を有する呼処理イベントエンジン30を有しており、スケジュール機能面からは、TSSスケジューラ22は、イベントエンジン30を介して、VoIPアプリケーション40に係るスレッドを処理対象とし得る。言い換えると、イベントスケジューラ31は、カーネル21のTSSスケジューラ22上で動作するコンテキストである。
図4は、実施形態に係るマルチ呼処理スレッド処理装置1が呼処理イベントを実行した際のタイムテーブル例を示しており、主として、呼処理イベントスケジューラ31の処理イメージを示している。図4は、従来に係る図3に対応する図面である。
呼処理イベントスケジューラ31は、キュー管理され順序制御が行われた複数の処理時間が短いイベントを繋げ、一回に割り当てられている最大のCPU時間(TSSスケジューラ22が提供するクォンタム)Qを使用して呼処理イベントの処理を実施する。図4の例は、イベント処理<1>だけではCPU時間Qが埋まらず、呼処理イベントスケジューラ31は、そのCPU時間Q内でイベント処理<2>(の前半部分)を続けて処理させている。各イベント処理の切り替わる間には(図4の「Ev切」)、呼処理イベントスケジューラ31の制御処理が割り込むことになるが、即座に次のイベント処理を実行させる。これにより、各イベント処理の間にディスパッチ(図4の「DP」)や呼制御処理とは関係のない別プロセス(図4の「別処理」)の処理が実行されないため、同じCPU処理時間Qで多くのイベントを処理することを可能としている。なお、ディスパッチは、TSSスケジューラ22により生じるものである。
ここで、ディスパッチが不用意に発生しないため、CPUキャッシュを最大限に活用できることなり、さらなる高速化に繋がっている。なお、この実施形態に係る図4と従来に係る図3とは、同様なイベント処理の系列の場合であるが、従来における5回のディスパッチ回数が、この実施形態では3回に減少している。
以下では、この実施形態の呼処理イベントスケジューラ31による制御動作について説明する。
一つのイベントがスケジューラ31に入力されると、順序制御のための配列にキューイングされる。ここで、イベントが輻輳しているかどうかの判定をキューイングされているイベントの個数から行い、輻輳が認められた場合はこの旨をスケジューラ31へ記録する。
スケジューラ31内には最低1つの監視スレッドが生成されており、イベントキューの監視、及び、イベント処理を実行しているスレッドの監視を行っている。イベントが入力されキューイングされると、この監視スレッドにより新たなイベント処理を実施するためのスレッド(ユーザ実行用スレッド)を生成する。
図5は、ユーザ実行用スレッドの基本動作を示している。ユーザ実行用スレッドは、入力されたイベントに係るコンテキストを生成した後(S101)、イベントの有無を確認し(S102)、イベントが存在すると、実行するユーザ(例えば、後述する呼処理オブジェクトグループ)を選択し(S103)、そのユーザの処理を実行して(S104)、上述したイベントの有無の確認に戻る。このユーザ処理の実行中においては、適宜イベントが生成される。また、後述するハングチェックのための時間計測なども行われる。
ステップS102〜S104でなるループは繰り返され、TSSスケジューラ22の最大CPU時間Qの経過によるディスパッチがあったときに、そのループ処理は中断され、TSSスケジューラ22による自己へのディスパッチによって再開される。これにより、図4に示したような、最大CPU時間Q内でのイベント切り替えを実現している。
前述したキューイングする別スレッドによって輻輳状態に陥っていることが判明した場合、監視スレッドは、新たなイベント処理が生成するか、新たな監視スレッドを生成して自らイベント処理スレッドに切り替わるかを選択する。監視スレッドがイベント処理スレッドに切り替わってそのまま動作する理由は、輻輳時、新たなスレッドを生成するためのリソースを確保し、確実に動作可能なスレッドの生成を保証することが困難であるからである。また、監視スレッドの方がスレッドの優先度が高いため、より確実にイベント処理を行い、キューを刈り取ることが可能になっているためである。
監視スレッドによるイベント処理スレッドの監視は、各イベントの実行時間の計測によりハングチェックを行う。イベント処理スレッドは、各イベント処理の切り替わりの際にタイムスタンプをイベントスケジューラ31へ記録する。監視スレッドは、このタイムスタンプから各イベント処理の実行にかかっている時間を計算し、閾値内に収まっているかどうかを判定する。各イベント処理内部で無限ループなどが発生した場合、閾値の時間を経過して新たなイベント処理スレッドを再生成する。単位時間内に、このイベント処理スレッドの再生成が複数発生すると、デッドロックしたものとみなし、プロセスの再開要求を行う。
図6は、監視スレッド(ハングチェックスレッド)のこのような動作をフローチャートで示している。監視スレッド(ハングチェックスレッド)は、ハングチェック用のコンテキストを生成した後(S201)、実行中ユーザ(実行中のイベント処理イベント)の有無を判定し(S202)、実行中ユーザが存在すれば、実行中ユーザ分だけ、実行中ユーザを選択し(S203)、タイムバーストしていないことを確認する(S204)。そして、タイムバーストした実行中ユーザがあれば、そのようなユーザに対するユーザ処理実行用のコンテキストを生成して(S205)、上述したステップS202に戻る。
上述した呼処理イベントスケジューラ31を導入したことにより、OS20のTSSスケジューラ22の実装に依存せず、CPUを最大限に使用し、呼処理イベントの処理を実行することが可能となる。
スレッド数をコントロールし、要求された呼イベント処理に必要なスレッド数のみを生成するため、TSSスケジューラ22の環境下でも、ステートフルデータを保持する呼イベント同士のコンテキスト衝突が発生せず、高速に処理することが可能である。また、システム内のスレッド数を最小限に留めることが可能となり、カーネル21のスケジューラ22による不要なディスパッチ処理の発生を抑え、結果として、呼イベント実行契機のタイミングを短くすることが可能となり、サービスインタラクティブ性を確保できる。
この実施形態の呼処理イベントエンジン30は、コールエージェント(電話交換システム)のような輻輳的に発生する呼処理イベントを高速実行するためのものであり、コンテキストの連結/管理と、順序制御と、呼処理コンテキストのハング(ハングアップ)チェックとを行うものである。
図7は、実施形態の呼処理イベントエンジン30によるCA(コールエージェント)プロセスの構造例を示す説明図であり、従来に係る上述した図2に対応する図面である。なお、従来では、カーネルの上位が直ちにVoIPアプリケーションであったが、この実施形態の場合には、カーネルの上位に呼処理イベントエンジン30が存在し、さらに、その上にVoIPアプリケーションが存在し、状態に応じてプロセスやスレッドが適宜生成される。
呼処理イベントエンジン30によるCA(コールエージェント)プロセスCAPは、1又は複数(図7では4個を示している)のパケット受信部32−1〜32−4を有している。各パケット受信部32−1〜32−4が信号を受信した際には、カーネル21にその呼制御信号を引き渡し、カーネル21のTSSスケジューラ22におけるキューイング制御の後、各パケット受信部32−1〜32−4にカーネル21からの呼制御信号が与えられる。
CAプロセスCAPは、前段に、カーネル21からの呼制御信号を受信した1次イベントを処理するためのイベントスケジューラ31−1を保持し、後段に、呼処理サービスを処理するためのイベントスケジューラ31−2を保持している。また、CAプロセスCAPは、これら2個のイベントスケジューラ31−1及び31−2を繋ぐため、各種の呼処理サービスに係るそれぞれのイベントをキューイングしておくためのイベントキュー管理オブジェクト33−1〜33−Nを配置する。イベントキュー管理オブジェクト33−1〜33−Nの基本動作は、FIFO(First−In First−Out)である。
2個のイベントスケジューラ31−1及び31−2はそれぞれ、図4〜図6を用いて説明したイベントスケジューラ31である。
各パケット受信部32−1〜32−4が信号を受信した際、前段のイベントスケジューラ31−1へキューイングし、再びパケットの入力を待つため、即座に処理が戻る(<1>〜<4>)。イベントスケジューラ31−1は、イベントが入力されると、イベント処理を実行するためのスレッドを生成する。イベント処理スレッドにより、イベントがキューから取り出されイベント処理が実行されていく。図7は、イベントキュー管理オブジェクト33−1〜33−Nを生成し、イベントを振り分け、生成したオブジェクト内のキュー配列へキューイングしていく処理を行う場合を示している(<5>〜<8>)。
後段の呼処理を実行するためのイベントスケジューラ31−2は、イベント処理スレッドを生成し、グルーピングされた各イベントキュー管理オブジェクト(呼処理オブジェクトグループ)33−1〜33−Nからイベントを抽出し、呼処理イベントを実行させる。呼処理イベントの実行時には、適宜、ステートフルエリアがアクセスさせる。
イベントスケジューラ31−2は、上述したイベントの抽出などを行う際には、イベントキュー管理オブジェクトとイベント処理スレッドをバインドさせて以降の処理順序を保つ。
なお、イベントキュー管理オブジェクト分、イベント処理スレッドを生成することも可能であるが、カーネル21内のRunキューを輻輳させてしまうため、イベント処理を繋ぎスレッド数のコントロールを行うこととした。また、コントロールして生成したスレッド数を最小限に抑えることにより、上位のステートフルエリア34へのアクセスでスレッド同士の競合が発生せず、ロックによる待機時間をなくすことができる。
図8は、後段の呼処理イベントスケジューラ31−2に着目し、その正常シーケンスの場合を示しており、カーネル21や前段の呼処理イベントスケジューラ31−1の動作は省略している。
信号入力スレッド(図7でのパケット受信部に相当)32が非同期信号を受信し、呼処理オブジェクトグループ33−GAの信号入力オブジェクトをコールする(S301)。このとき、呼処理オブジェクトグループ33−GAの信号入力オブジェクトは、呼処理イベントスケジューラ31(31−2)に、イベントを処理するためのコンテキストを要求する(S302)。要求がキューイングされると、要求したコンテキストが生成されるまで、全ての呼処理オブジェクトグループ33−GA、33−GBや信号入力スレッド32は、その加入者サービスについて対応する呼処理に対し、排他制御を実行する(S303)。
例えば、呼処理オブジェクトグループ33−GAはある発信側加入者に係る呼処理オブジェクトのグループであり、呼処理オブジェクトグループ33−GBはその呼の着信側加入者に係る呼処理オブジェクトのグループである。
そして、呼処理イベントスケジューラ31(31−2)が要求されたコンテキストを生成し(S304)、呼処理オブジェクトグループ33−GAに関する呼処理を実施する(S305)。
このような呼処理オブジェクトグループ33−GAの呼処理の実施中には、ハングチェックのために、実行時時間の実時間が計測される。図8における鋸歯状の曲線が重畳されている部分が計測期間である。
また、このような、ある呼処理オブジェクトグループ33−GAの呼処理の実施中に他の呼処理オブジェクトグループ33−GBで実行される非同期イベントが生成されることもあり、その通知を受けた呼処理オブジェクトグループ33−GBは、キューイングした後、自グループ33−GB用のコンテキストを呼処理イベントスケジューラ31に要求し、その要求の受信応答が呼処理イベントスケジューラ31から返信されると、呼処理オブジェクトグループ33−GBは、呼処理オブジェクトグループ33−GAに関する呼処理を再開させる。呼処理オブジェクトグループ33−GAは、実行中の呼処理が終了すると、呼処理イベントスケジューラ31にそのことを通知する。図8では、説明の簡易化のために簡単に示しているが、これにより、呼処理イベントスケジューラ31は、呼処理オブジェクトグループ33−GBが要求したコンテキストを生成して、呼処理オブジェクトグループ33−GBに関する呼処理を実施する(S306)。
カーネル21のTSSスケジューラ22が提供するクォンタムQが経過すると、割り込みが発生し、呼処理オブジェクトグループ33−GBに関する呼処理が中断する(S307)。
図9は、図8の正常シーケンスに対応する異常シーケンスを示しており、図8におけるステップS304の呼処理オブジェクトグループ33−GAが要求したコンテキストを生成した以降の流れを示している。
呼処理オブジェクトグループ33−GAに関する呼処理の実行中において、論理矛盾によるループやデッドロックによるプログラムの停止などが生じると(S401)、呼処理イベントスケジューラ31による計測時間が閾値時間を越えてしまう。
このような異常状態は、ハングチェックスレッド50が、処理中のクォンタムQ内で異常状態を検出するか否かの相違により、以下の第1又は第2の方法で処理される。
第1の方法は、以下の通りである。呼処理イベントエンジン30におけるハングチェックスレッド50は、種々の実行イベントに対する実行時間を監視しており(S402)、呼処理オブジェクトグループ33−GAに関する呼処理イベントの実行時間が上述の原因などによって閾値時間を越えてタイムアウトしたことを検出する(S403)。このとき、ハングチェックスレッド50は、新たな呼処理イベントスケジューラ31NEWを生成させる(S404)。呼処理イベントスケジューラ31NEWは、例えば、呼処理オブジェクトグループ33−GBに関するコンテキストを生成し(S404)、呼処理オブジェクトグループ33−GBに関するコンテキストを生成して呼処理を実施する(S405、S406)。以上のような新たな呼処理イベントスケジューラ31NEWの生成により、呼処理イベントスケジューラによる処理が継続したように見える。このような呼処理イベントスケジューラ31NEWに従う呼処理の実行中においても、カーネル21のTSSスケジューラ22が提供するクォンタムQが経過すると、割り込みが発生し、呼処理オブジェクトグループ33−GBに関する呼処理が中断する(S407)。
第2の方法は、以下の通りである。ハングチェックスレッド50の実行時間の監視タイミングの前に、カーネル21のTSSスケジューラ22が提供するクォンタムQが経過すると、割り込みが発生し(S410)、処理が中断する。
その後、カーネル21のTSSスケジューラ22のクォンタムQが再び、中断した処理に係るものとなって処理を復旧(再開)すると、ハングチェックスレッド50はコンテキストの継続判定を行う(S411)。ここで、輻輳状態と判定されると、そのことが呼処理イベントスケジューラ311に通知され、ステップS304で生成したコンテキストを消滅させる(S412)。このようなコンテキストの消滅は、輻輳状態などのスレッドを生成した方が良いと判断された場合に行われる。
実施形態の呼処理イベントエンジン30によれば、図4〜図6を用いて説明した呼処理イベントスケジューラ31を適用した効果に加え、コールエージェント(電話交換システム)のようなステートフルエリアを保持しなければならないシステムで課題であったコンテキストの競合を最小限に抑えることを、サービス形態に依存せずに、容易に達成することができる。また、システム全体で生成されるスレッドの数を最小限に抑えることが可能であり、パケット受信部などの短い処理を実施するスレッドへも頻繁に実行契機が与えられ、インタラクティブ性の向上が図ることができる。
(B)他の実施形態
本発明によるマルチ呼処理スレッド処理装置及び方法は、その適用対象が、上記実施形態のようなコールエージェントに限定されるものではなく、メディアゲートウェイコントローラ(MGC)などの他の電話交換装置にも適用できる。
1…マルチ呼処理スレッド処理装置、10…ハードウェア、20…汎用マルチタスクOS、21…カーネル、22…TSSスケジューラ、30…呼処理イベントエンジン、31…呼処理イベントスケジューラ、40…VoIPアプリケーション。

Claims (4)

  1. シングルCPUがメモリ上に展開された呼処理プログラムに従い、輻輳的に発生する呼処理イベントを実行するマルチ呼処理スレッド処理方法において、
    上記呼処理プログラムは、VoIPアプリケーションに加えて呼処理イベントエンジンを有し、OSに実装されているTSSスケジューラを含むカーネルの上位に上記呼処理イベントエンジンを位置させると共に、上位呼処理イベントエンジンの上位に上記VoIPアプリケーションを位置させ、
    上記呼処理イベントエンジンによるコールエージェントプロセスは、1又は複数のパケット受信部と、第1の呼処理イベントスケジューラと、生成される1又は複数のイベントキュー管理オブジェクトと、第2の呼処理イベントスケジューラとを有し、
    上記各パケット受信部は、呼制御に係るパケットを受信した際には、上記カーネルにその呼制御信号を引き渡して、上記TSSスケジューラにおけるキューイング制御を実行させた後、呼制御信号の返却を受けて、上記第1の呼処理イベントスケジューラに呼処理イベントをキューイングし、再びパケットの入力を待つように処理を戻し、
    上記第1の呼処理イベントスケジューラは、呼処理イベントが入力されると、イベント処理を実行するためのスレッドを生成し、このイベント処理スレッドにより、呼処理イベントがキューから取り出されてイベント処理が実行され、
    上記イベント処理の実行では、各種の呼処理サービスに係るそれぞれの呼処理イベントをキューイングしておくための上記各イベントキュー管理オブジェクトが生成され、呼処理イベントを振り分け、生成した上記各イベントキュー管理オブジェクト内のキュー配列へキューイングし、
    上記第2の呼処理イベントスケジューラは、イベント処理スレッドを生成し、グルーピングされた上記各イベントキュー管理オブジェクトから呼処理イベントを抽出し、この抽出の際には、イベントキュー管理オブジェクトとイベント処理スレッドをバインドさせ、ステートフルエリアをアクセスしながら呼処理イベントを実行させる
    ことを特徴とするマルチ呼処理スレッド処理方法。
  2. 上記第1及び第2の呼処理イベントスケジューラが、1又は複数の処理時間が短い呼処理イベントを、上記TSSスケジューラが呼処理イベントの1回の処理に割り当てている最大のCPU時間を使用して処理させることを特徴とする請求項1に記載のマルチ呼処理スレッド処理方法。
  3. シングルCPUがメモリ上に展開された呼処理プログラムに従い、輻輳的に発生する呼処理イベントを実行する呼処理装置において、
    上記呼処理プログラムは、VoIPアプリケーションに加えて呼処理イベントエンジンを有し、OSに実装されているTSSスケジューラを含むカーネルの上位に上記呼処理イベントエンジンを位置させると共に、上位呼処理イベントエンジンの上位に上記VoIPアプリケーションを位置させ、
    上記呼処理イベントエンジンによるコールエージェントプロセスは、1又は複数のパケット受信部と、第1の呼処理イベントスケジューラと、生成される1又は複数のイベントキュー管理オブジェクトと、第2の呼処理イベントスケジューラとを有し、
    上記各パケット受信部は、呼制御に係るパケットを受信した際には、上記カーネルにその呼制御信号を引き渡して、上記TSSスケジューラにおけるキューイング制御を実行させた後、呼制御信号の返却を受けて、上記第1の呼処理イベントスケジューラに呼処理イベントをキューイングし、再びパケットの入力を待つように処理を戻し、
    上記第1の呼処理イベントスケジューラは、呼処理イベントが入力されると、イベント処理を実行するためのスレッドを生成し、このイベント処理スレッドにより、呼処理イベントがキューから取り出されてイベント処理が実行され、
    上記イベント処理の実行では、各種の呼処理サービスに係るそれぞれの呼処理イベントをキューイングしておくための上記各イベントキュー管理オブジェクトが生成され、呼処理イベントを振り分け、生成した上記各イベントキュー管理オブジェクト内のキュー配列へキューイングし、
    上記第2の呼処理イベントスケジューラは、イベント処理スレッドを生成し、グルーピングされた上記各イベントキュー管理オブジェクトから呼処理イベントを抽出し、この抽出の際には、イベントキュー管理オブジェクトとイベント処理スレッドをバインドさせ、ステートフルエリアをアクセスしながら呼処理イベントを実行させる
    ことを特徴とする呼処理装置。
  4. 上記第1及び第2の呼処理イベントスケジューラが、1又は複数の処理時間が短い呼処理イベントを、上記TSSスケジューラが呼処理イベントの1回の処理に割り当てている最大のCPU時間を使用して処理させることを特徴とする請求項3に記載の呼処理装置。
JP2009260064A 2009-11-13 2009-11-13 マルチ呼処理スレッド処理方法及び呼処理装置 Expired - Fee Related JP5029675B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009260064A JP5029675B2 (ja) 2009-11-13 2009-11-13 マルチ呼処理スレッド処理方法及び呼処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009260064A JP5029675B2 (ja) 2009-11-13 2009-11-13 マルチ呼処理スレッド処理方法及び呼処理装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2004379909A Division JP4609070B2 (ja) 2004-12-28 2004-12-28 マルチ呼処理スレッド処理方法

Publications (2)

Publication Number Publication Date
JP2010073214A true JP2010073214A (ja) 2010-04-02
JP5029675B2 JP5029675B2 (ja) 2012-09-19

Family

ID=42204867

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009260064A Expired - Fee Related JP5029675B2 (ja) 2009-11-13 2009-11-13 マルチ呼処理スレッド処理方法及び呼処理装置

Country Status (1)

Country Link
JP (1) JP5029675B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015136259A (ja) * 2014-01-17 2015-07-27 株式会社東芝 イベント管理装置、イベント管理方法およびモータシステム
CN114760530A (zh) * 2020-12-25 2022-07-15 深圳Tcl新技术有限公司 事件处理方法、装置、电视机及计算机可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61190633A (ja) * 1985-02-20 1986-08-25 Oki Electric Ind Co Ltd プログラム運用管理方式
JPH02166526A (ja) * 1988-12-20 1990-06-27 Fujitsu Ltd 長時間使用資源検出方式
JPH0357026A (ja) * 1989-07-26 1991-03-12 Hitachi Ltd タスク制御方式
JPH09319597A (ja) * 1996-03-28 1997-12-12 Hitachi Ltd 周期的プロセスのスケジューリング方法
JPH10155010A (ja) * 1996-09-30 1998-06-09 Oki Data:Kk パケット処理方法とネットワ−クア−キテクチャ

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61190633A (ja) * 1985-02-20 1986-08-25 Oki Electric Ind Co Ltd プログラム運用管理方式
JPH02166526A (ja) * 1988-12-20 1990-06-27 Fujitsu Ltd 長時間使用資源検出方式
JPH0357026A (ja) * 1989-07-26 1991-03-12 Hitachi Ltd タスク制御方式
JPH09319597A (ja) * 1996-03-28 1997-12-12 Hitachi Ltd 周期的プロセスのスケジューリング方法
JPH10155010A (ja) * 1996-09-30 1998-06-09 Oki Data:Kk パケット処理方法とネットワ−クア−キテクチャ

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015136259A (ja) * 2014-01-17 2015-07-27 株式会社東芝 イベント管理装置、イベント管理方法およびモータシステム
CN114760530A (zh) * 2020-12-25 2022-07-15 深圳Tcl新技术有限公司 事件处理方法、装置、电视机及计算机可读存储介质
CN114760530B (zh) * 2020-12-25 2023-08-01 深圳Tcl新技术有限公司 事件处理方法、装置、电视机及计算机可读存储介质

Also Published As

Publication number Publication date
JP5029675B2 (ja) 2012-09-19

Similar Documents

Publication Publication Date Title
Tindell et al. Holistic schedulability analysis for distributed hard real-time systems
EP2701074B1 (en) Method, device, and system for performing scheduling in multi-processor core system
Tindell et al. An extendible approach for analyzing fixed priority hard real-time tasks
Tokuda et al. Real-Time Mach: Towards a Predictable Real-Time System.
US8166485B2 (en) Dynamic techniques for optimizing soft real-time task performance in virtual machines
Pyarali et al. Evaluating and optimizing thread pool strategies for real-time CORBA
Bangs et al. Better operating system features for faster network servers
JP4609070B2 (ja) マルチ呼処理スレッド処理方法
CN111897637B (zh) 作业调度方法、装置、主机及存储介质
Kaneko et al. Integrated scheduling of multimedia and hard real-time tasks
Lin et al. {RingLeader}: efficiently offloading {Intra-Server} orchestration to {NICs}
KR20070083460A (ko) 다중 커널을 동시에 실행하는 방법 및 시스템
US20190042151A1 (en) Hybrid framework of nvme-based storage system in cloud computing environment
Kitayama et al. RT-IPC: An IPC Extension for Real-Time Mach.
CN116700901A (zh) 基于微内核的容器构建与运行系统及方法
US7703103B2 (en) Serving concurrent TCP/IP connections of multiple virtual internet users with a single thread
Jia et al. Skyloft: A General High-Efficient Scheduling Framework in User Space
Nakajima et al. Experiments with Real-Time Servers in Real-Time Mach.
JP5029675B2 (ja) マルチ呼処理スレッド処理方法及び呼処理装置
Tindell et al. Guaranteeing Hard Real Time End-to-End Communications Deadlines
Tsenos et al. Amesos: a scalable and elastic framework for latency sensitive streaming pipelines
Rocha et al. A QoS aware non-work-conserving disk scheduler
WO2024120118A1 (zh) 中断请求处理方法、系统、设备及计算机可读存储介质
US8869171B2 (en) Low-latency communications
CN101349975A (zh) 实现中断底半部机制的方法及嵌入式系统

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120529

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120611

R150 Certificate of patent or registration of utility model

Ref document number: 5029675

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150706

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees