(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-02
(45)【発行日】2023-05-15
(54)【発明の名称】スケジューリング方法、およびスケジューリング装置
(51)【国際特許分類】
G06F 9/48 20060101AFI20230508BHJP
【FI】
G06F9/48 300D
G06F9/48 300F
G06F9/48 300C
(21)【出願番号】P 2020056884
(22)【出願日】2020-03-26
【審査請求日】2022-02-02
(73)【特許権者】
【識別番号】000208891
【氏名又は名称】KDDI株式会社
(74)【代理人】
【識別番号】100114258
【氏名又は名称】福地 武雄
(74)【代理人】
【識別番号】100125391
【氏名又は名称】白川 洋一
(74)【代理人】
【識別番号】100208605
【氏名又は名称】早川 龍一
(72)【発明者】
【氏名】黒木 圭介
(72)【発明者】
【氏名】佐々木 力
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2008-152470(JP,A)
【文献】特開2017-117204(JP,A)
【文献】特開2017-021488(JP,A)
【文献】国際公開第2007/029421(WO,A1)
【文献】特開2016-164752(JP,A)
【文献】特開平08-137703(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/455-9/54
(57)【特許請求の範囲】
【請求項1】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、
タスクキューにセットされている前記プロセスを確認するステップと、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、
前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、
前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、を含み、
前記プロセス
のバイナリファイルを
前記FPGAに設定し実行する
割当時間は、前記プロセスごとの前処理時間
とすべての前記プロセスに同一のタイムクォンタムとの和として前記プロセスごとに決定されることを特徴とする方法。
【請求項2】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、
タスクキューにセットされている前記プロセスを確認するステップと、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、
前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、
前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、を含み、
前記前処理時間を取得するステップにおいて、前記プロセスごとのプロセス時間をさらに取得し、
前記プロセスの順序は、前記プロセスごとの前処理時間
と前記プロセス時間との和である初回プロセス時間に基づいて決定されることを特徴とする方法。
【請求項3】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、
前記プロセスの順序または前記プロセスのバイナリファイルを前記FPGAに設定し実行する割当時間を決定する方法を示すポリシの設定要求を受け付け、設定するステップと、
タスクキューにセットされている前記プロセスを確認するステップと、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、
複数の前記プロセスのうち一部の前記プロセスの順序の制約を示す順序情報を取得するステップと、
前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、
前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、を含み、
前記プロセスの順序は、
設定された前記ポリシ、前記プロセスごとの前処理時間
を含む考慮時間、および前記順序情報に基づいて決定されることを特徴とする方法。
【請求項4】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、
タスクキューにセットされている前記プロセスを確認するステップと、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、
前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、
前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、
過去の一定の時間内に実行された前記プロセスの現在の実行される可能性の高さを示す待機順位情報を取得するステップと、を含み、
前記プロセスの順序または前記プロセス
のバイナリファイルを
前記FPGAに設定し実行する
割当時間は、前記プロセスごとの前処理時間
を含む考慮時間に基づいて決定され
、
前記FPGAを利用する前記プロセスが存在しないときに、前記待機順位情報に基づいて選択された前記プロセスのバイナリファイルを前記FPGAにあらかじめ設定することを特徴とする方法。
【請求項5】
前記タスクキューにセットされている複数の前記プロセスに同一のプロセスが含まれる場合、前記同一のプロセスを連続して実行する場合に限定して、それぞれのプロセスの前記初回プロセス時間を算出することを特徴とする請求項
2記載の方法。
【請求項6】
過去の一定の時間内に実行された前記プロセスの現在の実行される可能性の高さを示す待機順位情報を取得するステップを有し、
前記FPGAを利用する前記プロセスが存在しないときに、前記待機順位情報に基づいて選択された前記プロセスのバイナリファイルを前記FPGAにあらかじめ設定することを特徴とする請求項1から請求項
3のいずれかに記載の方法。
【請求項7】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用させるスケジューリング装置であって、
前記プロセスの実行命令を格納するタスクキューと、
前記タスクキューにセットされている前記プロセスを確認し、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定し、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルの前記FPGAへの設定を依頼し、設定されたバイナリファイルを実行するスケジュール部と、
前記スケジュール部に依頼された前記プロセスのバイナリファイルを前記FPGAに設定するバイナリ設定部と、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得する前処理測定部と、を備え、
前記プロセス
のバイナリファイルを
前記FPGAに設定し実行する
割当時間は、前記プロセスごとの前処理時間
とすべての前記プロセスに同一のタイムクォンタムとの和として前記プロセスごとに決定されることを特徴とするスケジューリング装置。
【請求項8】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用させるスケジューリング装置であって、
前記プロセスの実行命令を格納するタスクキューと、
前記タスクキューにセットされている前記プロセスを確認し、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定し、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルの前記FPGAへの設定を依頼し、設定されたバイナリファイルを実行するスケジュール部と、
前記スケジュール部に依頼された前記プロセスのバイナリファイルを前記FPGAに設定するバイナリ設定部と、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得する前処理測定部と、を備え、
前記スケジュール部は、前記プロセスごとのプロセス時間を取得し、
前記プロセスの順序は、前記プロセスごとの前処理時間
とプロセス時間との和である初回プロセス時間に基づいて決定されることを特徴とするスケジューリング装置。
【請求項9】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用させるスケジューリング装置であって、
前記プロセスの順序または前記プロセスのバイナリファイルを前記FPGAに設定し実行する割当時間を決定する方法を示すポリシを設定するポリシ設計部と、
前記プロセスの実行命令を格納するタスクキューと、
前記タスクキューにセットされている前記プロセスを確認し、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定し、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルの前記FPGAへの設定を依頼し、設定されたバイナリファイルを実行するスケジュール部と、
前記スケジュール部に依頼された前記プロセスのバイナリファイルを前記FPGAに設定するバイナリ設定部と、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得する前処理測定部と、を備え、
前記スケジュール部は、複数の前記プロセスのうち一部の前記プロセスの順序の制約を示す順序情報を取得し、
前記プロセスの順序は、
設定された前記ポリシ、前記プロセスごとの前処理時間
を含む考慮時間、および前記順序情報に基づいて決定されることを特徴とするスケジューリング装置。
【請求項10】
1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用させるスケジューリング装置であって、
前記プロセスの実行命令を格納するタスクキューと、
前記タスクキューにセットされている前記プロセスを確認し、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定し、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルの前記FPGAへの設定を依頼し、設定されたバイナリファイルを実行するスケジュール部と、
前記スケジュール部に依頼された前記プロセスのバイナリファイルを前記FPGAに設定するバイナリ設定部と、
セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得する前処理測定部と、を備え、
前記スケジュール部は、過去の一定の時間内に実行された前記プロセスの現在の実行される可能性の高さを示す待機順位情報を取得し、
前記プロセスの順序または前記プロセス
のバイナリファイルを
前記FPGAに設定し実行する
割当時間は、前記プロセスごとの前処理時間
を含む考慮時間に基づいて決定され
、
前記バイナリ設定部は、前記FPGAを利用する前記プロセスが存在しないときに、前記待機順位情報に基づいて選択された前記プロセスのバイナリファイルを前記FPGAにあらかじめ設定することを特徴とするスケジューリング装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、FPGAを時分割で利用するスケジューリング方法、およびスケジューリング装置に関する。
【背景技術】
【0002】
ネットワーク通信機器において、NFV(Network Function Virtualization)などに代表されるように仮想化技術を用いて、通信機器を実現する事例が増えてきている。仮想化の技術には、仮想マシンよりも軽量なコンテナ技術を用いて通信機器を実現する事例も増えてきている。
【0003】
一方で、仮想化技術は専用に作られたハードウェアではなく、汎用のサーバ上などで動作するため、これまでASIC(Application Specific Integrated Circuit)などで処理されてきた通信機器の機能が汎用CPU(Central Processing Unit)上で処理されることにより、処理速度の低下などの問題も顕在化し、CPUの代わりにGPU(Graphics Processing Unit)やFPGA(Field Programmable Gate Array)などに一部の処理をオフロードし、その問題解決の1つとして利用させる事例も増えてきている。
【0004】
FPGAを様々な機能で利用することを考えた場合、単純にはそれぞれの機能で利用するための回路情報を作成し、その回路情報を設定したFPGAを様々な機能分だけ用意すればよいが、特にコンテナなどで通信機器を構成し、機能(コンテナ)の種類が膨大になった場合に、その手法は費用がかかりすぎる。
【0005】
一般にはFPGAを複数のプロセス(コンテナ)で共有する場合には、物理的に領域を分割するか、利用時間を分割(時分割)させるかの手法が考えられるが、前者は1つのプロセスで利用する回路規模が大きくなった場合に、やはりコストがかかるのと、後者は例えばCPUのタスクスケジューリング方式などは単純に利用すると問題がでる。
【0006】
特許文献1は、サービスとしてのFPGAへのアクセスを提供するための仕組みが開示されている。共用のFPGA使用のためのプロビジョニング管理などが記述されている。ユーザからFPGAの回路内容である設計パッケージを受け取ると、管理ペイロードを付与し、更に管理ペイロードに適合するユーザキーを付与してコンパイルすることで、ユーザの認証や利用の開始・終了を管理し、サービスとして複数のユーザにFPGAを共有させることができる。
【先行技術文献】
【特許文献】
【0007】
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、複数のプロセスによる共有となると、一つ一つの利用時間が短いため、特許文献1記載の方法は、そのような場合の管理手法としては利用できない。また、CPUのタスクスケジューリングを単純に利用する場合に生じ得る問題とは、例えば、ラウンドロビン方式において論ずることができる。
図2(a)はある時点で、タスクキューに入っているプロセスを示している。プロセス時間とは、FPGA上で実行される機能の実行開始から終了までの時間である。例えば、これらのプロセスをタイムクォンタム5のラウンドロビン方式で実行した場合、
図2(b)のように実行され、「プロセス-い」は実行がいつまでも終わらないことになる。これは、FPGAはサーバのホスト上に置かれているコンパイルされた回路情報のバイナリファイルをFPGAに設定する時間(例えば、OpenCLで言えば、clCreateProgramWithBinary, clCreateKernelの実行時間)を要するため、プロセス時間のみだけでなく、その前処理の時間を測定し、それを考慮に入れる必要があるためである。
【0009】
本発明は、このような事情に鑑みてなされたものであり、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間を考慮してスケジューリングさせるスケジューリング方法、およびスケジューリング装置を提供することを目的とする。
【課題を解決するための手段】
【0010】
(1)上記の目的を達成するため、本発明は、以下のような手段を講じた。すなわち、本発明の方法は、1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、タスクキューにセットされている前記プロセスを確認するステップと、セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、を含み、前記プロセスの順序または前記プロセスを設定し実行する所定の時間は、前記プロセスごとの前処理時間に基づいて決定される。
【0011】
これにより、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間(前処理時間)を考慮してスケジューリングさせることができる。
【0012】
(2)また、本発明の方法は、前記プロセスの順序または前記所定の時間を決定する方法を示すポリシの設定要求を受け付け、設定するステップを有し、前記プロセスの順序または前記所定の時間は、設定された前記ポリシおよび前記プロセスごとの前処理時間に基づいて決定される。
【0013】
これにより、設定したポリシごとに異なる観点でプロセスの順序またはプロセスを設定し実行する所定の時間を決定できる。
【0014】
(3)また、本発明の方法において、前記所定の時間は、前記プロセスごとの前処理時間とすべての前記プロセスに同一のタイムクォンタムとの和として前記プロセスごとに決定される。
【0015】
このように、前処理時間+タイムクォンタムを割当時間とすることで、前処理時間が長いプロセスがあっても、タイムクォンタムの分だけ実際の処理時間として与えられるので、終了しない処理が発生することはない。また、全てのプロセスでプロセス時間(実際の処理時間)が等しくなるため、実質的な意味での割当時間は公平になる。
【0016】
(4)また、本発明の方法は、前記前処理時間を取得するステップにおいて、前記プロセスごとのプロセス時間をさらに取得し、前記プロセスの順序は、前記プロセスごとの前処理時間とプロセス時間との和である初回プロセス時間に基づいて決定される。
【0017】
このように、前処理時間とプロセス時間を足し合わせた初回プロセス時間に基づいてプロセスの順序を決定することで、前処理時間を考慮しない方法よりターンアラウンドタイムを小さくできる。
【0018】
(5)また、本発明の方法において、前記タスクキューにセットされている複数の前記プロセスに同一のプロセスが含まれる場合、前記同一のプロセスを連続して実行する場合に限定して、それぞれのプロセスの前記初回プロセス時間を算出する。
【0019】
このように、プロセスの順序をプロセスごとの前処理時間とプロセス時間との和である初回プロセス時間に基づいて決定する方法において、タスクキューに同一のプロセスが複数入っていた場合は、同一のプロセスを連続して実行する場合に限定して前処理時間を算出することで、より適切なプロセスの順序を設定できる。
【0020】
(6)また、本発明の方法は、複数の前記プロセスの順序の制約を示す順序情報を取得するステップを有し、前記プロセスの順序は、取得した前記ポリシ、前記プロセスごとの前処理時間、および前記順序情報に基づいて決定される。
【0021】
これにより、プロセスに順序の制約がある場合も、取得したポリシ、プロセスごとの前処理時間、および順序情報に基づいて適切なプロセスの順序を設定できる。
【0022】
(7)また、本発明の方法は、複数の前記プロセスの優先度の高さを示す優先度情報を取得するステップを有し、前記プロセスの順序は、取得した前記ポリシ、前記プロセスごとの前処理時間、および前記優先度情報に基づいて決定される。
【0023】
これにより、プロセスに優先度がある場合も、取得したポリシ、プロセスごとの前処理時間、および優先度情報に基づいて適切なプロセスの順序を設定できる。
【0024】
(8)また、本発明の方法において、前記タスクキューにセットされている複数の前記プロセスに前記優先度情報が同一のプロセスが含まれる場合、前記優先度情報が同一のプロセスごとに前記プロセスの順序が決定される。
【0025】
これにより、プロセスに優先度があり、さらに同一の優先度を有するプロセスがある場合も、取得したポリシ、プロセスごとの前処理時間、および優先度情報に基づいて適切なプロセスの順序を設定できる。
【0026】
(9)また、本発明の方法において、前記タスクキューにセットされている前記プロセスの実行中に、実行中の前記プロセスの前記優先度情報よりも優先度の高い前記優先度情報を有する他のプロセスが前記タスクキューにセットされた場合、実行中の前記プロセスの実行を中断し、前記他のプロセスの実行後に、中断した前記プロセスの実行を再開する。
【0027】
これにより、プロセスの実行中に優先度の高いプロセスを割り込ませることができ、取得したポリシ、プロセスごとの前処理時間、および優先度情報に基づいて適切なプロセスの順序を設定できる。
【0028】
(10)また、本発明の方法は、過去の一定の時間内に実行された前記プロセスの現在の実行される可能性の高さを示す待機順位情報を取得するステップを有し、前記FPGAを利用する前記プロセスが存在しないときに、前記待機順位情報に基づいて選択された前記プロセスのバイナリファイルを前記FPGAにあらかじめ設定する。
【0029】
これにより、次回設定される可能性の高いプロセスのバイナリファイルをあらかじめFPGAに設定し待機させることができ、予想が的中した場合に前処理時間を短縮できる。
【0030】
(11)また、本発明のスケジューリング装置は、1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用させるスケジューリング装置であって、前記プロセスの実行命令を格納するタスクキューと、前記タスクキューにセットされている前記プロセスを確認し、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定し、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルの前記FPGAへの設定を依頼し、設定されたバイナリファイルを実行するスケジュール部と、前記スケジュール部に依頼された前記プロセスのバイナリファイルを前記FPGAに設定するバイナリ設定部と、セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得する前処理測定部と、を備え、前記プロセスの順序または前記プロセスを設定し実行する所定の時間は、前記プロセスごとの前処理時間に基づいて決定される。
【0031】
これにより、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間(前処理時間)を考慮してスケジューリングさせることができる。
【発明の効果】
【0032】
本発明によれば、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間を考慮してスケジューリングさせることで、通常、時分割の使用に対応していないFPGAであっても時分割で使用することができ、コストを増加させないでFPGAのリソースを効率よく使用できる。
【図面の簡単な説明】
【0033】
【
図1】本実施形態に係るスケジューリング方法およびスケジューリング装置の基となる、コンテナ技術を用いた通信機器の仮想化およびコンテナ技術とFPGAとの関係の概念の一例を示す図である。
【
図2】従来方法のプロセスの具体例を示す表、およびそれに対する割当時間を示す概念図である。
【
図3】第1の実施形態に係るスケジューリング装置の概略構成の一例を示すブロック図である。
【
図4】(a)、(b)それぞれ、DBに保存される情報の例を示す表である。
【
図5】第2の実施形態に係るスケジューリング装置の概略構成の一例を示すブロック図である。
【
図6】第2の実施形態に係るスケジューリング装置の動作の一例を示すフローチャートである。
【
図7】第2の実施形態に係るスケジューリング装置の動作の一例を示すフローチャートである。
【
図8】(a)、(b)それぞれ、実施例1のプロセスの具体例を示す表、およびそれに対する割当時間を示す概念図である。
【
図9】実施例1のプロセスの具体例を示す表である。
【
図10】
図9に示されるプロセスの具体例に対する実施例1の割当時間を示す概念図である。
【
図11】(a)~(c)それぞれ、第2の実施例のプロセスの具体例を示す表、通常の最短ジョブ優先方式の順序を示す概念図、および本発明の最短ジョブ優先方式の順序を示す概念図である。
【
図12】(a)、(b)それぞれ、第3の実施例のプロセスの具体例を示す表、および本発明の最短ジョブ優先方式の順序を示す概念図である。
【
図13】(a)、(b)それぞれ、第3の実施例のプロセスの具体例を示す表、および本発明の最短ジョブ優先方式の順序を示す概念図である。
【
図14】実施例3のスケジューリング装置の動作の一例を示すフローチャートである。
【
図15】第4の実施例のプロセスの具体例を示す表である。
【
図16】
図15に示されるプロセスの具体例に対する第4の実施例の順序と割当時間を示す概念図である。
【
図17】
図15に示されるプロセスの具体例に対する第4の実施例の順序と割当時間を示す概念図である。
【
図18】第4の実施例の変形例のプロセスの具体例を示す表である。
【
図19】(a)、(b)それぞれ、第5の実施例のプロセスの具体例を示す表、および順序と割当時間を示す概念図である。
【
図20】第6の実施例のプロセスの具体例を示す表である。
【0034】
本発明者らは、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間を考慮してスケジューリングさせることで、通常、時分割の使用に対応していないFPGAであっても時分割で使用することができることを見出し、本発明をするに至った。
【0035】
すなわち、本発明の方法は、1または複数の仮想通信機器の複数のプロセスでFPGAを時分割で利用するスケジューリング方法であって、タスクキューにセットされている前記プロセスを確認するステップと、セットされている前記プロセスのバイナリファイルが前記FPGAに設定される前処理時間を取得するステップと、前記タスクキューに複数の前記プロセスがセットされている場合、実行する前記プロセスの順序を決定するステップと、前記決定された順序に従い、実行する順序が到来した前記プロセスのバイナリファイルを前記FPGAに設定し実行するステップと、を含み、前記プロセスの順序または前記プロセスを設定し実行する所定の時間は、前記プロセスごとの前処理時間に基づいて決定される。
【0036】
これにより、本発明者らは、通常、時分割の使用に対応していないFPGAであっても時分割で使用することができ、コストを増加させないでFPGAのリソースを効率よく使用できることを可能とした。以下、本発明の実施形態について、図面を参照しながら具体的に説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては同一の参照番号を付し、重複する説明は省略する。
【0037】
[コンテナ技術とFPGAとの関係の概念]
図1は、本実施形態に係るスケジューリング方法およびスケジューリング装置の基となる、コンテナ技術を用いた通信機器の仮想化およびコンテナ技術とFPGAとの関係の概念の一例を示す図である。仮想通信機器は、1つ以上のコンテナで構成されて動作している。それぞれのコンテナは、1つ以上のプロセスの集合として構成されている。仮想通信機器は、例えば、ルータ、ファイアウォール、基地局、モバイルコア等が考えられるが、これに限定されるわけではない。プロセスとは、仮想通信機器の行なう処理を1つまたは複数の機能ごとに分割したものである。例えば、仮想通信機器がルータである場合、パケットをフィルタリングする機能、通信プロトコルを管理する機能等がプロセスとして考えられるが、これに限定されるわけではない。
【0038】
個々のプロセスは、ハードウェアリソースを消費することで実行されるが、プロセスごとに消費するリソースには違いがある。例えば、
図1の「プロセス-え」はCPUを利用して実行されることを表している。一方、
図1の「プロセス-あ」、「プロセス-い」、および「プロセス-う」は、FPGAに設定されるプロセスごとの回路設定であるバイナリファイルを介して、FPGAを利用して実行されることを表している。
図1は、「プロセス-あ」、「プロセス-い」、および「プロセス-う」が、それぞれ「バイナリ-A」、「バイナリ-B」、および「バイナリ-C」というFPGAに設定される回路設定と対応していることを表している。
【0039】
このように、1つのFPGAは、1つのバイナリファイルが設定された場合、そのバイナリファイルに対応するプロセスの実行に対して使用され、他のバイナリファイルに対応するプロセスの実行に対して同時に使用されることはない。また、そのFPGAが他のバイナリファイルに対応するプロセスの実行に使用される場合、そのバイナリファイルを新たに設定して、その後使用される。すなわち、本発明において、1つのFPGAが異なるプロセスに対して使用される場合、時分割で使用される。なお、FPGAは、それぞれのFPGAごとに管理されるため、複数存在していてもよい。
【0040】
[第1の実施形態]
(スケジューリング装置の構成)
図3は、本実施形態に係るスケジューリング装置の概略構成の一例を示すブロック図である。
図3では1つのサーバ10内での実装を説明しているが、それぞれの要素が別のサーバで実装されていてもよい。「プロセス-あ」は、ある仮想化されたネットワーク機器のプロセスを示している。FPGA20はサーバ内に実装されたFPGAであり、サーバ10内に1つのFPGAが実装された例で説明を行う。スケジューリング装置100は、タスクキュー110、スケジュール部120、バイナリ設定部130、および前処理測定部140によって構成されている。
【0041】
タスクキュー110は、FPGA20によって処理を行うプロセスの実行命令を格納する場所であり、タスクキュー110に格納された命令をポリシに沿って実行していく。ポリシとは、プロセスの実行順序や実行時間の決め方の基準である。例えば、公平性重視やターンアラウンドタイムの縮小重視などの基準がある。本実施形態では、ポリシはあらかじめ設定されているものとする。
【0042】
スケジュール部120は、タスクキュー110にセットされているプロセスを確認する。なお、本実施形態では、スケジュール部120が定期的にタスクキュー110を確認する例で説明しているが、タスクキュー110にプロセスがセットされたタイミングでスケジュールをスタートさせてもよい。
【0043】
タスクキュー110に複数のプロセスがセットされている場合、スケジュール部120は、実行するプロセスの順序を決定し、決定された順序に従い、バイナリ設定部130に対し、実行する順序が到来したプロセスのバイナリファイルのFPGA20への設定を依頼する。また、タスクキュー110に1つのプロセスがセットされている場合、スケジュール部120は、バイナリ設定部130に対し、そのプロセスのバイナリファイルのFPGA20への設定を依頼する。また、スケジュール部120は、FPGA20に設定されたバイナリファイルを実行する。
【0044】
プロセスの順序またはプロセスを設定し実行する所定の時間(割当時間)は、後述するプロセスごとの前処理時間に基づいて決定される。これにより、通常、時分割の使用に対応していないFPGAであっても時分割で使用することができ、コストを増加させないでFPGAのリソースを効率よく使用できる。
【0045】
バイナリ設定部130は、スケジュール部120に依頼されたプロセスのバイナリファイルをFPGA20に設定する。本発明では、1つのプロセスに対応するFPGAの回路情報は事前にコンパイルされ、バイナリファイルとして管理される。各プロセスに対応するバイナリファイルは、DB50に保存される。バイナリ設定部130は、DB50から必要な情報を取得する。
【0046】
前処理測定部140は、タスクキュー110にセットされているプロセスのバイナリファイルがFPGA20に設定される前処理時間を取得する。前処理時間は、あらかじめプロセスごとまたはバイナリファイルごとに設定されている値を取得してもよいが、バイナリファイルがFPGA20に設定されるごとに前処理測定部140が設定時間を測定して、測定した複数の値の平均値を前処理時間とすることが好ましい。これは、FPGAに対するバイナリファイルの設定は、その回路規模によって設定時間が異なるため、実際に設定する度に、どの程度の時間がかかるかを測定した方が、より現実的な前処理時間に基づいてプロセスの順序またはプロセスを設定し実行する所定の時間を決定することができるからである。
【0047】
測定された設定時間はDB(データベース)50に送信され、DB50にはこれまでの測定値、それらの平均値、所定の測定回数分の平均値などのうち少なくとも1つが保持される。測定方法は限定されないが、例えば、スケジューリング装置100が、OpenCLに基づいて構成される場合、バイナリ設定時のclCreateProgramWithBinary,clCreateKernelの実行時間を前処理時間として測定することができる。
【0048】
図4(a)、(b)は、それぞれDB50に保存される情報の例を示す表である。DB50は、プロセスごとのバイナリファイル、前処理測定部140で測定したプロセスごとの前処理時間、プロセスごとのプロセス時間、プロセスごとの前処理時間とプロセス時間を合計した初回処理時間(初回プロセス時間)などの情報が格納されている。また、後述する実施例で使用される複数のプロセスの順序の制約を示す順序情報、複数のプロセスの優先度の高さを示す優先度情報、過去の一定の時間内に実行されたプロセスの現在の実行される可能性の高さを示す待機順位情報などの様々なポリシに対応するために必要な情報が格納されていてもよい。また、DBに保存される情報は、必要に応じて更新される。
【0049】
[第2の実施形態]
(スケジューリング装置の構成)
図5は、本実施形態に係るスケジューリング装置の概略構成の一例を示すブロック図である。スケジューリング装置200は、タスクキュー110、スケジュール部120、バイナリ設定部130、前処理測定部140、およびポリシ設計部210によって構成されている。タスクキュー110、スケジュール部120、バイナリ設定部130、および前処理測定部140の機能は、第1の実施形態と同様であるため、説明は省略する。
【0050】
ポリシ設計部210は、プロセスの順序またはプロセスのバイナリファイルをFPGA20に設定し実行する所定の時間を決定する方法を示すポリシを設定する。ポリシ設計部210は、プロセススケジューリングの際に何を重視するかを、ユーザが設定要求する機能部であり、例えば、公平性重視やターンアラウンドタイムの縮小重視などが設定される。
【0051】
スケジューリング装置200は、ポリシ設計部210を備えることで、ユーザが重視するポリシを設定することができ、FPGA20に処理させるプロセスや処理量に応じたポリシをユーザが選択することができる。
【0052】
(動作の一例の説明)
次に、本実施形態に係るスケジューリング装置の動作の一例を、
図6および
図7のフローチャートを用いて説明する。
図6および
図7は、本実施形態に係るスケジューリング装置の動作の一例を示すフローチャートである。
【0053】
図6および
図7は、スケジューリング装置を構成する各機能部、DB、およびユーザの設定要求を含む。DBからの情報の取得は、各機能部がそれぞれ受け持つ。まず、ユーザがスケジューリング装置にポリシの設定を要求する(ステップS1)。次に、ポリシ設計部は、設定するポリシに応じて考慮する時間を決定する(ステップS2)。考慮する時間(考慮時間)は、少なくとも前処理時間を含む。例えば、設定するポリシに応じて前処理時間、または前処理時間とプロセス時間を合わせた初回プロセス時間のいずれを考慮するかを決定することができる。考慮時間は、前処理時間に基づいて算出されていれば、ポリシごとにどのような時間を考慮時間としてもよい。次にポリシ設計部は、スケジュール部にポリシの設定(セット)を通知する(ステップS3)。
【0054】
次に、スケジュール部はポリシの設定(セット)を受領し(ステップS4)、考慮時間を決定する(ステップS5)。その間、タスクキューにはプロセスがセットされる(ステップS6)。そして、タスクキューを確認し(ステップS7)、プロセスがセットされている場合(ステップS8-YES)、DBに考慮時間の値の確認をする(ステップS9)。DBは、考慮時間の値の確認メッセージを受領し(ステップS10)、値を返信する(ステップS11)。そして、スケジュール部は、考慮時間の値に基づいて、スケジュールの決定をする(ステップS12)。なお、考慮時間の値とは、少なくともセットされたプロセスに対応するバイナリファイルの前処理時間を含む。また、スケジュールの決定は、少なくともプロセスの実行する順序またはプロセスを設定し実行する所定の時間を決定することを含む。
【0055】
また、タスクキューを確認し(ステップS7)、プロセスがセットされていない場合(ステップS8-NO)、ステップS7に戻り、再度タスクキューの確認をする。
【0056】
スケジュールの決定の後、スケジュール部は、回路情報を変更するかどうかを判断し、変更する場合(ステップS13-YES)、バイナリ設定部に該当プロセスの回路の設定を指示する(ステップS14)。回路情報を変更するかどうかの判断は、実行しようとしているプロセスのバイナリファイルがFPGAに設定されているかどうかを確認し判断することであり、直接FPGAを確認してもよいが、前回の処理を確認するか、バイナリ設定部に問い合わせることが好ましい。また、該当プロセスの回路の設定とは、該当プロセスに対応するバイナリファイルの設定である。
【0057】
バイナリ設定部は、該当プロセスの回路の設定の指示を受領(ステップS15)し、DBにプロセスの該当バイナリ(バイナリファイル)の確認をする(ステップS16)。DBは、バイナリ確認メッセージを受領(ステップS17)し、バイナリ設定部にバイナリ情報(バイナリファイル)の返信をする(ステップS18)。バイナリ設定部は、FPGAにバイナリを設定し(ステップS19)、前処理測定部にバイナリ設定時間の測定を依頼する(ステップS20)。
【0058】
前処理測定部は、バイナリ設定時間の測定依頼メッセージを受領し(ステップS21)、測定を開始する。そして、測定が完了(ステップS22)したら、DBに測定値を通知する(ステップS23)。DBは、測定値を受領し(ステップS24)、前処理時間の平均値の算出と格納をする(ステップS25)。
【0059】
一方、バイナリ設定部は、バイナリ設定完了(ステップS26)後、スケジュール部に該当プロセスの回路設定完了を通知する(ステップS27)。スケジュール部は、該当プロセスの回路設定完了通知を受領し(ステップS28)、該当プロセスの実行をする(ステップS29)。実行後、全てのプロセスが完了したかを判断し、完了した場合(ステップS30-YES)、終了する。終了後、ポリシの変更をしない場合、ステップS7に戻ってタスクキューの確認をするように動作してもよい。
【0060】
また、スケジュール部は、全てのプロセスが完了したかを判断し、完了していない場合(ステップS30-NO)、ステップS13に戻り、回路情報を変更するかを判断する。
【0061】
また、スケジュール部は、ステップS13で回路情報を変更するかどうかを判断し、変更しない場合(ステップS13-NO)、該当プロセスの実行をする(ステップS29)。
【0062】
本実施形態に係るスケジューリング装置は、このようにして、動作することができる。なお、第1の実施形態に係るスケジューリング装置も、ポリシ設計部がないだけで、それ以外は同様の動作をすることができる。なお、上記の動作説明は、動作の一例を説明したものであり、本発明は、これに限定されるわけではない。
【0063】
第1の実施形態および第2の実施形態の上記の説明では、説明が理解されやすいように、スケジューリング装置がハードウェアで実装されている例で説明したが、上記のフローチャートの説明で理解されるように、本発明は、スケジューリング装置の一部または全部がソフトウェアで実装されることが可能である。また、本発明は、1のソフトウェアとしてだけではなく、1または複数のサーバ上に実装された複数の機能の要素間で実行される処理方法として実装されることが可能である。以下の実施例も同様である。
【0064】
[実施例]
次に実施例を説明する。以下の実施例では、プロセス間の公平性を重視して各プロセスにFPGAを割り当てる時間を決定する、いわゆるラウンドロビン方式と、ターンアラウンドタイムを小さくする、いわゆる最短ジョブ優先方式に基づいた方法を採用した場合の実施例を説明するが、本発明は、これに限定されるわけではない。各プロセスで利用する回路データのバイナリファイルを、時分割でFPGAに設定する際に、FPGAへの設定時間(前処理時間)を考慮したスケジューリングをする方法は、本発明に含まれる。
【0065】
(実施例1)
まず、公平性を重視する方法について説明する。ポリシ設計部に公平性重視が設定された場合は、スケジューリング装置は、プロセス間の割当時間を実質的に公平に割り当てることを重視することとする。この場合、スケジュール部は全プロセスに共通のタイムクウォンタムにプロセスごとの前処理時間を足したものを各プロセスに割り当てる時間とする。具体的な例として、
図8(a)のプロセスをスケジュールする場合、および
図9のプロセスをスケジュールする場合で説明する。
図8(a)、(b)は、それぞれ、本実施例のプロセスの具体例を示す表および割当時間を示す概念図である。
図9は、本実施例のプロセスの具体例を示す表である。
図10は、
図9に示されるプロセスの具体例に対する割当時間を示す概念図である。
【0066】
例えば、タイムクウォンタムを5として
図8(a)のプロセスをスケジュールする場合、「プロセス-あ」には前処理時間2+タイムクォンタム5で割当時間7、「プロセス-い」には前処理時間5+タイムクォンタム5で割当時間10、「プロセス-う」には前処理時間4+タイムクォンタム5で割当時間9を割り当てることをスケジュールし、
図8(b)のように実行する。
【0067】
また、プロセス時間が上記より長い例として、
図9のプロセスをスケジュールする場合で説明する。例えば、タイムクウォンタムを上記と同様に5として、
図9のプロセスをスケジュールする場合、「プロセス-あ」には前処理時間2+タイムクォンタム5で割当時間7、「プロセス-い」には前処理時間5+タイムクォンタム5で割当時間10、「プロセス-う」には前処理時間4+タイムクォンタム5で割当時間9を割り当てることをスケジュールし、
図10のように実行する。
【0068】
このように、前処理時間+タイムクォンタムを割当時間とすることで、前処理時間が長いプロセスがあっても、タイムクォンタムの分だけ実際の処理時間として与えられるので、
図2(a)、(b)に示される例のように、終了しない処理が発生することはない。また、全てのプロセスでタイムクォンタム(実際の処理時間)が等しくなるため、実質的な意味での割当時間は公平になる。
【0069】
(実施例2)
次に、ターンアラウンドタイムを小さくする方法を説明する。ターンアラウンドタイムを小さくする代表的なスケジューリング方式として最短ジョブ優先方式がある。通常、最短ジョブ優先方式ではプロセス時間が最短であるものが優先して実行されるが、本発明では前処理時間とプロセス時間を足し合わせた初回プロセス時間が最短であるものが優先して実行される。
【0070】
具体的な例として、
図11(a)のプロセスをスケジュールする場合で説明する。
図11(a)~(c)は、それぞれ、本実施例のプロセスの具体例を示す表、通常の最短ジョブ優先方式の順序を示す概念図、および本発明の最短ジョブ優先方式の順序を示す概念図である。通常の最短ジョブ優先方式は、プロセス時間が最短であるものが優先して実行されるため、
図11(a)のプロセスでは、
図11(b)に示されるように、「プロセス-い」、「プロセス-う」、「プロセス-あ」の順序で実行される。この場合のターンアラウンドタイムは、(7+13+18)/3≒12.67となる。これに対し、本発明の最短ジョブ優先方式は、前処理時間とプロセス時間を足し合わせた初回プロセス時間が最短であるものが優先して実行される。そのため、
図11(a)のプロセスでは、「プロセス-あ」、「プロセス-う」、「プロセス-い」の順序で実行される。この場合のターンアラウンドタイムは、(5+11+18)/3≒11.33となる。
【0071】
このように、前処理時間とプロセス時間を足し合わせた初回プロセス時間が最短であるものを優先して実行することで、前処理時間を考慮しない方法よりターンアラウンドタイムを小さくできる。
【0072】
(実施例3)
次に、ターンアラウンドタイムを小さくする方法において、タスクキューに同一のプロセスが複数入っていた場合の方法を説明する。タスクキューにセットされている複数の前記プロセスに同一のプロセスが含まれる場合、同一のプロセスを連続して実行する場合に限定して、それぞれのプロセスの初回プロセス時間を算出することが好ましい。言い換えると、タスクキューに同一のプロセスが複数入っていた場合には、各プロセスの順番の組み合わせから、同一プロセスが連続しないものを除き、その他の組み合わせの、各プロセスが終了する時間をそれぞれ足し合わせ、その合計値が一番小さいパターンでスケジュールする。
【0073】
具体的な例として、
図12(a)のプロセスをスケジュールする場合、および
図13(a)のプロセスをスケジュールする場合で説明する。
図12(a)、(b)は、それぞれ、本実施例のプロセスの具体例を示す表、および本発明の最短ジョブ優先方式の順序を示す概念図である。タスクキューに「プロセス-あ、い、い、う」がセットされているとする。このとき、2つの「プロセス-い」を連続して実行した場合のそれぞれのプロセスの初回プロセス時間を算出する。そうすると、「プロセス-あ」の初回プロセス時間は5、1つ目の「プロセス-い」の初回プロセス時間は7、2つ目の「プロセス-い」の初回プロセス時間は9、「プロセス-う」の初回プロセス時間は6となる。ただし、2つの「プロセス-い」は連続して実行される。このときの考えられる順番は、「いいあう」、「いいうあ」、「あいいう」、「ういいあ」、「うあいい」、「あういい」の6通りであるが、このうちターンアラウンドタイムが最小となる順番は、
図11に示した「いいあう」であり、その値は12.5である。
【0074】
一方、連続するプロセスは、最初に実行されるほうがターンアラウンドタイムが小さくなるとは限らない。
図13(a)に示されるプロセスは、
図12(a)の「プロセス-い」の前処理時間を10に変更したプロセスである。
図13(a)に示されるプロセスをスケジュールする場合、考えられる順番は上記と同様に、「いいあう」、「いいうあ」、「あいいう」、「ういいあ」、「うあいい」、「あういい」の6通りであるが、このうちターンアラウンドタイムが最小となる順番は、
図13(b)に示した「あういい」である。
【0075】
(実施例3の動作の一例)
実施例3の動作の一例を
図14のフローチャートを用いて説明する。
図14は、実施例3のスケジューリング装置の動作の一例を示すフローチャートである。まず、タスクキューを確認する(ステップT1)。次に、タスクキューに同一プロセスが存在するかどうか確認し、同一プロセスが存在しない場合(ステップT2-NO)、初回プロセス時間が短い順に並び替え(ステップT3)、その順番でプロセスを実行し(ステップT8)、全てのプロセスが実行されたら終了する。
【0076】
一方、タスクキューに同一プロセスが存在するかどうか確認し、同一プロセスが存在する場合(ステップT2-YES)、プロセスの順番のパターンを算出する(ステップT4)。次に、算出した順番のパターンから同一プロセスが連続しないものを除き(ステップT5)、算出された順番のパターンにおいて、それぞれのプロセス終了時間の合計値を算出する(ステップT6)。そして、算出した合計値の小さい順に並び替え(ステップT7)、その順番でプロセスを実行し(ステップT8)、全てのプロセスが実行されたら終了する。
【0077】
このように、ターンアラウンドタイムを小さくする方法において、タスクキューに同一のプロセスが複数入っていた場合も、前処理時間を考慮することで、ターンアラウンドタイムを小さくすることができる。
【0078】
(実施例4)
FPGAの時分割を適用する際、プロセス間に順序の制約や優先度を考慮する場合においても、前処理時間などの考慮が活用できる。例えば、
図15のように優先値(優先度情報)を設けることで、プロセス間の順序制約や優先度などを表現することができる。
図15の例では、優先値が大きいほど優先することを示し、「プロセス-あ」および「プロセス-う」は、「プロセス-い」の後に実行することを示している。例えば、これをラウンドロビン、タイムクォンタム5で実行した場合、
図16のように、タイムクォンタムに前処理時間を加算したものがそれぞれに割り当てられつつ、「プロセス-い」を先に実行することになる。
【0079】
また、タスクキュー内のプロセスが
図15の場合で、且つ最短ジョブ優先を行う場合は
図17のように実行される。
【0080】
このように、プロセスに優先度がある場合のプロセスの順序は、設定されたポリシ、プロセスごとの前処理時間、および優先度情報に基づいて決定される。これにより、プロセスに優先度がある場合も、取得したポリシ、プロセスごとの前処理時間、および優先度情報に基づいて適切なプロセスの順序を設定できる。
【0081】
また、タスクキューにセットされている複数のプロセスに優先度情報が同一のプロセスが含まれる場合、優先度情報が同一のプロセスごとにプロセスの順序が決定されることが好ましい。これにより、プロセスに優先度があり、さらに同一の優先度を有するプロセスがある場合も、取得したポリシ、プロセスごとの前処理時間、および優先度情報に基づいて適切なプロセスの順序を設定できる。
【0082】
(実施例4変形例)
なお、
図15に示される優先値の場合、全てのプロセス間で同一の値を含め優先度の差異があり、これを用いて順序の制約を表すこともできるが、一部のプロセス間にのみ順序の制約を示す順序情報を設けてもよい。例えば、
図18に示されるプロセスは、順序情報の数字の順序でプロセスが実行される必要があることを表し、「プロセス-あ」は「プロセス-い」の後に実行することを示し、「プロセス-う」は「プロセス-い」の前、「プロセス-い」と「プロセス-あ」の間、「プロセス-あ」の後の、どの段階で実行してもよいことを示している。
【0083】
このように、順序情報がある場合のプロセスの順序は、設定されたポリシ、プロセスごとの前処理時間、および順序情報に基づいて決定される。これにより、プロセスに順序の制約がある場合も、取得したポリシ、プロセスごとの前処理時間、および順序情報に基づいて適切なプロセスの順序を設定できる。
【0084】
(実施例5)
プリエンプション(優先度の高いものがタスクキューに新たに到着した際に、実行中のプロセスを停止して、優先度の高いプロセスを実行すること)方式が選択される場合においても、FPGAの時分割適用には、前処理時間等の考慮が必要になる。例えば、最短ジョブ優先方式が選択され、さらに
図19(a)のように「プロセス-い」が遅れて到着し、プリエンプションが行われる場合は
図19(b)のように実行される。但し、本実施例は
図6、7のフローチャートとは少し異なることに注意が必要である。
図6、7のフローチャートに従うと、到着時間0の「プロセス-あ、う」を実行した後で、タスクキューの確認に行くので、「プロセス-い」の到着に気が付けない。
【0085】
よって、
図19(b)のように実行するには、タスクキューの定期確認を、プロセス実行とは独立して、実施するか、優先度の高いプロセスがタスクキューに入ったことを(タスクキューなど)別の機構がスケジュール部に知らせる必要がある。
【0086】
(実施例6)
次に、FPGAを利用するプロセスが存在しない時間に、FPGAにいずれかの回路情報(バイナリファイル)を設定して待機しておくことで、プロセスの処理時間を短縮する方法を説明する。次に実行される、FPGAを利用するプロセスの回路情報をFPGAに設定し待機しておけば、前処理時間を削減することができる。
【0087】
そこで新たに、DBに
図20のような待機順位情報を設ける。これは、過去の一定の時間当たりでどのプロセスが何回呼ばれたかという情報を保持し、更にそれに前処理時間を乗じた値を重みとして保持している。この重みが大きいということは頻繁に利用される、またはボトルネックとなる前処理時間が大きいことを意味し、この順位が1位のものをFPGAの待機時間に設定する。また、この方式はFPGAが複数ある場合にも有用であり、例えば、FPGAが2枚ある場合には、1枚目に1位のバイナリを設定し、2枚目に2位のバイナリを設定して待機することで、より効率的にターンアラウンドタイムを小さくすることができる。なお、この方法は、ターンアラウンドタイムを小さくする方法において効果的に使用されるが、ラウンドロビンで実行される場合も、少なくとも初回の前処理時間が短縮される意味において効果を有する。
【0088】
以上説明したように、本発明のスケジューリング方法、およびスケジューリング装置は、複数のプロセスでFPGAを時分割で利用する場合において、実行するプロセスの回路情報をFPGAに設定する時間を考慮してスケジューリングさせることで、通常、時分割の使用に対応していないFPGAであっても時分割で使用することができ、コストを増加させないでFPGAのリソースを効率よく使用できる。
【符号の説明】
【0089】
10 サーバ
20 FPGA
50 DB
100、200 スケジューリング装置
110 タスクキュー
120 スケジュール部
130 バイナリ設定部
140 前処理測定部
210 ポリシ設計部