(58)【調査した分野】(Int.Cl.,DB名)
前記割当部は、前記要求量を表す情報の送信用に帯域を割り当て、前記要求量を表す情報の送信用に割り当てられずに残った帯域を第1加入者線終端装置の上りデータの送信用に割り当て、第1加入者線終端装置の上りデータの送信用に割り当てられずに残った帯域を第2加入者線終端装置の上りデータの送信用に割り当て、第2加入者線終端装置の上りデータの送信用に割り当てられずに残った帯域を第1加入者線終端装置の上りデータの送信用に割り当てる、請求項1に記載の帯域割当装置。
前記割当部は、予め定められた最小データ量を表す情報と予め定められた最大データ量を表す情報とを取得し、前記要求量が前記最小データ量未満である場合、第2加入者線終端装置の上りデータの送信用に前記最小データ量の帯域を割り当て、前記要求量が前記最大データ量を超えている場合、第2加入者線終端装置の上りデータの送信用に前記最大データ量の帯域を割り当てる、請求項1又は請求項2に記載の帯域割当装置。
前記割当部は、第2加入者線終端装置ごとに定められた重み係数と、前記要求量を表す情報とに基づいて、前記要求量のデータ量の帯域を上限として、第2加入者線終端装置の上りデータの送信用に帯域を割り当てる、請求項1から請求項3のいずれか一項に記載の帯域割当装置。
前記割り当てるステップでは、前記要求量を表す情報の送信用に帯域を割り当て、前記要求量を表す情報の送信用に割り当てられずに残った帯域を第1加入者線終端装置の上りデータの送信用に割り当て、第1加入者線終端装置の上りデータの送信用に割り当てられずに残った帯域を第2加入者線終端装置の上りデータの送信用に割り当て、第2加入者線終端装置の上りデータの送信用に割り当てられずに残った帯域を第1加入者線終端装置の上りデータの送信用に割り当てる、請求項5に記載の帯域割当方法。
前記割り当てるステップは、予め定められた最小データ量を表す情報と予め定められた最大データ量を表す情報とを取得し、前記要求量が前記最小データ量未満である場合、第2加入者線終端装置の上りデータの送信用に前記最小データ量の帯域を割り当て、前記要求量が前記最大データ量を超えている場合、第2加入者線終端装置の上りデータの送信用に前記最大データ量の帯域を割り当てる、請求項5又は請求項6に記載の帯域割当方法。
【発明を実施するための形態】
【0031】
本発明の実施形態について、図面を参照して詳細に説明する。
(第1実施形態)
図1は、光通信システム1の構成例を示す図である。光通信システム1は、光信号を用いて通信するシステムである。光通信システム1は、上位装置2と、上位装置3と、L2SW4と、OLT5と、1以上のONU6と、1以上のONU7と、1以上の下位装置8と、1以上の下位装置9とを備える。
【0032】
上位装置2は、OLT5に対して上位のLLS用の装置である。上位装置2は、LLS用の下位装置8のスケジューリング情報をOLT5に送信する。上位装置2は、LLS用のONU6が送信した上りデータを、L2SW4を介してOLT5から受信する。
【0033】
上位装置3は、OLT5に対して上位のHLS用の装置である。上位装置3は、HLS用のONU7が上り送信した上りデータを、L2SW4を介してOLT5から受信する。
【0034】
L2SW4は、レイヤ2スイッチである。L2SW4は、上位装置2及びOLT5の間でデータを中継する。L2SW4は、上位装置3及びOLT5の間でデータを中継する。
【0035】
OLT5は、端局装置である。OLT5は、上り送信に関する制御を実行する。OLT5は、連携DBA用割当を実行することによって、LLS用のONU6の上りデータの帯域をONU6に割り当てる。OLT5は、SR−DBA用割当を実行することによって、HLS用のONU7の上りデータの帯域をONU7に割り当てる。
【0036】
ONU6は、LLS用の加入者線終端装置である。ONU6は、下位装置8から受信した上りデータを、OLT5から通知される割当量に基づいて送信する。ONU6の上りデータは、低遅延で転送される必要がある。
【0037】
ONU7は、HLS用の加入者線終端装置である。ONU7は、下位装置9から受信した上りデータを、OLT5から通知される割当量に基づいて送信する。ONU7の上りデータは、低遅延で転送される必要はない。
【0038】
下位装置8は、OLT5に対して下位のLLS用の装置である。下位装置8は、ユーザ端末(不図示)との無線通信を実行する。下位装置8は、ユーザ端末から受信したモバイルデータを、上りデータとしてONU6に送信する。下位装置8の上りデータは、低遅延で転送される必要がある。
【0039】
下位装置9は、OLT5に対して下位のHLS用の装置である。下位装置9は、ユーザ端末(不図示)との無線通信を実行する。下位装置8は、ユーザ端末から受信したモバイルデータを、上りデータとしてONU7に送信する。下位装置9の上りデータは、低遅延で転送される必要はない。
【0040】
次に、OLT5の構成の詳細を説明する。
OLT5は、連携処理部50と、通信部51と、要求量受信部52と、ONU管理部53と、割当部54とを備える。
【0041】
各機能部は、CPU(Central Processing Unit)等のプロセッサが、記憶部に記憶されたプログラムを実行することにより実現される。各機能部は、LSI(Large Scale Integration)やASIC(Application Specific Integrated Circuit)等のハードウェアを用いて実現されてもよい。
【0042】
連携処理部50は、スケジューリング情報を上位装置2から取得する取得部である。連携処理部50は、LLS用の下位装置8に対する、上りデータ受信時刻及び上りデータ量を表す情報を、無線送信周期ごとにスケジューリング情報から抽出する。
【0043】
通信部51は、上りデータの送信に関する要求量の通知を要求する指示を、ONU7に送信する。通信部51は、ONU7の上りデータの送信に関する要求量を表す情報を、ONU7から受信する。通信部51は、ONU7の上りデータの送信に関する要求量を表す情報を、要求量受信部52に出力する。
【0044】
なお、通信部51は、ONU6の上りデータの送信に関する要求量を表す情報を、ONU6から受信してもよい。
【0045】
通信部51は、割当部54によって割り当てられた上りデータの割当量を、例えば割当量算出サイクル(割当量決定サイクル)ごとに、ONU6及びONU7に通知する。すなわち、通信部51は、ONU6の上りデータの割当量を表す情報を、例えば割当量算出サイクルごとに、ONU6に送信する。通信部51は、ONU7の上りデータの割当量を表す情報を、例えば割当量算出サイクルごとに、ONU7に送信する。
【0046】
通信部51は、ONU6から取得された上りデータを、L2SW4を介して上位装置2に送信する。通信部51は、ONU7から取得された上りデータを、L2SW4を介して上位装置3に送信する。
【0047】
要求量受信部52は、上りデータの送信に関する要求量を表す情報を、通信部51から取得する。要求量受信部52は、上りデータの送信に関する要求量を表す情報を、ONUごと記憶する。要求量受信部52は、上りデータの送信に関する要求量を表す情報を通信部51から新たに取得した場合、その上りデータの送信に関する要求量を表す情報を、ONUごとに更新する。要求量受信部52は、割当部54から指定されたONUの上りデータの送信に関する要求量を表す情報を、割当部54に出力する。
【0048】
ONU管理部53は、例えばフラッシュメモリ、HDD(Hard Disk Drive)などの不揮発性の記録媒体(非一時的な記録媒体)を有する。ONU管理部53は、例えば、RAM(Random Access Memory)やレジスタなどの揮発性の記録媒体を有してもよい。
【0049】
ONU管理部53は、例えば、プログラム及びデータテーブルを記憶する。データテーブルでは、OLT5に接続することが可能であるONUの固有識別子と、ONUがLLS用のONUであるか否かを表す設定値(ONU_TYPE)と、論理リンク識別子とが対応づけられている。固有識別子と設定値(ONU_TYPE)とは、外部装置等によってデータテーブルに予め記録される。論理リンク識別子は、OLTとONUとの接続が確立された場合に、そのONUに一意に付与される。
【0050】
なお、OLTに接続された際にONUに付与される論理リンク識別子がONU固有の識別子として扱える場合には、データテーブルでは、固有識別子が記録されずに、論理リンク識別子と設定値(ONU_TYPE)とが記録されていてもよい。
【0051】
ONU管理部53は、OLT5に接続済みであるONUの数を計測する。ONU管理部53は、OLT5に接続済みであるONUの数を、割当部54に通知する。ONU管理部53は、論理リンク識別子を割当部54から通知された場合、通知された論理リンク識別子に対応付けられた設定値(ONU_TYPE)を、データテーブルから読み出して通知する。
【0052】
割当部54は、LLS用のONU6の上りデータの送信に関する要求量を表す情報(上りデータ受信時刻及び上りデータ量から成る情報)を、所定の割当量算出サイクルごとに、連携処理部50から取得する。割当部54は、HLS用のONU7の上りデータの送信に関する要求量を表す情報(バッファ蓄積データ量を表す情報)を、所定の割当量算出サイクルごとに、要求量受信部52から取得する。
【0053】
割当部54は、LLS用のONU6の上りデータの送信に関する要求量を表す情報に基づいて、ONU6の上りデータの割当量を決定する。割当部54は、HLS用のONU7の上りデータの送信に関する要求量を表す情報に基づいて、ONU7の上りデータの割当量を決定する。割当部54は、決定された割当量を表す情報を、通信部51に出力する。
【0054】
上りデータの割当量をONUごとに決定する処理では、HLS用のONU7の上りデータの送信に関する要求量を通知するためのデータ量の割当(要求量通知用割当)以外に関して、割当部54は、LLS用のONU6の上りデータの帯域の割当(連携DBA用割当)を、HLS用のONU7の上りデータの帯域の割当(SR−DBA用割当)よりも優先して実行する。
【0055】
例えば、割当部54は、LLS用の全てのONU6の上りデータの送信に関する要求量が0である期間において、HLS用のONU7の上りデータの送信に関する要求量に基づいて、HLS用のONU7の上りデータの帯域の割当(SR−DBA用割当)を実行する。LLS用のONU6の上りデータの送信に関する要求量とHLS用のONU7の上りデータの送信に関する要求量とがいずれも0である場合には、割当部54は、LLS用のONU6の上りデータの帯域を、LLS用のONU6に対して均等に割り当てる。
【0056】
HLS用のONU7の上りデータの送信に関する要求量を通知するためのデータ量の割当(要求量通知用割当)の割当サイクル番号は、事前に決定される番号である。要求量通知用割当の割当サイクル番号は、式(1)のように表される番号である。
【0058】
図2は、従来におけるSR−DBA処理と、割当部54が実行するSR−DBA処理の例との比較を示す図である。
図2の上段は、従来におけるSR−DBA処理を表す。
図2の下段は、割当部54が実行するSR−DBA処理を表す。
【0059】
従来におけるSR−DBA処理では、OLTは、OLTに接続されている全てのONUから要求量を受信した後で、上りデータの割当量の算出を開始する。したがって、OLTは、要求量受信処理と割当量算出処理とを、同一のDBAサイクル内で実行する。従来におけるSR−DBA処理では、OLTは、要求量受信処理の完了を割当量算出処理の起動トリガとする。
【0060】
これに対して、割当部54が実行するSR−DBA処理では、割当部54は、要求量受信処理と割当量算出処理とを、互いに異なるDBAサイクル内で実行する。すなわち、割当部54は、要求量受信サイクルと割当量算出サイクルとを分離して、要求量受信サイクルと割当量算出サイクルとを実行する。
【0061】
要求量受信処理の周期(要求量受信サイクル)である仮想DBAサイクルの時間長は、従来におけるSR−DBA処理のDBAサイクル長と同一である。割当量算出処理の周期(割当量算出サイクル)の時間長は、連携DBAのDBAサイクルの時間長と同一である。このように、割当部54は、SR−DBAの割当量算出サイクルのみを連携DBAのサイクルと同一のサイクルで実行することによって、連携DBAとSR−DBAとを融合する。
【0062】
割当量算出処理では、割当部54は、割当開始時刻(割当量算出サイクルの先頭時刻)と要求量受信完了時刻とを、割当量算出サイクル(実DBAサイクル)ごとに比較する。割当部54は、要求量受信完了時刻よりも割当開始時刻が大きい場合(割当開始時刻が要求量受信完了時刻よりも後である場合)、上りデータの送信に関する要求量を表す情報を取得する。割当部54は、上りデータの送信に関する要求量を表す情報に基づいて、上りデータの割当量を算出する。
【0063】
割当量算出サイクルの時間長が連携DBAのDBAサイクルの時間長と同一であることによって、従来におけるDBAサイクルよりも割当量算出サイクル(実DBAサイクル)が短くなるので、割当部54は、同一の割当量算出サイクルでは帯域を割り当て切れない場合がある。このため、割当部54は、割当量算出処理では、割り当て切れなかった帯域の上りデータ量の情報を保持し、次の割当量算出サイクルにおける上りデータの送信に関する要求量として、上りデータ量を繰り越す。
【0064】
図3は、DBA処理のタイミングの例を示す図である。要求量受信部52は、要求量受信100処理を実行する。要求量受信100の完了時刻以降の割当量算出サイクルの先頭時刻から、要求量受信サイクルの末尾時刻から最大RTTだけ前の時刻までの期間において、割当部54は、連携DBA用割当101によってONU6に割り当てられていない帯域(残余帯域)の有無に関係なく、HLS用のONU7の要求量通知用の割り当て(要求量通知用割当102)を実行する。
【0065】
図3では、割当部54は、同一の割当量算出サイクルにおいて、連携DBA用割当101とSR−DBA用割当103とを実行する。要求量受信サイクルにおいて、割当部54は、要求量通知用割当102によって割り当てられた帯域以外の帯域であって、連携DBA用割当101によってONU6に割り当てられていない帯域(残余帯域)を、SR−DBA用割当103によってONU7に割り当てる。
【0066】
割当部54は、連携DBA用割当101とSR−DBA用割当103との両方で余った帯域を、更なる連携DBA用割当によってLLS用のONU6に割り当てる。連携DBA用割当101とSR−DBA用割当103との両方で余った帯域をLLS用のONU6に割り当てる理由は、連携DBAがSR−DBAよりも低遅延性が求められるからである。
【0067】
図4は、要求量を表す情報を連携処理部50から読み出す時刻の例を示す図である。要求量を連携処理部50から読み出す時刻「ReadTime」は、割当対象とする期間の末尾時刻(割当量算出サイクルの末尾時刻)から、割当サイクル長を減算した結果の時刻(割当サイクル長だけ前の時刻)を表す変数である。
【0068】
割当部54が上りデータの割当対象とする期間の最小単位(以下「割当サイクル」という。)の時間長(以下「割当サイクル長」という。)は、予め定められる。割当サイクルにおいてLLS用のONU6に下位装置8から到着し得る上りデータの上りデータ量の最小値(以下「最小到着量」という。)は、予め定められる。
【0069】
割当サイクル長は、割当量算出サイクルが複数に分割された時間長である。割当量算出サイクルの時間長は、下位装置8の無線送信周期(上位装置2及び下位装置8の間で規定される上り送信スケジューリング周期以下の周期)の時間長と同一である。分割数は、LLS用のONU6の上りデータの割当サイクルの数(以下「LLS割当サイクル数」という。)である。
【0070】
以下、割当サイクル長で要求量受信サイクルを除算して得られる整数を、「HLS割当サイクル数」という。連携DBAのDBAサイクルの時間長は、「割当サイクル長×LLS割当サイクル数」と同値である。SR−DBAのDBAサイクルの時間長は、「割当サイクル長×HLS割当サイクル数」と同値である。
【0071】
次に、光通信システム1の動作を説明する。
図5は、割当量の算出手順の例を示すフローチャートである。割当部54は、
図5に示されたフローチャートの動作を、割当量算出サイクルごとに実行する。
【0072】
割当部54は、LLS用のONU6の上りデータの送信に関する要求量を表す情報(上りデータ受信時刻及び上りデータ量)を、連携処理部50から取得する。割当部54は、HLS用のONU7の上りデータの送信に関する要求量を表す情報を、要求量受信部52から取得する(ステップS101)。
【0073】
要求量受信部52及び割当部54は、上りデータの送信に関する要求量(RequestSize)を表す情報を更新する(ステップS102)。割当部54は、上り送信を許可される上りデータ量を、ONUごとに算出する(ステップS103)。割当部54は、各ONUのその上りデータ量に基づいて、例えば非特許文献2に示された処理のように、各ONUの上り送信の開始時刻を算出する(ステップS104)。割当部54は、LLS用の現在の割当サイクル番号(以下「LLS現在割当サイクル番号」という。)をインクリメントする。割当部54は、HLS用の現在の割当サイクル番号(以下「HLS現在割当サイクル番号」という。)をインクリメントする(ステップS105)。
【0074】
割当部54は、HLS現在割当サイクル番号とHLS割当サイクル数とが等しいか否かを判定する(ステップS106)。HLS現在割当サイクル番号とHLS割当サイクル数とが異なる場合(ステップS106:NO)、割当部54は、ステップS108に処理を進める。HLS現在割当サイクル番号とHLS割当サイクル数とが等しい場合(ステップS106:YES)、割当部54は、HLS現在割当サイクル番号を0にする(ステップS107)。なお、HLS現在割当サイクル番号は、本フローの終了に達しても0にクリアされず、保持されることとする。
【0075】
割当部54は、LLS現在割当サイクル番号とLLS割当サイクル数とが等しいか否かを判定する(ステップS108)。LLS現在割当サイクル番号とLLS割当サイクル数とが異なる場合(ステップS108:NO)、割当部54は、ステップS102に処理を戻す。LLS現在割当サイクル番号とLLS割当サイクル数とが等しい場合(ステップS108:YES)、割当部54は、
図5に示された処理を終了する。LLS現在割当サイクル番号は、HLS現在割当サイクル番号と異なり、
図5に示されたフローチャートの終了に達すると、0にクリアされる。
【0076】
以下、変数「id」は、OLT5に接続されているONUに一意に付与される識別情報を表す。この識別情報は、割当部54における内部IDである。
【0077】
図6は、LLS用のONU6のデータの要求量を取得する手順(
図5におけるステップS101)の例を示すフローチャートである。以下のフローチャートの判断処理の進み先に記載された文字又は数字は、同一の文字又は数字が記載されたステップの処理に進むことを示している。例えば、
図6のステップS203の判断処理の進み先に記載された文字「A」は、
図7において同一の文字である「A」が記載されたステップS301の処理に進むことを示している。
【0078】
割当部54は、変数「id」に0を代入する(ステップS201)。割当部54は、変数「id」とOLT5に接続されているONUの数とが等しいか否かを判定する(ステップS202)。変数「id」とOLT5に接続されているONUの数とが等しい場合(ステップS202:YES)、割当部54は、
図6に示された処理を終了する。変数「id」とOLT5に接続されているONUの数とが異なる場合(ステップS202:NO)、割当部54は、論理リンク識別子[id]のONU_TYPEがLLSを表しているか否かを判定する(ステップS203)。
【0079】
論理リンク識別子[id]のONU_TYPEがHLSを表している場合(ステップS203:YES)、割当部54は、
図7のステップS301に処理を進める。論理リンク識別子[id]のONU_TYPEがLLSを表している場合(ステップS203:YES)、割当部54は、変数「ReadTime」に、「割当量算出サイクル先頭時刻+(LLS割当サイクル数−1)×割当サイクル長」の結果を代入する(ステップS204)。割当部54は、論理リンク識別子[id]における変数「ReadTime」以降の要求量を表す情報を、連携処理部50から取得する(ステップS205)。
【0080】
上位装置2は、変数「ReadTime」と、対象ONUの論理リンク識別子(論理リンク識別子[id])とを、連携処理部50に通知する。連携処理部50は、時刻「ReadTime」以降の上りデータ受信時刻を表す情報を検索する。連携処理部50は、時刻「ReadTime」以降の上りデータ受信時刻を表す情報が連携処理部50のメモリに存在する場合、その上りデータ受信時刻と上りデータ量とを、要求量を表す情報として割当部54に通知する。重複読み出しを避けるために、連携処理部50は、割当部54にに通知された上りデータ受信時刻を表す情報と上りデータ量を表す情報とを、連携処理部50のメモリから消去する。
【0081】
時刻「ReadTime」以降の上りデータ受信時刻を表す情報が連携処理部50のメモリに存在しない場合、連携処理部50は、その上りデータ受信時刻「0」と上りデータ量「0」とを、要求量を表す情報として割当部54に通知する。
【0082】
割当部54は、変数「RequestSizeTmp[id]」に、取得された要求量の上りデータ量を代入する。割当部54は、変数「RequestTime[id]」に、取得された要求量の上りデータ受信時刻を代入する(ステップS206)。割当部54は、変数「id」をインクリメントする(ステップS207)。割当部54は、ステップS202に処理を戻す。
【0083】
図7は、HLS用のONU7のデータの要求量を取得する手順(
図5におけるステップS101)の例を示すフローチャートである。割当部54は、HLS現在割当サイクル番号が0であるか否かを判定する。すなわち、割当部54は、現在時刻がSR−DBAのDBAサイクルの先頭時刻であるか否かを判定する(ステップS301)。HLS現在割当サイクル番号が0でない場合(ステップS301:NO)、割当部54は、
図6のステップS207に処理を戻す。
【0084】
HLS現在割当サイクル番号が0である場合(ステップS301:YES)、割当部54は、論理リンク識別子[id]の要求量を、要求量受信部52から取得する(ステップS302)。割当部54は、論理リンク識別子[id]の要求量(上りデータ量)を、変数「RequestSizeTmp[id]」に代入する(ステップS303)。割当部54は、変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値よりも大きいか否かを判定する(ステップS304)。
【0085】
変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値よりも大きい場合(ステップS304:YES)、割当部54は、論理リンク識別子[id]の要求量(RequestSize)の値から、割り当てられた上りデータ量(AllocatedSize[id])の値を減算する。
【0086】
ここで、論理リンク識別子[id]の要求量の値から、割り当てられたデータ量(AllocatedSize[id])を割当部54が減算する理由は、通知時点においてONUのバッファに蓄積されている上りデータ量をONUが要求量としてOLT5に通知するので、論理リンク識別子[id]の要求量には、既に送信が確定しているデータも含まれているためである(ステップS305)。
【0087】
なお、送信を確定しているデータをONUが除去して要求量としてOLT5に通知している場合、ステップS305において、割当部54は、論理リンク識別子[id]の要求量(RequestSize)の値から、割り当てられたデータ量(AllocatedSize[id])を減算しない。
【0088】
変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値以下である場合(ステップS304:NO)、割当部54は、変数「RequestSizeTmp[id]」に0を代入する(ステップS306)。
【0089】
以下、割当サイクルにおいて変数「RequestSize」が0でないLLS用のONUの数を「LLS有効ONU数」という。以下、割当サイクルにおいて変数「RequestSize」が0でないHLS用のONUの数を「HLS有効ONU数」という。変数「RequestSize」の値とは関係なく、OLTに接続されているLLS用のONUの数を「LLS接続ONU数」という。
【0090】
図8は、ONUのデータの要求量を更新する手順(
図5におけるステップS102)の例を示すフローチャートである。割当部54は、変数「id」に0を代入し、変数「LLS有効ONU数」に0を代入し、変数「HLS有効ONU数」に0を代入し、変数「LLS接続ONU数」に0を代入する(ステップS401)。
【0091】
割当部54は、変数「id」と接続されているONUの数とが等しいか否かを判定する(ステップS402)。変数「id」と接続されているONUの数とが等しい場合(ステップS401:YES)、割当部54は、
図8に示された処理を終了する。変数「id」と接続されているONUの数とが異なる場合(ステップS401:NO)、割当部54は、論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表すか否かを判定する(ステップS403)。
【0092】
論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表す場合(ステップS403:YES)、割当部54は、割当サイクル先頭時刻が時刻「RequestTime[id]」よりも前であるか否かを判定する(ステップS404)。割当サイクル先頭時刻が時刻「RequestTime[id]」よりも前である場合(ステップS404:YES)、割当部54は、ステップS407に処理を進める。
【0093】
割当サイクル先頭時刻が時刻「RequestTime[id]」以降である場合(ステップS404:NO)、割当部54は、要求量を表す変数「RequestSize[id]」の値に、変数「RequestSizeTmp[id]」の値を加算する(ステップS405)。割当部54は、変数「RequestSizeTmp[id]」の値を0にする(ステップS406)。
【0094】
割当部54は、変数「RequestSize[id]」の値が0より大きいか否かを判定する(ステップS407)。変数「RequestSize[id]」の値が0以下である場合(ステップS407:NO)、割当部54は、ステップS409に処理を進める。変数「RequestSize[id]」の値が0より大きい場合(ステップS407:YES)、割当部54は、変数「LLS有効ONU数」の値をインクリメントする(ステップS408)。
【0095】
割当部54は、変数「LLS接続ONU数」の値をインクリメントする(ステップS409)。割当部54は、変数「id」の値をインクリメントする(ステップS410)。割当部54は、ステップS402に処理を戻す。
【0096】
論理リンク識別子[id]の設定値(ONU_TYPE)がHLSを表す場合(ステップS403:NO)、割当部54は、変数「HLS現在割り当てサイクル番号」が0と等しいか否かを判定する(ステップS411)。変数「HLS現在割り当てサイクル番号」が0とは異なる場合(ステップS411:NO)、割当部54は、ステップS413に処理を進める。変数「HLS現在割り当てサイクル番号」が0と等しい場合(ステップS411:YES)、割当部54は、変数「RequestSize[id]」の値に、変数「RequestSizeTmp[id]」の値を代入する(ステップS412)。
【0097】
割当部54は、変数「RequestSize[id]」の値が0より大きいか否かを判定する(ステップS413)。変数「RequestSize[id]」の値が0以下である場合(ステップS413:NO)、割当部54は、ステップS410に処理を進める。
【0098】
変数「RequestSize[id]」の値が0より大きい場合(ステップS407:YES)、割当部54は、変数「HLS有効ONU数」の値をインクリメントする(ステップS414)。割当部54は、ステップS410に処理を進める。
【0099】
図9は、ONUのデータの要求量を更新するタイミングの例を示す図である。割当部54は、割当サイクル先頭時刻が時刻「RequestTime」以降となった場合、LLS用のONUの変数「RequestSize」を更新する。割当部54は、HLS現在割当サイクル番号が0である場合、HLS用のONUの変数「RequestSize」の値を更新する。すなわち、割当部54は、SR−DBAのDBAサイクル(要求量受信サイクル)の先頭にて、HLS用のONUの変数「RequestSize」の値を更新する。
【0100】
図10は、上り送信のデータ量固定割当データ量及び追加割当データ量を算出する手順の例を示すフローチャートである。割当部54は、LLS用のONUの残余分(LLS用の全てのONU6の要求量「RequestSize」が0)になった場合、HLS用のONU7の要求量に基づいて、HLS用のONU7に上りデータ量を割り当てる。さらに、両者で余った上りデータ量をLLS用のONU6に均等に割り当てるように、追加割当データ量に関して、HLS用の追加割当処理(
図13、
図14及び
図15)を先に実行した後、LLS用の追加割当処理(
図16)を実行する。
【0101】
割当部54は、
図11を用いて後述されるように、HLS用のONUの要求量の通知に必要とされるデータ量(HLS固定割当データ量)を、HLS用のONUに割り当てる(ステップS501)。割当部54は、
図12を用いて後述されるように、LLS用のONUの固定割当データ量(LLS固定割当データ量)を、LLS用のONUに割り当てる(ステップS502)。
【0102】
割当部54は、
図13、
図14及び
図15を用いて後述されるように、HLS用のONUの上りデータの送信に関する要求量に応じて適応的に、残った未割当のデータ量をHLS用のONUに追加割当する(ステップS503)。割当部54は、
図16を用いて後述されるように、LLS用のONUの上りデータの送信に関する要求量に応じて適応的に、残った未割当のデータ量をLLS用のONUに追加割当する(ステップS504)。
【0103】
なお、
図10から
図16までまでの各フローチャートにおいて、説明を簡単にするために、誤り訂正のためのパリティビット分を含まない割り当てが記載されている。
図10から
図16までの各フローチャートは、パリティビットを含む割り当てのフローチャートでもよい。
【0104】
図11は、要求量の通知に必要とされるデータ量をHLS用のONU7に割り当てる手順の例を示すフローチャートである。以下では、要求量の通知に必要とされるデータ量を「要求量通知用割当データ量」と表記する。以下では、割当サイクル内にて割当可能なデータ量のうち、未割当のデータ量を示す値を「rGrantCycleLength」と表記する。以下では、バースト・オーバヘッド(Burst Overhead)を「BOH」と表記する。
【0105】
割当部54は、変数「rGrantCycleLength」に、割当サイクル長において送信できる最大データ量を代入する(ステップS601)。割当部54は、HLS現在割当サイクル番号と要求量通知用割当サイクル番号とが等しいか否かを判定する(ステップS602)。HLS現在割当サイクル番号と要求量通知用割当サイクル番号とが異なる場合(ステップS602:NO)、割当部54は、
図11に示された処理を終了する。
【0106】
HLS現在割当サイクル番号と要求量通知用割当サイクル番号とが等しい場合(ステップS602:YES)、割当部54は、変数「id」の値を0にする(ステップS603)。割当部54は、変数「id」の値と変数「接続ONU数」の値とが等しいか否かを判定する(ステップS604)。変数「id」の値と変数「接続ONU数」の値とが等しい場合(ステップS604:YES)、割当部54は、
図11に示された処理を終了する。
【0107】
変数「id」の値と変数「接続ONU数」の値とが異なる場合(ステップS604:NO)、割当部54は、論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表すか否かを判定する(ステップS605)。論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表す場合(ステップS605:YES)、割当部54は、ステップS604に処理を戻す。論理リンク識別子[id]の設定値(ONU_TYPE)がHLSを表す場合(ステップS605:NO)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「要求量通知用割当データ量+BOH」の値を代入する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」に1を代入する。要求量通知要求フラグが1であるとは、要求量の通知をONUに指示することを意味する(ステップS606)。
【0108】
割当部54は、変数「rGrantCycleLength」の値から、変数「割り当てデータ量[論理リンク識別子[id]]」の値を減算する。割当部54は、変数「AllocatedSize[id]」の値を0にする(ステップS607)。割当部54は、変数「id」の値をインクリメントする(ステップS608)。割当部54は、ステップS604に処理を戻す。
【0109】
図12は、LLS用のONU6に固定データ量を割り当てる手順の例を示すフローチャートである。要求量「RequestSize」の値とは無関係に、割当サイクルごとにLLS用のONUに割り当てるデータ量を、以下では「LLS最小割当データ量」と表記する。
【0110】
割当部54は、変数「id」の値と変数「接続ONU数」の値とが等しいか否かを判定する(ステップS701)。変数「id」の値と変数「接続ONU数」の値とが等しい場合(ステップS701:YES)、割当部54は、
図12に示された処理を終了する。変数「id」の値と変数「接続ONU数」の値とが異なる場合(ステップS701:NO)、割当部54は、論理リンク識別子[id]のONU_TYPEがLLSを表しているか否かを判定する(ステップS702)。論理リンク識別子[id]のONU_TYPEがHLSを表している場合(ステップS702:NO)、割当部54は、
図12に示された処理を終了する。
【0111】
論理リンク識別子[id]のONU_TYPEがLLSを表している場合(ステップS702:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「LLS最小割当データ量+BOH」の値を代入する(ステップS703)。割当部54は、変数「rGrantCycleLength」の値から、変数「割当データ量[論理リンク識別子[id]]の値を減算する(ステップS704)。割当部54は、変数「id」の値をインクリメントする(ステップS705)。割当部54は、ステップS701に処理を戻す。
【0112】
図13は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第1部分である。固定割当データ量計算(
図10におけるステップS501及びステップS502)において、バーストオーバヘッドが割当データ量として既に付与されている場合、バーストオーバヘッドが割当データ量として追加付与されないようにするために、割当部54は、未付与のバーストオーバヘッド量「AddBOH」を算出する。
【0113】
図13、
図14及び
図15における追加割当処理では、割当部54は、変数「RequestSize」以上の要求量を割り当てないようにする。割り当ての要求量が変数「RequestSize」よりも小さい場合、割当部54は、割り当てた上りデータ量(要求量)を変数「RequestSize」から減算し、減算された上りデータ量を次の割当サイクルに繰り越す。
【0114】
割当部54は、変数「LLS有効ONU数」の値が0であり、かつ、変数「HLS有効ONU数」の値が0より大きいか否かを判定する(ステップS801)。変数「LLS有効ONU数」の値が0であり、かつ、変数「HLS有効ONU数」の値が0より大きい場合(ステップS801:YES)、割当部54は、変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが等しいか否かを判定する(ステップS802)。
【0115】
変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが等しい場合(ステップS802:YES)、割当部54は、未付与のバーストオーバヘッド量の変数「AddBOH」の値を0にする(ステップS803)。割当部54は、ステップS805に処理を進める。
【0116】
変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが異なる場合(ステップS802:NO)、割当部54は、未付与のバーストオーバヘッド量の変数「AddBOH」の値を、変数「BOH×HLS有効ONU数」の値にする(ステップS804)。割当部54は、ステップS805に処理を進める。
【0117】
割当部54は、変数「rGrantCycleLength」の値が変数「AddBOH」の値よりも大きいか否かを判定する(ステップS805)。変数「rGrantCycleLength」の値が変数「AddBOH」の値よりも大きい場合(ステップS805:YES)、割当部54は、変数「AddGrantSizeHls」に、「(rGrantCycleLength−AddBOH)/HLS有効ONU数」の結果を代入する(ステップS806)。割当部54は、変数「id」の値を0にする(ステップS807)。
【0118】
割当部54は、変数「id」の値と変数「接続ONU数」の値とが等しいか否かを判定する(ステップS808)。変数「id」の値と変数「接続ONU数」の値とが異なる場合(ステップS808:NO)、割当部54は、論理リンク識別子[id]のONU_TYPEがLLSを表しているか否かを判定する(ステップS809)。論理リンク識別子[id]のONU_TYPEがHLSを表している場合(ステップS809:NO)、割当部54は、変数「RequestSize[id]」の値が0よりも大きいか否かを判定する(ステップS810)。変数「RequestSize[id]」の値が0よりも大きい場合(ステップS810:YES)、割当部54は、変数「RequestSize[id]」の値が変数「AddGrantSizeHls」の値より大きいか否かを判定する(ステップS811)。
【0119】
図14は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第2部分である。割当部54は、変数「AddBOH」の値が0より大きいか否かを判定する(ステップS812)。変数「AddBOH」の値が0以下である場合(ステップS812:NO)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「AddGrantSizeHls」の値を加算する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「AddGrantSizeHls」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「AddGrantSizeHls」の値を減算する(ステップS813)。割当部54は、ステップS815に処理を進める。
【0120】
変数「AddBOH」の値が0より大きい場合(ステップS812:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「AddGrantSizeHls+BOH」の値を代入する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「AddGrantSizeHls」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「AddGrantSizeHls+BOH」の値を減算する(ステップS814)。
【0121】
割当部54は、変数「RequestSize[id]」の値から、変数「AddGrantSizeHls」の値を減算する(ステップS815)。割当部54は、変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値よりも小さいか否かを判定する(ステップS816)。変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値よりも小さい場合(ステップS816:YES)、割当部54は、ステップS818に処理を進める。
【0122】
変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値以上である場合(ステップS816:NO)、割当部54は、変数「AllocatedSize[id]」の値に、変数「AllocatedSizeTmpの値を加算する(ステップS817)。割当部54は、変数「id」の値をインクリメントする(ステップS818)。
【0123】
図15は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第3部分である。割当部54は、変数「AddBOH」の値が0より大きいか否かを判定する(ステップS819)。変数「AddBOH」の値が0より大きい場合(ステップS819:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「RequestSize[id]+BOH」の値を減算する(ステップS820)。
【0124】
変数「AddBOH」の値が0以下である場合(ステップS819:NO)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「RequestSize[id]」の値を加算する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「RequestSize[id]」の値を減算する(ステップS821)。割当部54は、変数「RequestSize[id]」の値に0を代入する(ステップS822)。
【0125】
図16は、LLS用のONU6に追加データ量を割り当てる手順の例を示す図である。未割当データ量が存在し、かつ、LLS有効ONU数が0でない場合、割当部54は、要求量を表す変数「RequestSize」が0でないLLS用のONU6のみに対して、未割当データ量を均等に分配する。LLS有効ONU数が0である場合、割当部54は、LLS用の全てのONUに対して、未割当データ量を均等に分配する。
【0126】
割当部54は、変数「rGrantCycleLength」の値が0よりも大きいか否かを判定する(ステップS901)。変数「rGrantCycleLength」の値が0以下である場合(ステップS901:NO)、割当部54は、
図16に示された処理を終了する。変数「rGrantCycleLength」の値が0よりも大きい場合(ステップS901:YES)、割当部54は、変数「LLS有効ONU数」の値が0であるか否かを判定する(ステップS902)。
【0127】
変数「LLS有効ONU数」の値が0である場合(ステップS902:YES)、割当部54は、変数「AddGrantSizeHls」に、「rGrantCycleLength/LLS接続ONU数」の結果を代入する(ステップS903)。変数「LLS有効ONU数」の値が0でない場合(ステップS902:NO)、割当部54は、変数「AddGrantSizeHls」に、「rGrantCycleLength/LLS有効ONU数」の結果を代入する(ステップS904)。割当部54は、変数「id」の値を0にする(ステップS905)。
【0128】
割当部54は、変数「id」の値と変数「接続ONU数」の値とが等しいか否かを判定する(ステップS906)。変数「id」の値と変数「接続ONU数」の値とが等しい場合(ステップS906:YES)、割当部54は、
図16に示された処理を終了する。変数「id」の値と変数「接続ONU数」の値とが異なる場合(ステップS906:NO)、割当部54は、論理リンク識別子[id]のONU_TYPEがLLSを表しているか否かを判定する(ステップS907)。論理リンク識別子[id]のONU_TYPEがHLSを表している場合(ステップS907:NO)、割当部54は、ステップS913に処理を進める。
【0129】
論理リンク識別子[id]のONU_TYPEがLLSを表している場合(ステップS907:YES)、割当部54は、変数「RequestSize[id]」の値が0よりも大きいか否か、又は、変数「LLS有効ONU数」の値が0であるか否かを判定する(ステップS908)。変数「RequestSize[id]」の値が0以下である、かつ、変数「LLS有効ONU数」の値が0でない場合(ステップS908:NO)、割当部54は、ステップS913に処理を進める。
【0130】
変数「RequestSize[id]」の値が0よりも大きい、又は、変数「LLS有効ONU数」の値が0である場合(ステップS908:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「AddGrantSizeLls」の値を加算する(ステップS909)。
【0131】
割当部54は、LLS用のONU6に対する上りデータ量について予め定められた最小到着量と変数「AddGrantSizeLls」の値とのうちで小さいほうの値よりも、変数「RequestSize[id]」の値が小さいか否かを判定する(ステップS910)。変数「RequestSize[id]」の値が最小到着量と変数「AddGrantSizeLls」の値とのうちで小さいほうの値以上である場合(ステップS910:NO)、割当部54は、変数「RequestSize[id]」の値から、最小到着量と変数「AddGrantSizeLls」の値とのうちで小さいほうの値を減算する(ステップS911)。
【0132】
最小到着量と変数「AddGrantSizeLls」の値とのうちで小さいほうの値よりも、変数「RequestSize[id]」の値が小さい場合(ステップS910:YES)、割当部54は、変数「RequestSize[id]」に0を代入する(ステップS912)。割当部54は、変数「id」をインクリメントする(ステップS913)。割当部54は、ステップS906に処理を戻す。
【0133】
以上のように、第1実施形態のOLT5(帯域割当装置)は、連携処理部50(取得部)と、要求量受信部52と、割当部54とを備える。連携処理部50は、上りデータを低遅延で転送する必要があるONU6(第1加入者線終端装置)の上りデータの送信に関するスケジューリング情報を取得する。要求量受信部52は、上りデータを低遅延で転送する必要がないONU7(第2加入者線終端装置)から、ONU7の上りデータの送信に関する要求量を表す情報を、最大RTT以上のサイクルである要求量受信サイクルで受信する。割当部54は、要求量受信サイクルよりも短い割当量算出サイクル(割当量決定サイクル)で、スケジューリング情報に基づいてONU6の上りデータに帯域を割り当てる。割当部54は、要求量受信サイクルよりも短い割当量算出サイクル(割当量決定サイクル)で、要求量を表す情報に基づいてONU7の上りデータに帯域を割り当てる。
【0134】
これによって、第1実施形態のOLT5は、連携DBAとSR−DBAとを両立させることが可能である。
【0135】
すなわち、第1実施形態のOLT5は、同一OLT上で、SR−DBAと連携DBAとを仮想的に異なるDBAサイクルで動作させることが可能である。第1実施形態のOLT5は、SR−DBAと連携DBAとの同時運用(融合)による、LLS向けの低遅延とHLS及びFTTH向けの高帯域利用効率とを両立させることが可能である。
【0136】
第1実施形態の割当部54は、要求量通知用割当102において、要求量を表す情報の上りデータの送信用に帯域を割り当ててもよい。割当部54は、要求量を表す情報の上りデータの送信用に割り当てられずに残った帯域を、連携DBA用割当101において、ONU6の上りデータの送信用に割り当ててもよい。割当部54は、ONU6の上りデータに割り当てられずに残った帯域を、SR−DBA用割当103において、ONU7の上りデータの送信用に割り当ててもよい。割当部54は、ONU7の上りデータの送信用に割り当てられずに残った帯域を、ONU6の上りデータに例えば均等に割り当ててもよい。
【0137】
また、第1の実施形態において、ONU7は、HLS用の下位装置9と接続されているが、FTTH用の下位装置と接続されても良い。この場合、上位装置3は同様にFTTH用の装置である。また、FTTH用の上位装置とHLS用の上位装置とは、光通信システム1において混在しても良い。
【0138】
(第2実施形態)
第2実施形態では、HLS用のONU7に対して、最低割当データ量(以下「最小データ量」という。)から最大割当データ量(以下「最大データ量」という。)までの範囲内で割当部54が割り当てる点が、第1実施形態と相違する。第2実施形態では、第1実施形態との相違点を説明する。
【0139】
図17は、要求量と割当量(割当データ量)との関係の例を示す図である。最小データ量は、HLS用のONU7からOLT5に通知された要求量の有無に関係なく、HLS用のONU7に割り当てるデータ量である。最大データ量は、HLS用のONU7に割り当て可能であるデータ量の最大値である。最小データ量及び最大データ量は、HLS用のONU7ごとに、外部装置等によって予め定められた値である。追加割当可能である割当データ量の上限(割当上限)は、LLS用のONU6の残余データ量(LLS用の全てのONU6の要求量「RequestSize」が0であることによって余る帯域))に応じて変化する。すなわち、割当データ量の残余(残余データ量)次第で、追加割当が可能である割当データ量の上限(割当上限)が変化する。最大データ量は、残余データ量が最大データ量よりも大きい場合のみ有効である。最小データ量は、残余データ量が最小データ量よりも大きい場合のみ有効である。
【0140】
図18は、LLS用のONU6の要求量を取得する手順の例を示すフローチャートである。ステップS1001からステップS1007までの動作は、
図6におけるステップS201からステップS207までの動作と同様である。
【0141】
図19は、HLS用のONU7の要求量を取得する手順(
図5におけるステップS101)の例を示すフローチャートである。割当部54は、HLS現在割当サイクル番号が0であるか否かを判定する。すなわち、割当部54は、現在時刻がSR−DBAのDBAサイクルの先頭時刻であるか否かを判定する(ステップS1101)。HLS現在割当サイクル番号が0でない場合(ステップS1101:NO)、割当部54は、
図18のステップS1007に処理を戻す。
【0142】
HLS現在割当サイクル番号が0である場合(ステップS1101:YES)、割当部54は、論理リンク識別子[id]の要求量を、要求量受信部52から取得する(ステップS1102)。割当部54は、論理リンク識別子[id]の要求量(上りデータ量)を、変数「RequestSizeTmp[id]」に代入する(ステップS1103)。割当部54は、変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値よりも大きいか否かを判定する(ステップS1104)。
【0143】
変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値よりも大きい場合(ステップS1104:YES)、割当部54は、論理リンク識別子[id]の要求量(RequestSize)の値から、割り当てられたデータ量(AllocatedSize[id])の値を減算する(ステップS1105)。
【0144】
変数「RequestSizeTmp[id]」の値が変数「AllocatedSize[id]」の値以下である場合(ステップS1104:NO)、割当部54は、変数「RequestSizeTmp[id]」に0を代入する(ステップS1106)。
【0145】
割当部54は、変数「RequestSizeTmp[id]」の値が変数「最小データ量[論理リンク識別子[id]]」の値よりも大きいか否かを判定する(ステップS1107)。変数「RequestSizeTmp[id]」の値が変数「最小データ量[論理リンク識別子[id]]」の値よりも大きい場合(ステップS1107:YES)、割当部54は、ステップS1109に処理を進める。
【0146】
変数「RequestSizeTmp[id]」の値が変数「最小データ量[論理リンク識別子[id]]」の値以下である場合(ステップS1107:NO)、割当部54は、変数「RequestSizeTmp[id]」に、変数「最小データ量[論理リンク識別子[id]]」の値を代入する(ステップS1108)。割当部54は、変数「RequestSizeTmp[id]」の値が、変数「最大データ量[論理リンク識別子[id]]」の値よりも大きいか否かを判定する(ステップS1109)。
【0147】
変数「RequestSizeTmp[id]」の値が、変数「最大データ量[論理リンク識別子[id]]」の値よりも大きい場合(ステップS1109:YES)、割当部54は、
図18に示されているステップS1007に処理を進める。
【0148】
変数「RequestSizeTmp[id]」の値が、変数「最大データ量[論理リンク識別子[id]]」の値以下である場合(ステップS1109:NO)、割当部54は、変数「RequestSizeTmp[id]」に、変数「最大データ量[論理リンク識別子[id]]」の値を代入する(ステップS1110)。割当部54は、
図18に示されているステップS1007に処理を進める。
【0149】
以上のように、第2実施形態の割当部54は、予め定められた最小データ量を表す情報と、予め定められた最大データ量を表す情報とを取得する。割当部54は、要求量が最小データ量未満である場合、ONU7の上りデータの送信用に最小データ量の帯域を割り当てる。割当部54は、要求量が最大データ量を超えている場合、ONU7の上りデータの送信用に最大データ量の帯域を割り当てる。
【0150】
これによって、第2実施形態のOLT5は、連携DBAとSR−DBAとを両立させる効率を向上させることが可能である。
【0151】
(第3実施形態)
第3実施形態では、HLS用のONU7の上りデータの追加割当処理において、HLS用のONU7ごとに予め定められた重み係数に応じて割当部54が残余データ量をHLS用のONU7に分配する点が、第1実施形態及び第2実施形態と相違する。第3実施形態では、第1実施形態及び第2実施形態との相違点を説明する。
【0152】
以下、要求量「RequestSize」が0でないHLS用のONUの重み係数(OnuWeight)の和を「OnuWeightSum」と表記する。割当部54は、変数「AddGrantSizeHls」の値を重み係数に応じて算出することによって、HLS用のONU7の割当データ量を決定する。
【0153】
図20は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第1部分である。割当部54は、変数「LLS有効ONU数」の値が0であり、かつ、変数「HLS有効ONU数」の値が0より大きいか否かを判定する(ステップS1201)。変数「LLS有効ONU数」の値が0であり、かつ、変数「HLS有効ONU数」の値が0より大きい場合(ステップS1201:YES)、割当部54は、変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが等しいか否かを判定する(ステップS1202)。
【0154】
変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが等しい場合(ステップS1202:YES)、割当部54は、未付与のバーストオーバヘッド量の変数「AddBOH」の値を0にする(ステップS1203)。割当部54は、ステップS1205に処理を進める。
【0155】
変数「HLS現在割り当てサイクル番号」の値と変数「要求量通知用割り当てサイクル番号」の値とが異なる場合(ステップS1202:NO)、割当部54は、未付与のバーストオーバヘッド量の変数「AddBOH」の値を、変数「BOH×HLS有効ONU数」の値にする(ステップS1204)。割当部54は、ステップS1205に処理を進める。
【0156】
割当部54は、変数「rGrantCycleLength」の値が変数「AddBOH」の値よりも大きいか否かを判定する(ステップS1205)。変数「rGrantCycleLength」の値が変数「AddBOH」の値よりも大きい場合(ステップS1205:YES)、割当部54は、変数「AddGrantSizeHls」に、「(rGrantCycleLength−AddBOH)/OnuWeightSum」の結果を代入する(ステップS1206)。割当部54は、変数「id」の値を0にする(ステップS1207)。
【0157】
割当部54は、変数「id」の値と変数「接続ONU数」の値とが等しいか否かを判定する(ステップS1208)。変数「id」の値と変数「接続ONU数」の値とが異なる場合(ステップS1208:NO)、割当部54は、論理リンク識別子[id]のONU_TYPEがLLSを表しているか否かを判定する(ステップS1209)。論理リンク識別子[id]のONU_TYPEがHLSを表している場合(ステップS1209:NO)、割当部54は、変数「AddGrantSizeHls」に、「AddGrantSizeHlsTmp×重み係数[論理リンク識別子[id]]」の結果を代入する(ステップS1210)。
【0158】
割当部54は、変数「RequestSize[id]」の値が0よりも大きいか否かを判定する(ステップS1211)。変数「RequestSize[id]」の値が0よりも大きい場合(ステップS1211:YES)、割当部54は、変数「RequestSize[id]」の値が変数「AddGrantSizeHls」の値より大きいか否かを判定する(ステップS1212)。
【0159】
図21は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第2部分である。割当部54は、変数「AddBOH」の値が0より大きいか否かを判定する(ステップS1213)。変数「AddBOH」の値が0以下である場合(ステップS1213:NO)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「AddGrantSizeHls」の値を加算する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「AddGrantSizeHls」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「AddGrantSizeHls」の値を減算する(ステップS1214)。割当部54は、ステップS1216に処理を進める。
【0160】
変数「AddBOH」の値が0より大きい場合(ステップS1213:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「AddGrantSizeHls+BOH」の値を代入する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「AddGrantSizeHls」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「AddGrantSizeHls+BOH」の値を減算する(ステップS1215)。
【0161】
割当部54は、変数「RequestSize[id]」の値から、変数「AddGrantSizeHls」の値を減算する(ステップS1216)。割当部54は、変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値よりも小さいか否かを判定する(ステップS1217)。変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値よりも小さい場合(ステップS1217:YES)、割当部54は、ステップS1219に処理を進める。
【0162】
変数「HLS現在割り当てサイクル番号」の値が変数「要求量通知用割り当てサイクル番号」の値以上である場合(ステップS1217:NO)、割当部54は、変数「AllocatedSize[id]」の値に、変数「AllocatedSizeTmpの値を加算する(ステップS1218)。割当部54は、変数「id」の値をインクリメントする(ステップS1219)。
【0163】
図22は、HLS用のONU7に追加データ量を割り当てる手順の例を示すフローチャートの第3部分である。割当部54は、変数「AddBOH」の値が0より大きいか否かを判定する(ステップS1220)。変数「AddBOH」の値が0より大きい場合(ステップS1220:YES)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「RequestSize[id]+BOH」の値を減算する(ステップS1221)。
【0164】
変数「AddBOH」の値が0以下である場合(ステップS1220:NO)、割当部54は、変数「割当データ量[論理リンク識別子[id]]」の値に、変数「RequestSize[id]」の値を加算する。割当部54は、変数「要求量通知要求フラグ[論理リンク識別子[id]]」の値に0を代入する。割当部54は、変数「AllocatedSizeTmp」の値に、変数「RequestSize[id]」の値を代入する。割当部54は、変数「rGrantCycleLength」の値から、変数「RequestSize[id]」の値を減算する(ステップS1222)。割当部54は、変数「RequestSize[id]」の値に0を代入する(ステップS1223)。
【0165】
図23は、HLS用のONU7の重み係数を計測する処理を含む、ONUのデータの要求量を取得する手順の例(
図5におけるステップS102)を示すフローチャートである。割当部54は、変数「id」に0を代入し、変数「LLS有効ONU数」に0を代入し、変数「HLS有効ONU数」に0を代入し、変数「LLS接続ONU数」に0を代入し、変数「OnuWeightSum」に0を代入する(ステップS1301)。
【0166】
割当部54は、変数「id」と接続されているONUの数とが等しいか否かを判定する(ステップS1302)。変数「id」と接続されているONUの数とが等しい場合(ステップS1301:YES)、割当部54は、
図8に示された処理を終了する。変数「id」と接続されているONUの数とが異なる場合(ステップS1301:NO)、割当部54は、論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表すか否かを判定する(ステップS1303)。
【0167】
論理リンク識別子[id]の設定値(ONU_TYPE)がLLSを表す場合(ステップS1303:YES)、割当部54は、割当サイクル先頭時刻が時刻「RequestTime[id]」よりも前であるか否かを判定する(ステップS1304)。割当サイクル先頭時刻が時刻「RequestTime[id]」よりも前である場合(ステップS1304:YES)、割当部54は、ステップS1307に処理を進める。
【0168】
割当サイクル先頭時刻が時刻「RequestTime[id]」以降である場合(ステップS1304:NO)、割当部54は、要求量を表す変数「RequestSize[id]」の値に、変数「RequestSizeTmp[id]」の値を加算する(ステップS1305)。割当部54は、変数「RequestSizeTmp[id]」の値を0にする(ステップS1306)。
【0169】
割当部54は、変数「RequestSize[id]」の値が0より大きいか否かを判定する(ステップS1307)。変数「RequestSize[id]」の値が0以下である場合(ステップS1307:NO)、割当部54は、ステップS1309に処理を進める。変数「RequestSize[id]」の値が0より大きい場合(ステップS1307:YES)、割当部54は、変数「LLS有効ONU数」の値をインクリメントする(ステップS1308)。
【0170】
割当部54は、変数「LLS接続ONU数」の値をインクリメントする(ステップS1309)。割当部54は、変数「id」の値をインクリメントする(ステップS1310)。割当部54は、ステップS1302に処理を戻す。
【0171】
論理リンク識別子[id]の設定値(ONU_TYPE)がHLSを表す場合(ステップS1303:NO)、割当部54は、変数「HLS現在割り当てサイクル番号」が0と等しいか否かを判定する(ステップS1311)。変数「HLS現在割り当てサイクル番号」が0とは異なる場合(ステップS1311:NO)、割当部54は、ステップS1313に処理を進める。変数「HLS現在割り当てサイクル番号」が0と等しい場合(ステップS1311:YES)、割当部54は、変数「RequestSize[id]」の値に、変数「RequestSizeTmp[id]」の値を代入する(ステップS1312)。
【0172】
割当部54は、変数「RequestSize[id]」の値が0より大きいか否かを判定する(ステップS1313)。変数「RequestSize[id]」の値が0以下である場合(ステップS1313:NO)、割当部54は、ステップS1310に処理を進める。
【0173】
変数「RequestSize[id]」の値が0より大きい場合(ステップS1307:YES)、割当部54は、変数「HLS有効ONU数」の値をインクリメントする。割当部54は、変数「OnuWeightSum」の値に、変数「重み係数[論理リンク識別子[id]]」の値を加算する(ステップS1314)。割当部54は、ステップS1310に処理を進める。
【0174】
図24は、重み係数と上り遅延との関係の例を示す図である。HLS用の各ONU7の重み係数が互いに同じである場合、割当部54は、HLS用の各ONU7に同条件で上りデータ量を割り当てる。HLS用の各ONU7の重み係数が互いに同じである場合、HLS用の各ONU7の上り遅延は同等である。HLS用の各ONU7の重み係数が互いに異なる場合、割当部54は、重み係数が大きいHLS用のONU7を優先して、HLS用のONU7の上りデータの送信用に帯域を割り当てる。重み係数が大きいHLS用のONU7の上りデータの上り遅延は、重み係数が小さいHLS用のONU7の上りデータの上り遅延よりも小さい。
【0175】
以上のように、第3実施形態の割当部54は、ONU7ごとに定められた重み係数と、要求量を表す情報とに基づいて、要求量のデータ量の帯域を上限として、ONU7の上りデータの送信用に帯域を割り当てる。
【0176】
これによって、第3実施形態のOLT5は、連携DBAとSR−DBAとを両立させる効率を向上させることが可能である。
【0177】
以上、この発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【0178】
上述した実施形態における、OLT、ONU、上位装置及び下位装置をコンピュータで実現するようにしてもよい。その場合、この機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによって実現してもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、FPGA(Field Programmable Gate Array)等のプログラマブルロジックデバイスを用いて実現されるものであってもよい。