(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023161825
(43)【公開日】2023-11-08
(54)【発明の名称】パケット受信プログラム、パケット受信方法および情報処理装置
(51)【国際特許分類】
H04L 47/56 20220101AFI20231031BHJP
H04L 47/62 20220101ALI20231031BHJP
G06F 9/48 20060101ALI20231031BHJP
【FI】
H04L47/56
H04L47/62
G06F9/48 300F
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022072414
(22)【出願日】2022-04-26
(71)【出願人】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002918
【氏名又は名称】弁理士法人扶桑国際特許事務所
(72)【発明者】
【氏名】加藤 純
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA02
5K030LB12
5K030MA04
5K030MB12
5K030MC07
(57)【要約】
【課題】通信遅延によるユーザスレッドの処理開始の遅延を軽減する。
【解決手段】コンピュータは、デッドラインが付与されたユーザスレッドがパケットを待つ場合、デッドラインより前でありデッドラインと関連する基準時刻を決定する。コンピュータは、基準時刻までに通信インタフェースでパケットが受信されない場合、カーネルスレッドに制御を渡し、カーネルスレッドを用いて、通信インタフェースの受信状況を反復的に確認するポーリングを実行する。コンピュータは、ポーリングの間に通信インタフェースでパケットが受信された場合、カーネルスレッドを用いて、受信されたパケットを読み出し、ユーザスレッドに読み出したパケットを渡す。
【選択図】
図7
【特許請求の範囲】
【請求項1】
デッドラインが付与されたユーザスレッドがパケットを待つ場合、前記デッドラインより前であり前記デッドラインと関連する基準時刻を決定し、
前記基準時刻までに通信インタフェースで前記パケットが受信されない場合、カーネルスレッドに制御を渡し、前記カーネルスレッドを用いて、前記通信インタフェースの受信状況を反復的に確認するポーリングを実行し、
前記ポーリングの間に前記通信インタフェースで前記パケットが受信された場合、前記カーネルスレッドを用いて、受信された前記パケットを読み出し、前記ユーザスレッドに前記読み出したパケットを渡す、
処理をコンピュータに実行させるパケット受信プログラム。
【請求項2】
前記カーネルスレッドは、前記デッドラインに応じて前記ユーザスレッドに付与された優先度で実行される、
請求項1記載のパケット受信プログラム。
【請求項3】
前記基準時刻は、少なくとも、前記デッドラインより前であり前記デッドラインに対応するスタート時刻と、前記パケットを伝送するネットワークの最大遅延時間とを用いて決定される、
請求項1記載のパケット受信プログラム。
【請求項4】
前記通信インタフェースで過去に受信された複数のパケットそれぞれの受信時刻および宛先を示す受信履歴データに基づいて、前記複数のパケットの平均受信間隔と、前記複数のパケットのうち前記ユーザスレッド宛て以外のパケットの混入率とを算出する処理を、前記コンピュータに更に実行させ、
前記基準時刻は、前記平均受信間隔および前記混入率を用いて決定される、
請求項1記載のパケット受信プログラム。
【請求項5】
前記ユーザスレッドが複数のパケットを待ち、前記基準時刻より前に前記複数のパケットのうち一部のパケットが受信された場合、残りパケット数に基づいて前記基準時刻を更新する処理を、前記コンピュータに更に実行させる、
請求項1記載のパケット受信プログラム。
【請求項6】
デッドラインが付与されたユーザスレッドがパケットを待つ場合、前記デッドラインより前であり前記デッドラインと関連する基準時刻を決定し、
前記基準時刻までに通信インタフェースで前記パケットが受信されない場合、カーネルスレッドに制御を渡し、前記カーネルスレッドを用いて、前記通信インタフェースの受信状況を反復的に確認するポーリングを実行し、
前記ポーリングの間に前記通信インタフェースで前記パケットが受信された場合、前記カーネルスレッドを用いて、受信された前記パケットを読み出し、前記ユーザスレッドに前記読み出したパケットを渡す、
処理をコンピュータが実行するパケット受信方法。
【請求項7】
パケットを受信する通信インタフェースと、
デッドラインが付与されたユーザスレッドが前記パケットを待つ場合、前記デッドラインより前であり前記デッドラインと関連する基準時刻を決定し、前記基準時刻までに前記通信インタフェースで前記パケットが受信されない場合、カーネルスレッドに制御を渡し、前記カーネルスレッドを用いて、前記通信インタフェースの受信状況を反復的に確認するポーリングを実行し、前記ポーリングの間に前記通信インタフェースで前記パケットが受信された場合、前記カーネルスレッドを用いて、受信された前記パケットを読み出し、前記ユーザスレッドに前記読み出したパケットを渡す処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明はパケット受信プログラム、パケット受信方法および情報処理装置に関する。
【背景技術】
【0002】
情報処理装置は、他の情報処理装置からの要求に応じて、他の情報処理装置のためのデータ処理を行うユーザスレッドを起動することがある。ユーザスレッドは、他の情報処理装置から受信されるパケットを待ってデータ処理を開始することがある。NIC(Network Interface Card)などの通信インタフェースがパケットを受信してからユーザスレッドがパケットを受け取るまでに、典型的には以下のようなパケット処理が実行される。
【0003】
通信インタフェースがパケットを受信すると、オペレーティングシステム(OS:Operating System)は、割り込み処理によってカーネルスレッドを起動する。カーネルスレッドは、受信されたパケットを読み出し、パケットヘッダを解析して宛先のユーザスレッドを判定する。カーネルスレッドは、ユーザスレッドに対応するメモリ領域にパケットを書き込むなどの処理を通じて、ユーザスレッドにパケットを渡す。OSは、パケット受信待ちのユーザスレッドの待ち状態を解除する。
【0004】
なお、バッファにパケットが滞留することによって生じる遅延ジッタを抑制するパケット転送装置が提案されている。提案のパケット転送装置は、パケットを受信してから転送するまでの遅延時間を推定し、推定した遅延時間と目標遅延時間とに基づいて、バッファから一部のパケットを規則的に廃棄する廃棄ルールを決定する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
リアルタイムアプリケーションのユーザスレッドには、データ処理のデッドラインが付与されていることがある。一方、パケットを伝送するネットワークの通信遅延が大きくなると、ユーザスレッドがパケットを受け取ってデータ処理を開始する時刻が遅くなることがある。その結果、デッドラインまでのデータ処理の猶予時間が短くなることがある。
【0007】
この点、情報処理装置は、通信インタフェースがパケットを受信してからユーザスレッドがパケットを受け取るまでのパケット処理時間を短縮できれば、ユーザスレッドの処理開始の遅延を軽減し得る。しかし、典型的なパケット処理は、通信インタフェースがパケットを受信した後に、デッドラインが付与されたユーザスレッドとは別個のカーネルスレッドを割り込み処理によって起動する。このため、カーネルスレッドを用いたパケット処理が迅速に実行されないおそれがある。そこで、1つの側面では、本発明は、通信遅延によるユーザスレッドの処理開始の遅延を軽減することを目的とする。
【課題を解決するための手段】
【0008】
1つの態様では、以下の処理をコンピュータに実行させるパケット受信プログラムが提供される。デッドラインが付与されたユーザスレッドがパケットを待つ場合、デッドラインより前でありデッドラインと関連する基準時刻を決定する。基準時刻までに通信インタフェースでパケットが受信されない場合、カーネルスレッドに制御を渡し、カーネルスレッドを用いて、通信インタフェースの受信状況を反復的に確認するポーリングを実行する。ポーリングの間に通信インタフェースでパケットが受信された場合、カーネルスレッドを用いて、受信されたパケットを読み出し、ユーザスレッドに読み出したパケットを渡す。
【0009】
また、1つの態様では、コンピュータが実行するパケット受信方法が提供される。また、1つの態様では、通信インタフェースと処理部とを有する情報処理装置が提供される。
【発明の効果】
【0010】
1つの側面では、通信遅延によるユーザスレッドの処理開始の遅延が軽減される。
【図面の簡単な説明】
【0011】
【
図1】第1の実施の形態の情報処理装置を説明するための図である。
【
図2】第2の実施の形態の情報処理システムの例を示す図である。
【
図3】エンドポイントデバイスのハードウェア例を示すブロック図である。
【
図4】エッジサーバのハードウェア例を示すブロック図である。
【
図5】エッジサーバで実行されるスレッドの例を示す図である。
【
図6】エンドポイントデバイスとエッジサーバとの間の通信例を示す図である。
【
図7】スレッドの実行開始時刻の例を示す図である。
【
図8】エッジサーバの機能例を示すブロック図である。
【
図10】スレッド管理テーブルの例を示す図である。
【
図11】受信待ち設定の手順例を示すフローチャートである。
【
図12】割り込み受信の手順例を示すフローチャートである。
【
図13】ポーリング受信の手順例を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
【0013】
図1は、第1の実施の形態の情報処理装置を説明するための図である。
第1の実施の形態の情報処理装置10は、アプリケーションソフトウェアとして、あるスタート時刻から一定時間内にデータ処理を完了するためのリアルタイムアプリケーションを実行する。情報処理装置10は、ネットワークを介して他の情報処理装置からパケットを受信し、受信したパケットを用いてデータ処理を行う。情報処理装置10は、データ処理の結果を他の情報処理装置に送信してもよい。例えば、情報処理装置10は、他の情報処理装置から画像データを受信し、画像データに対する画像認識の結果を返信する。情報処理装置10は、コンピュータまたはパケット受信装置と呼ばれてもよい。
【0014】
情報処理装置10は、通信インタフェース11および処理部12を有する。通信インタフェース11は、パケットを受信するハードウェアインタフェースである。通信インタフェース11は、ネットワークに接続される。ネットワークは、有線ネットワークを含んでもよく、無線ネットワークを含んでもよい。通信インタフェース11は、例えば、NICまたは通信ポートに相当する。後述するように、通信インタフェース11は、ユーザスレッド13が待つパケット15を受信する。ただし、通信インタフェース11は、他のユーザスレッド宛てのパケットなど、ユーザスレッド13宛て以外のパケットも受信し得る。
【0015】
処理部12は、プロセッサである。処理部12は、CPU(Central Processing Unit)、GPU(Graphics Processing Unit)、DSP(Digital Signal Processor)、ASIC(Application Specific Integrated Circuit)またはFPGA(Field Programmable Gate Array)を含んでもよい。プロセッサは、メモリに記憶されたプログラムを実行する。プログラムには、パケット受信プログラムが含まれ得る。プロセッサの集合が、マルチプロセッサまたは単に「プロセッサ」と呼ばれてもよい。情報処理装置10は、RAM(Random Access Memory)などの揮発性半導体メモリを有してもよく、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性ストレージを有してもよい。
【0016】
処理部12は、リアルタイムアプリケーションのユーザスレッド13を実行する。ユーザスレッド13には、デッドライン16が付与されている。デッドライン16は、ユーザスレッド13がデータ処理を完了することが望まれている期限である。デッドライン16は、あるスタート時刻に一定時間を足すことで算出されてもよい。スタート時刻は、パケット15を送信する他の情報処理装置から事前に通知されてもよく、他の情報処理装置と情報処理装置10との間で事前に合意されてもよい。処理部12は、デッドラインに基づいて複数のスレッドの実行スケジュールを決定してもよい。例えば、処理部12は、デッドラインが早いスレッドほど優先度を高くする。
【0017】
ユーザスレッド13は、パケット15を受け取ってからデータ処理を開始する。そのため、ユーザスレッド13は、パケット15を待つ待ち状態になることがある。例えば、ユーザスレッド13は、パケット受信要求を示すシステムコールをOSに対して実行し、CPU時間が割り当てられない待ち状態に遷移する。パケット受信要求は、ユーザスレッド13がパケット15を受け取るためのユーザ空間のメモリ領域を指定してもよく、一度に受け取るデータのデータ長を指定してもよい。
【0018】
処理部12は、ユーザスレッド13がパケット15を待つ場合、基準時刻17を決定する。処理部12は、ユーザスレッド13が待ち状態になる際に基準時刻17を決定してもよい。基準時刻17は、デッドライン16より前でありデッドライン16と関連する。基準時刻17は、デッドライン16に対応するスタート時刻に一定時間を足すことで算出されてもよく、デッドライン16から一定時間を引くことで算出されてもよい。スタート時刻に足される時間は、パケット15を伝送するネットワークの最大遅延時間でもよい。最大遅延時間は、ネットワークの仕様で規定された理論上の最大遅延時間でもよい。
【0019】
また、処理部12は、後述するカーネルスレッド14を起動するための起動時間に基づいて、基準時刻17を調整してもよい。例えば、処理部12は、カーネルスレッド14の起動時間だけ、上記の時刻よりも基準時刻17を早める。また、処理部12は、過去に通信インタフェース11で受信されたパケットの受信時刻および宛先を示す受信履歴データを参照して、基準時刻17を調整してもよい。例えば、処理部12は、ユーザスレッド13宛て以外のパケットの混入率と、平均パケット受信間隔と、ユーザスレッド13の残りパケット数とから期待受信時間を算出し、期待受信時間だけ基準時刻17を早める。
【0020】
処理部12は、基準時刻17までに通信インタフェース11でパケット15が受信されない場合、カーネルスレッド14に制御を渡す。カーネルスレッド14が起動していない場合、処理部12は、カーネルスレッド14を起動してもよい。処理部12は、ハードウェアタイマを用いて、現在時刻が基準時刻17になったらカーネルスレッド14に制御を渡してもよい。カーネルスレッド14は、OSのカーネル空間で実行されるスレッドである。カーネルスレッド14は、ユーザスレッド13のデッドライン16が付与されてもよく、デッドライン16に応じた優先度で実行されてもよい。例えば、カーネルスレッド14は、OSのスケジューリング上、ユーザスレッド13と同じ優先度で実行される。
【0021】
処理部12は、カーネルスレッド14を用いて、通信インタフェース11のパケット受信状況を反復的に確認するポーリングを実行する。処理部12は、例えば、ポーリングによって、少なくとも1つのパケットが受信されたか判定する。ポーリングは、通信インタフェース11の平均パケット受信間隔より短い周期で実行されてもよい。
【0022】
通信インタフェース11の内部に受信バッファがある場合、処理部12は、通信インタフェース11に反復的にアクセスしてもよい。また、通信インタフェース11の外部のメモリに受信バッファがある場合、処理部12は、受信バッファがあるメモリ領域に反復的にアクセスしてもよい。外部メモリはRAMであることがあり、通信インタフェース11から外部メモリへはDMA(Direct Memory Access)でパケットが書き込まれることがある。また、処理部12は、パケットの有無を示す制御フラグを反復的に確認してもよい。
【0023】
処理部12は、ポーリングの間に通信インタフェース11でパケットが受信されたことを検出する。パケット15が受信された場合、処理部12は、カーネルスレッド14を用いて、パケット15を読み出してユーザスレッド13にパケット15を渡す。
【0024】
例えば、カーネルスレッド14は、通信インタフェース11の内部または外部の受信バッファからパケット15を読み出し、パケット15のヘッダを解析し、パケット15の宛先がユーザスレッド13であると判定する。カーネルスレッド14は、ユーザスレッド13に対応するユーザ空間のメモリ領域にパケット15を書き込む。このメモリ領域はユーザスレッド13から指定されることがあり、ソケットと呼ばれることがある。ユーザスレッド13が待つ全てのパケットの受信が完了すると、OSは、ユーザスレッド13の待ち状態を解除してユーザスレッド13を実行可能状態にする。
【0025】
なお、情報処理装置10は、通信インタフェース11を仮想化してもよい。例えば、情報処理装置10は、複数のユーザスレッドそれぞれに対して仮想通信ポートを設定し、複数のユーザスレッドそれぞれに対応するカーネルスレッドを実行する。通信インタフェース11が仮想化された場合、ユーザスレッド13に対応する受信バッファには、ユーザスレッド13宛てのパケットが格納され、他のユーザスレッド宛てのパケットが格納されないことがある。ただし、その場合であっても、受信バッファには、ブロードキャストパケットなどユーザスレッド13宛て以外のパケットが混入していることがある。
【0026】
以上説明したように、第1の実施の形態の情報処理装置10は、ユーザスレッド13がパケット15を待つ場合、デッドライン16より前でありデッドライン16と関連する基準時刻17を決定する。情報処理装置10は、基準時刻17までにパケット15が受信されない場合、カーネルスレッド14に制御を渡し、カーネルスレッド14を用いて、通信インタフェース11の受信状況を反復的に確認するポーリングを実行する。情報処理装置10は、ポーリングの間にパケット15が受信された場合、カーネルスレッド14を用いて、パケット15を読み出してユーザスレッド13にパケット15を渡す。
【0027】
これにより、通信インタフェース11でパケット15が受信されてから割り込みによってカーネルスレッド14を起動する場合と比べて、パケット15の受信後のオーバヘッドが削減される。また、ポーリングを行ったカーネルスレッド14が、スレッド切替なしにそのままパケット15を処理する。よって、基準時刻17を経過した後は、通信インタフェース11がパケット15を受信してからユーザスレッド13がパケット15を受け取るまでのパケット処理時間が短縮される。その結果、ネットワークの通信遅延によるユーザスレッド13のデータ処理開始の遅延が軽減され、デッドライン16までのデータ処理の猶予時間が長くなる。また、情報処理装置10は、他の情報処理装置に対して約束するデッドライン16を早めることが可能となる。
【0028】
なお、情報処理装置10は、カーネルスレッド14をデッドライン16に応じた優先度で実行してもよい。これにより、カーネルスレッド14が、遅いデッドラインをもつスレッドやデッドラインをもたないスレッドよりも優先的に実行され、カーネルスレッド14の起動後のパケット処理時間が短縮する。
【0029】
また、情報処理装置10は、基準時刻17を、デッドライン16に対応するスタート時刻とネットワークの最大遅延時間とを用いて決定してもよい。また、情報処理装置10は、受信履歴データに基づいて、平均受信間隔とユーザスレッド13宛て以外のパケットの混入率とを算出してもよく、平均受信間隔および混入率を用いて基準時刻17を決定してもよい。これにより、カーネルスレッド14がポーリングを開始してからパケット15が到着するまでのポーリング時間が短縮され、情報処理装置10の負荷が抑制される。
【0030】
また、情報処理装置10は、基準時刻17より前に一部のパケットが受信された場合、残りパケット数に基づいて基準時刻17を更新してもよい。これにより、複数のパケットのうち途中のパケットから通信遅延が大きくなった場合であっても、適切な時刻からカーネルスレッド14のポーリングが開始される。
【0031】
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の情報処理システムの例を示す図である。
【0032】
第2の実施の形態の情報処理システムは、エンドポイントデバイス31,32などの複数のエンドポイントデバイス、無線基地局33、エッジサーバ34およびクラウドサーバ35を含む。エッジサーバ34は、第1の実施の形態の情報処理装置10に対応する。
【0033】
エンドポイントデバイス31,32は、リアルタイムアプリケーションが実行されるエッジサーバ34に対するクライアント装置である。エンドポイントデバイス31,32は、リアルタイムアプリケーションに対し、データが生成されてから一定時間内に当該データの解析結果が得られることを要求する。第2の実施の形態では、エンドポイントデバイス31,32は画像データを生成する撮像部を有し、リアルタイムアプリケーションは画像認識アプリケーションである。エンドポイントデバイス31,32の例として、監視カメラやドローンが挙げられる。
【0034】
エンドポイントデバイス31,32は、無線基地局33と無線通信を行う。エンドポイントデバイス31,32は、無線基地局33を介してエッジサーバ34に周期的に画像データを送信し、エッジサーバ34から無線基地局33を介して画像認識結果を受信する。画像データの送信周期は、例えば、数十ミリ秒から数百ミリ秒程度である。画像認識結果は、例えば、画像領域の情報とその画像領域に写った物体のクラスの情報とを含む。
【0035】
無線基地局33は、エンドポイントデバイス31,32と無線通信を行い、エッジサーバ34と有線通信を行う通信装置である。無線基地局33は、エンドポイントデバイス31,32から画像データのパケットを受信し、そのパケットをエッジサーバ34に転送する。また、無線基地局33は、エッジサーバ34から画像認識結果のパケットを受信し、そのパケットをエンドポイントデバイス31,32に転送する。例えば、1枚の画像データは数十キロバイト程度であり、数パケットから数十パケット程度に相当する。
【0036】
エッジサーバ34は、リアルタイムアプリケーションを実行するサーバコンピュータである。エッジサーバ34は、クラウドサーバ35と比べて無線基地局33に近い位置にある。エッジサーバ34は、エンドポイントデバイス31,32との間でTCP(Transmission Control Protocol)コネクションを確立し、エンドポイントデバイス毎に1つのユーザスレッドを起動する。ユーザスレッドは、画像データを周期的に受信し、受信した画像データに対して画像認識を行い、画像認識結果を返信する。
【0037】
エッジサーバ34は、エンドポイントデバイス31,32よりも大きなハードウェアリソースを有しており、エンドポイントデバイス31,32が実行する場合よりも高速に画像認識を実行できる。例えば、エッジサーバ34は、GPUを用いて画像認識を高速に実行する。エッジサーバ34は、エンドポイントデバイス31,32から、初回の画像データの送信時刻とその後の画像データの送信周期とが通知される。エッジサーバ34は、初回送信時刻と送信周期から、各回の画像データの送信時刻を算出できる。ユーザスレッドは、各回の送信時刻から一定時間内に画像認識を完了することになっている。
【0038】
クラウドサーバ35は、データセンタに配置されたサーバコンピュータである。クラウドサーバ35は、エッジサーバ34と比べて無線基地局33から遠い位置にある。クラウドサーバ35も、画像認識に十分なハードウェアリソースを有している。しかし、無線基地局33とクラウドサーバ35の間の通信遅延が大きいおそれがあるため、クラウドサーバ35に代わってエッジサーバ34が画像認識を実行する。
【0039】
図3は、エンドポイントデバイスのハードウェア例を示すブロック図である。
エンドポイントデバイス31は、バスに接続されたCPU101、RAM102、不揮発性メモリ103、撮像部104および無線インタフェース105を有する。エンドポイントデバイス32も、エンドポイントデバイス31と同様のハードウェアを有する。
【0040】
CPU101は、プログラムの命令を実行するプロセッサである。CPU101は、不揮発性メモリ103に記憶されたプログラムやデータをRAM102にロードし、プログラムを実行する。エンドポイントデバイス31は、複数のプロセッサを有してもよい。
【0041】
RAM102は、CPU101で実行されるプログラムおよびCPU101で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。エンドポイントデバイス31は、RAM以外の種類の揮発性メモリを有してもよい。
【0042】
不揮発性メモリ103は、OS、ミドルウェア、アプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。不揮発性メモリ103は、ROM(Read Only Memory)でもよいし、フラッシュメモリなどの書き換え可能メモリでもよい。エンドポイントデバイス31は、HDDなどの他の種類の不揮発性ストレージを有してもよい。
【0043】
撮像部104は、画像データを生成するイメージセンサである。例えば、撮像部104は、CCD(Charge Coupled Device)イメージセンサである。撮像部104は、CPU101からの要求に応じて画像データを生成し、RAM102に画像データを格納する。
【0044】
無線インタフェース105は、無線基地局33との間で無線リンクを確立し、無線リンク上でデータを送受信する通信インタフェースである。無線インタフェース105は、画像データのパケットをRAM102から読み出して無線基地局33に送信し、画像認識結果のパケットを無線基地局33から受信してRAM102に格納する。なお、CPU101は、画像認識結果に応じてエンドポイントデバイス31の挙動を制御してもよい。
【0045】
図4は、エッジサーバのハードウェア例を示すブロック図である。
エッジサーバ34は、バスに接続されたCPU111、RAM112、HDD113、GPU114、入力インタフェース115、媒体リーダ116およびNIC117を有する。クラウドサーバ35がエッジサーバ34と同様のハードウェアを有してもよい。NIC117は、第1の実施の形態の通信インタフェース11に対応する。CPU111は、第1の実施の形態の処理部12に対応する。
【0046】
CPU111は、プログラムの命令を実行するプロセッサである。CPU111は、HDD113に記憶されたプログラムやデータをRAM112にロードし、プログラムを実行する。エッジサーバ34は、複数のプロセッサを有してもよい。
【0047】
RAM112は、CPU111で実行されるプログラムおよびCPU111で演算に使用されるデータを一時的に記憶する揮発性半導体メモリである。エッジサーバ34は、RAM以外の種類の揮発性メモリを有してもよい。
【0048】
HDD113は、OS、ミドルウェア、アプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。プログラムには、パケット受信プログラムが含まれる。エッジサーバ34は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の不揮発性ストレージを有してもよい。
【0049】
GPU114は、CPU111と連携して画像処理を行い、エッジサーバ34に接続された表示装置121に画像を出力する。表示装置121は、例えば、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ、有機EL(Electro Luminescence)ディスプレイまたはプロジェクタである。また、GPU114は、GPGPU(General Purpose Computing on Graphics Processing Unit)として使用されてもよい。GPU114は、CPU111からの指示に応じてプログラムを実行し得る。エッジサーバ34は、RAM112以外の揮発性半導体メモリをGPUメモリとして有してもよい。
【0050】
入力インタフェース115は、エッジサーバ34に接続された入力デバイス122から入力信号を受け付ける。入力デバイス122は、例えば、マウス、タッチパネルまたはキーボードである。エッジサーバ34に複数の入力デバイスが接続されてもよい。
【0051】
媒体リーダ116は、記録媒体123に記録されたプログラムおよびデータを読み取る読み取り装置である。記録媒体123は、例えば、磁気ディスク、光ディスクまたは半導体メモリである。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)およびHDDが含まれる。光ディスクには、CD(Compact Disc)およびDVD(Digital Versatile Disc)が含まれる。媒体リーダ116は、記録媒体123から読み取られたプログラムおよびデータを、RAM112やHDD113などの他の記録媒体にコピーする。読み取られたプログラムは、CPU111によって実行されることがある。
【0052】
記録媒体123は、可搬型記録媒体であってもよい。記録媒体123は、プログラムおよびデータの配布に用いられることがある。また、記録媒体123およびHDD113が、コンピュータ読み取り可能な記録媒体と呼ばれてもよい。
【0053】
NIC117は、ネットワーク30を介して無線基地局33と通信する有線通信インタフェースである。NIC117は、1以上の通信ポートを含む。NIC117は、スイッチやルータなどの有線通信装置とケーブルによって接続される。NIC117は、無線基地局33からパケットを受信する。NIC117は、NIC117の内部にある受信バッファまたはRAM112に形成された受信バッファに、受信したパケットを格納する。RAM112とNIC117との間のデータ転送は、DMAによって行われる。受信バッファは、パケットがあるか否かを示す制御フラグをもっていてもよい。
【0054】
図5は、エッジサーバで実行されるスレッドの例を示す図である。
エッジサーバ34は、リアルタイムアプリケーション131,132、非リアルタイムアプリケーション133およびオペレーティングシステム134を有する。
【0055】
リアルタイムアプリケーション131は、受け付けた画像データに対して画像認識を行うアプリケーションソフトウェアである。画像認識にはGPU114が使用されてもよい。リアルタイムアプリケーション131は、エンドポイントデバイス31からの要求に応じて、エンドポイントデバイス31のためのユーザスレッド135を起動する。また、リアルタイムアプリケーション131は、エンドポイントデバイス32からの要求に応じて、エンドポイントデバイス32のためのユーザスレッド136を起動する。
【0056】
ユーザスレッド135は、初回の画像データを受け付ける前に、初回送信時刻および送信周期がエンドポイントデバイス31から通知される。ユーザスレッド135は、この情報に基づいて、次の画像データの送信時刻を特定し、次の送信時刻に一定時間を足した時刻を次のデッドラインとして算出する。ユーザスレッド135は、このデッドラインまでに、次の画像データに対する画像認識を完了する。同様に、ユーザスレッド136は、初回送信時刻および送信周期がエンドポイントデバイス32から通知される。ユーザスレッド136は、次の送信時刻に一定時間を足した時刻を次のデッドラインとして算出し、このデッドラインまでに、次の画像データに対する画像認識を完了する。
【0057】
リアルタイムアプリケーション132は、リアルタイムアプリケーション131とは異なるデータ処理を行うアプリケーションソフトウェアである。リアルタイムアプリケーション132は、ユーザスレッド137,138を起動する。ユーザスレッド137,138には、ユーザスレッド135,136と同様にデッドラインが付与される。
【0058】
非リアルタイムアプリケーション133は、応答のリアルタイム性が要求されないアプリケーションソフトウェアである。非リアルタイムアプリケーション133は、デッドラインが付与されない1以上のスレッドを起動する。
【0059】
オペレーティングシステム134は、エッジサーバ34が有するハードウェアを管理する制御ソフトウェアである。オペレーティングシステム134は、パケット処理を行うカーネルスレッド139を起動する。カーネルスレッド139は、NIC117とユーザスレッド135,136,137,138との間でパケットを転送する。
【0060】
また、オペレーティングシステム134は、ユーザスレッド135,136,137,138およびカーネルスレッド139にCPU111のCPU時間を割り当てるスケジューリングを行う。オペレーティングシステム134は、デッドラインに応じて各スレッドの優先度を判定するデッドラインスケジューリングを行う。デッドラインが早いスレッドほど優先度が高く、デッドラインが無いスレッドの優先度はデッドラインがあるスレッドよりも低い。なお、ユーザスレッド135,136,137,138はユーザ空間で実行され、カーネルスレッド139はカーネル空間で実行される。
【0061】
NIC117で受信されたパケットは、原則的には次のようにしてユーザスレッド135,136,137,138に渡される。あるユーザスレッドがパケットを待つ場合、当該ユーザスレッドは、オペレーティングシステム134に対してパケット受信要求のシステムコールを実行する。パケット受信要求は、パケットが書き込まれるユーザ空間のメモリ領域と、受信が期待されるパケットのデータ長とを指定する。当該ユーザスレッドは、CPU時間が割り当てられない待ち状態に遷移する。
【0062】
NIC117がパケットを受信すると、NIC117は、NIC117内部のメモリにある受信バッファまたはNIC117外部のメモリ(例えば、RAM112)にある受信バッファに、受信されたパケットを書き込む。受信バッファは、受信されたパケットの有無を示す制御フラグをもつ。NIC117は、ハードウェア割り込みによって、パケットが受信されたことをCPU111に通知する。
【0063】
CPU111で実行されるオペレーティングシステム134は、ソフトウェア割り込みによってカーネルスレッド139を起動する。カーネルスレッド139は、受信バッファからパケットを読み出し、プロトコル処理を行ってパケットのヘッダを解析する。カーネルスレッド139は、ヘッダに基づいて宛先のユーザスレッドを判定し、宛先のユーザスレッドに対応するメモリ領域にパケットを書き込む。宛先のユーザスレッドは、例えば、宛先IP(Internet Protocol)アドレスと宛先ポート番号とから判定される。
【0064】
ただし、割り込み処理によって起動されたカーネルスレッド139は、デッドラインをもたない。このため、デッドラインスケジューリングの都合上、カーネルスレッド139の優先度がユーザスレッド135,136よりも低く、カーネルスレッド139のパケット処理がすぐに開始されるとは限らない。要求していた全てのパケットをユーザスレッドが受け取ると、オペレーティングシステム134は、当該ユーザスレッドの待ち状態を解除する。待ち状態が解除されたユーザスレッドは、実行可能状態に遷移し、デッドラインスケジューリングに従ってCPU時間が割り当てられる。
【0065】
なお、エッジサーバ34は、NIC117を仮想化してもよい。その場合、エッジサーバ34は、ユーザスレッド毎に仮想通信ポートおよび受信バッファを設定し、ユーザスレッド毎にカーネルスレッドを起動する。ただし、NIC117を仮想化した場合であっても、受信バッファには、ブロードキャストパケットなど特定のユーザスレッド宛てパケット以外のパケットが混入することがある。
【0066】
図6は、エンドポイントデバイスとエッジサーバとの間の通信例を示す図である。
ここでは、エンドポイントデバイス31とエッジサーバ34との間の通信の例を説明する。エンドポイントデバイス32も、エッジサーバ34との間で同様の通信を行う。
【0067】
エンドポイントデバイス31は、時刻T11に画像データ41のパケットを送信する。時刻T11は送信時刻であり、エンドポイントデバイス31にとって、画像データ41に対する処理を開始するスタート時刻である。エッジサーバ34は、時刻T12までに、無線通信ネットワークを介して画像データ41のパケットを受信する。時刻T12は、無線通信ネットワークのパケット伝送が最大限遅延した場合の受信デッドラインであり、時刻T11に理論上の最大遅延時間を足した時刻である。多くの場合、エッジサーバ34は、時刻T12より前に画像データ41のパケットを受信し終える。ただし、無線通信ネットワークの遅延時間は変動するため、実際の受信時刻は不確定である。
【0068】
エッジサーバ34は、時刻T13までに、画像データ41に対する画像認識を完了する。そして、エッジサーバ34は、画像認識結果42のパケットを送信する。時刻T13は、ユーザスレッドデッドラインであり、時刻T12に一定時間を足した時刻である。この一定時間は、カーネルスレッド139によるパケット処理の最大所要時間と、ユーザスレッド135による画像認識の最大所要時間とを含む。よって、時刻T13は、送信時刻に、無線通信ネットワークの最大遅延時間とパケット処理の最大所要時間と画像認識の最大所要時間とを足した時刻である。パケット処理および画像認識の最大所要時間は、エッジサーバ34を運用する事業者によって事前に見積もられる。
【0069】
エンドポイントデバイス31は、時刻T14までに画像認識結果42のパケットを受信する。時刻T14は、エンドポイントデバイス31にとって、画像データ41に対する処理を完了すべきエンドポイントデッドラインである。時刻T14は、時刻T13に、無線通信ネットワークの理論上の最大遅延時間を足した時刻である。よって、時刻T14は、送信時刻に、無線通信ネットワークの往復分の最大遅延時間と、エッジサーバ34におけるパケット処理および画像認識の最大所要時間とを足した時刻である。時刻T11から時刻T14までの最大待ち時間は、エンドポイントデバイス31を使用するユーザとエッジサーバ34を運用する事業者との間の契約で事前に決定される。
【0070】
同様にして、エンドポイントデバイス31は、時刻T21に画像データ43のパケットを送信する。時刻T21は、時刻T11に一周期分の時間を足した次の送信時刻である。エッジサーバ34は、時刻T22までに画像データ43のパケットを受信する。時刻T22は、時刻T21に対応する受信デッドラインである。エッジサーバ34は、時刻T23までに画像認識を完了し、画像認識結果44のパケットを送信する。時刻T23は、時刻T21に対応するユーザスレッドデッドラインである。エンドポイントデバイス31は、時刻T24までに画像認識結果44のパケットを受信する。時刻T24は、時刻T21に対応するエンドポイントデッドラインである。
【0071】
また、エンドポイントデバイス31は、時刻T31に画像データ45のパケットを送信する。時刻T31は、時刻T21に一周期分の時間を足した次の送信時刻である。エッジサーバ34は、時刻T32までに画像データ45のパケットを受信する。時刻T32は、時刻T31に対応する受信デッドラインである。エッジサーバ34は、時刻T33までに画像認識を完了し、画像認識結果46のパケットを送信する。時刻T33は、時刻T31に対応するユーザスレッドデッドラインである。エンドポイントデバイス31は、時刻T34までに画像認識結果46のパケットを受信する。時刻T34は、時刻T31に対応するエンドポイントデッドラインである。
【0072】
図7は、スレッドの実行開始時刻の例を示す図である。
ここでは、ユーザスレッド135,136が併存している場合における、エッジサーバ34から見たデッドライン管理について説明する。
【0073】
エンドポイントデバイス32は、時刻T51に画像データのパケットを送信する。NIC117にパケットが到着すると、エッジサーバ34はカーネルスレッド139を起動する。カーネルスレッド139は、時刻T52に処理を開始する。カーネルスレッド139の処理が終了した後、ユーザスレッド136は時刻T53に処理を開始する。時刻T51に対応するユーザスレッドデッドラインは時刻T54である。時刻T53以降、ユーザスレッド136は時刻T54に応じた優先度で実行される。なお、
図7において時刻T51より下の処理はエッジサーバ34の処理である。
【0074】
一方、エンドポイントデバイス31は、時刻T41に画像データのパケットを送信する。NIC117にパケットが到着すると、エッジサーバ34はカーネルスレッド139を起動する。カーネルスレッド139は時刻T42に処理を開始する。カーネルスレッド139の処理が終了した後、ユーザスレッド135は時刻T43に処理を開始する。時刻T41に対応するユーザスレッドデッドラインは時刻T44である。時刻T43以降、ユーザスレッド135は時刻T44に応じた優先度で実行される。なお、
図7において時刻T41より下の処理はエッジサーバ34の処理である。
【0075】
ここで、時刻T41は時刻T51よりも早く、時刻T44は時刻T54より早い。しかし、エンドポイントデバイス31のパケットに対する無線通信ネットワークの伝送遅延が、エンドポイントデバイス32よりも大きい。そのため、エンドポイントデバイス31のパケットは、エンドポイントデバイス32よりも後にNIC117に到着している。
【0076】
エンドポイントデバイス31のパケットがNIC117に到着しても、割り込み処理によってカーネルスレッド139を起動するオーバヘッドがあるため、すぐにカーネルスレッド139の処理が始まるわけではない。また、時刻T42では、デッドラインが付与されたユーザスレッド136が実行中である。カーネルスレッド139にはデッドラインが付与されていないため、カーネルスレッド139の優先度がユーザスレッド136よりも低く、カーネルスレッド139の処理が遅延するおそれがある。その結果、時刻T43が遅くなり、時刻T43から時刻T44までの猶予時間が短くなる。
【0077】
エンドポイントデバイス31のパケットの通信遅延が大きい場合であっても、エッジサーバ34は、パケットがNIC117に到着してからユーザスレッド135が処理を開始するまでのパケット処理時間を短縮できれば、通信遅延の影響を軽減できる。これにより、画像認識の猶予時間が長くなり、スレッドスケジューリングの負担が軽減される。また、エッジサーバ34を運用する事業者は、ユーザに対してより短い最大待ち時間を約束することが可能となり、リアルタイムアプリケーションの価値が向上する。そこで、第2の実施の形態のエッジサーバ34は、以下のような方法でパケット処理時間を短縮する。
【0078】
エンドポイントデバイス31は、時刻T61に画像データのパケットを送信する。エッジサーバ34は、ユーザスレッド135が待ち状態に遷移する際に、ポーリング起動時刻を設定しておく。時刻T62はポーリング起動時刻である。エッジサーバ34は、時刻T62の時点で未受信のパケットがある場合、カーネルスレッド139を起動する。時刻T62では、カーネルスレッド139に制御が渡され、カーネルスレッド139がポーリングを開始する。
【0079】
ここで起動されたカーネルスレッド139は、NIC117の受信バッファを反復的に確認するポーリングを実行する。例えば、カーネルスレッド139は、受信されたパケットの有無を示す制御フラグを反復的に確認する。ポーリングは、例えば、1マイクロ秒未満の十分に短い周期で行われる。また、このカーネルスレッド139は、ユーザスレッド135に付与されたデッドラインを引き継ぐ。時刻T65は、時刻T61に対応するユーザスレッドデッドラインである。よって、エッジサーバ34は、時刻T65に応じた優先度でカーネルスレッド139を実行する。
【0080】
カーネルスレッド139は、NIC117にパケットが到着したことを時刻T63に検出する。すると、カーネルスレッド139は、割り込み処理によるスレッド切替のオーバヘッドなしで、受信されたパケットに対する処理を開始する。ポーリングは十分に短い周期で行われるため、パケット到着後すぐにパケット処理が開始される。カーネルスレッド139の処理が終了した後、ユーザスレッド135は時刻T64に処理を開始する。カーネルスレッド139は、時刻T65に応じた優先度をもつため、時刻T54に応じた優先度をもつユーザスレッド136よりも優先的に実行される。その結果、時刻T63から時刻T64までのパケット処理時間が短縮される。なお、
図7において時刻T61より下の処理はエッジサーバ34の処理である。
【0081】
ここで、ポーリングはエッジサーバ34の負荷を高くするおそれがあるため、エッジサーバ34は、ポーリング起動時刻を早くし過ぎないことが好ましい。第2の実施の形態では、エッジサーバ34は、ユーザスレッド135が要求するパケットが受信デッドラインの直前にまとめて受信される場合を想定して、ポーリング起動時刻を決定する。これは、無線通信ネットワークが最大限遅延した場合に相当する。以下、ポーリング起動時刻の算出方法の具体例について説明する。
【0082】
エッジサーバ34は、NIC117に到着したパケットのパケット受信履歴を継続的に記録する。パケット受信履歴は、例えば、直近数千パケット分のレコードを含む。各レコードは、パケットの受信時刻と宛先スレッドとを対応付ける。エッジサーバ34は、パケット受信履歴から平均受信間隔および混入率を算出する。平均受信間隔は、隣接するパケットの受信時刻差の平均である。平均受信間隔は、例えば、10マイクロ秒である。混入率は、全パケットに対するユーザスレッド135宛て以外のパケットの割合である。受信バッファが仮想化されている場合の混入率は、例えば、20%である。
【0083】
エッジサーバ34は、ユーザスレッド135が待ち状態に遷移する際、ユーザスレッド135の待ちパケット数Nを特定する。エッジサーバ34は、待ちパケット数Nおよび混入率から期待受信パケット数N’を算出する。期待受信パケット数N’は、ユーザスレッド135宛て以外のパケットも含めて、ユーザスレッド135の待ちパケットが全て揃うまでに受信されるパケットの個数の推定値である。混入率が20%である場合、N’=N÷(1-0.2)=1.25Nである。
【0084】
エッジサーバ34は、期待受信パケット数N’および平均受信間隔から、期待受信時間Tを算出する。期待受信時間Tは、N’個のパケットを受信するための通信時間の推定値である。平均受信間隔が10マイクロ秒である場合、T=10N’=12.5Nである。エッジサーバ34は、今回の受信デッドラインDと、カーネルスレッド139を起動するためのオーバヘッドであるスレッド起動時間αと、期待受信時間Tとから、ポーリング起動時刻を算出する。ポーリング起動時刻は、例えば、D-(T+α)である。ただし、D-(T+α)より一定時間だけ早い時刻をポーリング起動時刻としてもよい。
【0085】
なお、エッジサーバ34は、平均受信間隔および混入率を、ポーリング起動時刻を決定する毎に最新のパケット受信履歴から算出してもよい。また、エッジサーバ34は、平均受信間隔および混入率を、定期的にパケット受信履歴から算出して保存してもよい。その場合、ポーリング起動時刻の決定には、直近の平均受信間隔および混入率が使用される。
【0086】
次に、エッジサーバ34の機能および処理手順について説明する。
図8は、エッジサーバの機能例を示すブロック図である。
エッジサーバ34は、パケット処理部141、受信履歴管理部142、割り込み部143、ポーリング部144、ポーリング制御部145およびスケジューラ146を有する。これらの処理部は、カーネル空間で実行されるプログラムに対応する。
【0087】
パケット処理部141は、カーネルスレッドの中で実行される。パケット処理部141は、NIC117の内部または外部にある受信バッファからパケットを読み出し、プロトコル処理を行ってパケットのヘッダを解析する。パケット処理部141は、ヘッダに基づいて宛先のユーザスレッドを判定し、ユーザ空間のメモリ領域にパケットを書き込む。
【0088】
受信履歴管理部142は、パケット処理部141によって処理されたパケットの受信履歴を管理する。受信履歴管理部142は、RAM112のカーネル空間のメモリ領域に受信履歴データを保存する。受信履歴管理部142は、パケット処理部141がパケットを1つ処理する毎に、受信時刻および宛先を示すレコードを受信履歴データに追加し、受信履歴データから古いレコードを1つ削除する。
【0089】
割り込み部143は、NIC117からのハードウェア割り込みを受けて実行される割り込みハンドラである。割り込み部143は、NIC117でパケットが受信されると、割り込み処理によってカーネルスレッドを起動する。ここで起動されるカーネルスレッドでは、パケット処理部141の処理が実行される。ただし、ポーリングのためにカーネルスレッドが実行中である場合、割り込み処理は行われない。割り込み処理によって起動されるカーネルスレッドには、デッドラインは付与されない。
【0090】
ポーリング部144は、パケット処理部141と同一のカーネルスレッドの中で実行される。ポーリング部144は、NIC117の内部または外部にある受信バッファの制御フラグを一定周期で反復的に確認する。パケットが受信されたことを検出すると、ポーリング部144は、パケット処理部141を呼び出す。パケット処理部141は、ポーリング部144と同一のカーネルスレッド内でパケット処理を開始する。ポーリング部144は、ユーザスレッドのパケットが全て揃うとポーリングを停止する。
【0091】
ポーリング制御部145は、ポーリング部144のポーリングの開始および終了を制御する。ポーリング制御部145は、デッドラインが付与されたユーザスレッドが待ち状態に遷移する際、ポーリング起動時刻を決定し、ポーリング起動時刻になるとカーネルスレッドが起動してポーリングが開始されるようにタイマを設定する。ポーリング制御部145は、カーネルスレッドにユーザスレッドと同じデッドラインを付与する。
【0092】
ポーリング起動時刻を決定するために、ポーリング制御部145は、受信履歴管理部142がもつ受信履歴データを参照し、平均受信間隔や混入率などのパラメータ値を算出する。ポーリング起動時刻の前に、ユーザスレッドが待つパケットのうち一部のパケットが受信された場合、ポーリング制御部145は、残りパケット数に応じてポーリング起動時刻を更新する。また、ポーリング起動時刻の前に、ユーザスレッドが待つ全てのパケットが受信された場合、ポーリング制御部145は、ポーリング起動時刻を削除する。
【0093】
スケジューラ146は、デッドラインに基づいてスレッドの優先度を決定するデッドラインスケジューリングを行う。スケジューラ146は、エンドポイントデバイス31,32に対応するユーザスレッド135,136や、割り込み処理またはポーリング起動処理によって起動されたカーネルスレッドのスケジューリングを行う。
【0094】
図9は、受信履歴テーブルの例を示す図である。
受信履歴テーブル151は、RAM112に記憶される。受信履歴テーブル151は、受信時刻および宛先をそれぞれ含む複数のレコードを記憶する。受信時刻は、マイクロ秒以下の微小時間を区別できるタイムスタンプである。受信時刻として、CPUのクロック毎にカウントアップするCPUカウンタの値が使用されてもよい。宛先は、ユーザスレッドを識別する。宛先として、スレッドIDまたはポート番号が使用されてもよい。
【0095】
図10は、スレッド管理テーブルの例を示す図である。
スレッド管理テーブル152は、RAM112に記憶される。スレッド管理テーブル152は、スレッドID、スレッドデッドライン、待ちパケット数およびポーリング起動時刻を対応付けて記憶する。スレッドIDは、ユーザスレッドを識別する。スレッドデッドラインは、次の画像データに対する画像認識のデッドラインである。初回のスレッドデッドラインは、エンドポイントデバイスから通知された初回送信時刻に基づいて算出される。ある画像データに対する画像認識が完了すると、エンドポイントデバイスから通知された送信周期だけスレッドデッドラインが増加する。
【0096】
待ちパケット数は、ユーザスレッドが待っているパケットの残り個数である。一部のパケットが受信されると待ちパケット数が減少する。ポーリング起動時刻は、ポーリング用のカーネルスレッドを起動すべき時刻である。ポーリング起動時刻の前に一部のパケットが受信されると、ポーリング起動時刻が遅くなる。スレッドデッドラインおよびポーリング起動時刻として、CPU111がもつカウンタ値が使用されてもよい。
【0097】
図11は、受信待ち設定の手順例を示すフローチャートである。
(S10)オペレーティングシステム134は、ユーザスレッドから、ユーザ空間のメモリ領域のアドレスとデータ長とを含むパケット受信要求を受け付ける。
【0098】
(S11)ポーリング制御部145は、パケット受信要求の要求元のユーザスレッドは、デッドラインが付与されたユーザスレッドであるか判断する。デッドラインが付与されたユーザスレッドである場合、ステップS12に処理が進む。デッドラインが付与されていないユーザスレッドである場合、ステップS14に処理が進む。
【0099】
(S12)ポーリング制御部145は、ポーリング起動時刻を算出する。このとき、ポーリング制御部145は、デッドラインに対応する送信時刻と無線通信ネットワークの最大遅延時間とから、受信デッドラインDを算出する。ポーリング制御部145は、受信履歴データから算出される平均受信間隔および混入率と、待ちパケット数Nと、スレッド起動時間αと、受信デッドラインDとから、ポーリング起動時刻を算出する。
【0100】
(S13)ポーリング制御部145は、ステップS12で算出されたポーリング起動時刻にカーネルスレッドを起動するタイマを設定する。
(S14)スケジューラ146は、要求元のユーザスレッドを待ち状態に遷移させる。
【0101】
図12は、割り込み受信の手順例を示すフローチャートである。
(S20)割り込み部143は、NIC117にパケットが到着したことを検出する。
(S21)割り込み部143は、割り込み処理によってカーネルスレッドを起動する。このカーネルスレッドには、デッドラインは付与されない。
【0102】
(S22)パケット処理部141は、受信バッファからパケットを読み出してヘッダを解析し、宛先のユーザスレッドを判定する。パケット処理部141は、宛先のユーザスレッドに対応するユーザ空間のメモリ領域にパケットを書き込む。
【0103】
(S23)ポーリング制御部145は、パケットの宛先はデッドラインが付与されたユーザスレッドであるか判断する。デッドラインが付与されたユーザスレッドである場合、ステップS24に処理が進む。それ以外の場合、ステップS27に処理が進む。
【0104】
(S24)ポーリング制御部145は、宛先のユーザスレッドが待つ全てのパケットの受信が完了したか判断する。全てのパケットの受信が完了した場合、ステップS25に処理が進む。未受信のパケットがある場合、ステップS26に処理が進む。
【0105】
(S25)ポーリング制御部145は、ポーリング起動時刻を削除する。これにより、タイマが停止される。そして、ステップS27に処理が進む。
(S26)ポーリング制御部145は、宛先のユーザスレッドの残りパケット数に基づいて、ポーリング起動時刻を更新する。
【0106】
(S27)受信履歴管理部142は、パケット受信履歴に、今回受信されたパケットの受信時刻および宛先を示すレコードを追加する。
(S28)パケット処理部141は、宛先のユーザスレッドが待つ全てのパケットの受信が完了したか判断する。全てのパケットの受信が完了した場合、ステップS29に処理が進む。未受信のパケットがある場合、割り込み受信が終了する。
【0107】
(S29)スケジューラ146は、宛先のユーザスレッドの待ち状態を解除する。なお、受信バッファに2以上のパケットが格納されている場合、パケット毎にステップS22~S29の処理が実行される。
【0108】
図13は、ポーリング受信の手順例を示すフローチャートである。
(S30)ポーリング制御部145は、ポーリング起動時刻の到来を検出する。
(S31)ポーリング制御部145は、カーネルスレッドが起動されていない場合はカーネルスレッドを起動する。ポーリング制御部145は、カーネルスレッドに、パケット受信要求の要求元のユーザスレッドと同じデッドラインを付与して制御を渡す。
【0109】
(S32)ポーリング部144は、NIC117にパケットが到着したか否か確認するポーリングを開始する。ポーリングは、例えば、NIC117の内部または外部のメモリから、パケットの有無を示す制御フラグを反復的に読み出すことによって行われる。
【0110】
(S33)ポーリング部144は、NIC117にパケットが到着したか判断する。NIC117にパケットが到着した場合、ステップS34に処理が進む。NIC117にパケットが到着していない場合、ステップS33が再び実行される。
【0111】
(S34)パケット処理部141は、受信バッファからパケットを読み出してヘッダを解析し、宛先のユーザスレッドを判定する。パケット処理部141は、宛先のユーザスレッドに対応するユーザ空間のメモリ領域にパケットを書き込む。
【0112】
(S35)受信履歴管理部142は、パケット受信履歴に、今回受信されたパケットの受信時刻および宛先を示すレコードを追加する。
(S36)パケット処理部141は、要求元のユーザスレッドが待つ全てのパケットの受信が完了したか判断する。全てのパケットの受信が完了した場合、ステップS37に処理が進む。未受信のパケットがある場合、ステップS33に処理が戻る。
【0113】
(S37)ポーリング部144は、ポーリングを停止する。スケジューラ146は、要求元のユーザスレッドの待ち状態を解除する。
以上説明したように、第2の実施の形態のエッジサーバ34は、ユーザスレッドにデッドラインを付与し、デッドラインが早いユーザスレッドの優先度を高くするデッドラインスケジューリングを行う。これにより、エンドポイントデバイスがデータを生成してから一定時間内にデータ処理が完了し、リアルタイムアプリケーションの価値が向上する。
【0114】
また、ネットワークの通信遅延が大きくなった場合、エッジサーバ34は、パケットの到着前にカーネルスレッドを起動してポーリングを開始し、パケットの到着後すぐに同一のカーネルスレッドを用いてパケット処理を行う。これにより、パケットが到着してから割り込み処理によってカーネルスレッドを起動する場合と比べて、パケットの到着後のオーバヘッドが削減され、ユーザスレッドの処理開始が早くなる。
【0115】
また、ポーリングを行うカーネルスレッドは、ユーザスレッドのデッドラインを引き継ぐ。これにより、デッドラインが付与された他のユーザスレッドとカーネルスレッドとが妥当な優先度でスケジューリングされ、カーネルスレッドにおけるパケット処理の遅延が抑制される。その結果、ネットワークの通信遅延が大きくなった場合におけるユーザスレッドのデータ処理開始の遅延が軽減され、十分なデータ処理時間が確保される。また、エッジサーバ34を運用する事業者は、エンドポイントデバイスのユーザに対して約束するデッドラインを早めることが可能となる。
【0116】
また、エッジサーバ34は、エンドポイントデバイスの今回のデータ送信時刻と無線通信ネットワークの最大遅延時間とから、ポーリング起動時刻を決定する。また、エッジサーバ34は、カーネルスレッドの所要起動時間を考慮してポーリング起動時刻を調整する。また、エッジサーバ34は、パケット受信履歴から平均受信間隔および混入率を算出し、ユーザスレッドが待つパケットの所要受信時間を推定し、所要受信時間を考慮してポーリング起動時刻を調整する。また、エッジサーバ34は、一部のパケットがポーリング起動時刻の前に受信された場合、ポーリング起動時刻を変更する。これにより、ポーリングがパケット到着直前の適切なタイミングで開始されることが期待される。よって、ポーリング時間が無駄に長くなることが抑制され、エッジサーバ34の負荷が抑制される。
【符号の説明】
【0117】
10 情報処理装置
11 通信インタフェース
12 処理部
13 ユーザスレッド
14 カーネルスレッド
15 パケット
16 デッドライン
17 基準時刻