JP2010271907A - I/oノード制御方式及び方法 - Google Patents

I/oノード制御方式及び方法 Download PDF

Info

Publication number
JP2010271907A
JP2010271907A JP2009123058A JP2009123058A JP2010271907A JP 2010271907 A JP2010271907 A JP 2010271907A JP 2009123058 A JP2009123058 A JP 2009123058A JP 2009123058 A JP2009123058 A JP 2009123058A JP 2010271907 A JP2010271907 A JP 2010271907A
Authority
JP
Japan
Prior art keywords
node
job
parallel
daemon
nodes
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
JP2009123058A
Other languages
English (en)
Other versions
JP5288272B2 (ja
Inventor
Atsuhisa Otani
敦久 大谷
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2009123058A priority Critical patent/JP5288272B2/ja
Publication of JP2010271907A publication Critical patent/JP2010271907A/ja
Application granted granted Critical
Publication of JP5288272B2 publication Critical patent/JP5288272B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】並列I/Oを実行するジョブが、その並列I/O開始時点において、期待した並列度を得られるだけのI/Oノードを保有していない場合でも、一時的に必要数のI/Oノードを確保して、期待した並列度で並列I/Oを実施できるようにする。
【解決手段】ジョブ開始時においては、期待した並列度で並列I/Oを実行できるだけの多数のI/Oノードを確保せず、少ない数のI/Oノードのみを確保しておく。そして、並列I/O開始時に、不足分のI/Oノードを並列I/O用I/Oノード確保/解放部、I/Oノードグループ変更部により、他のジョブが保有する通常I/O用グループのI/Oノードから選択することにより、他の実行中のジョブから一時的に横取りする。また、I/Oノード管理テーブル、ジョブ管理テーブルにより、横取りしたI/Oノードの情報と横取りされたジョブのそれを同時に管理する。そのために、I/Oノードをグループ化する。
【選択図】図3

Description

本発明は、I/O(Input/Output)ノード制御方式及び方法に関する。
最近のCPU(Central Processing Unit)の高速化や、メモリの大容量化とメモリバンド幅の向上等より、I/O(Input/Output)データ量もまた大規模化している。一方、特にHPC(High Performance Computing)の分野では、大規模SAN(Storage Area Network)環境をベースとした高速ファイル共有システムや、複数のファイルサーバーを使用するクラスタファイルシステム等、大規模ファイルシステムが提供されており、これらの利用が一般化している。更に、MPI−2(Message Passing Interface)では、並列I/Oのためのユーザインターフェースとして、MPI−IOが定義されており、利用者側から見た利便性も向上している。このため、HPC分野におけるI/Oの重要度は今まで以上に向上していると考えられ、並列計算機上で動作する各ジョブが必要とするI/O資源(I/Oノード)の形態をジョブ管理の面からも無視できなくなっている。
しかし、従来のジョブスケジューラは、各ジョブから要求される資源として、主にCPU数や計算ノード数、及びメモリ容量を対象としており、I/O資源をジョブスケジューリングの対象とはしていなので、効率的なI/O資源の利用ができていない場合があった。また、ジョブスケジューラは、要求された資源を確保した後に実行を開始することを前提としている。これは、ジョブの実行時間全体の内、I/Oに要する時間はわずかであっても、実際にそれら資源がジョブ実行中の何時必要かがわからないため、必要なときのみ資源を割り当てるような動的な資源確保は困難であったためである。
また、並列計算機は、計算能力に主としてコストが掛けられることが多く、I/Oノードの数は計算ノードの数よりも少ないことが一般的である。しかし、並列I/Oを行うためには、それに見合った数のI/Oノードが必要である。このため、CPUやメモリ以上にI/Oノードは貴重な資源と捉える必要があり、より戦略的な資源の割り当てがなされるべきである。更に、ジョブ開始から終了までの時間の内I/Oを実行している時間は、僅かしかないと考えられる。特に、計算の終了時に各計算ノードがメモリ上に格納している計算結果のデータを一気にファイルシステムへ書き込む場合等、並列I/Oを必要とする場面は限られていると考えて良い。
このため、並列I/Oを行う場合、十分な並列度を確保するためには、計算ノード数に見合うI/Oノード数を当該ジョブに割り当てる必要があるが、そのために多数のI/Oノードをジョブ開始時に確保することは、無駄な資源確保となり、他のジョブがI/Oノードを確保できず、それらジョブの実行を阻害してしまうという問題がある。また、この問題を避けるために、各ジョブに均等にI/Oノードを割り振った場合は、並列I/Oを実行しても期待した並列度を確保出来ない場合がある。
図1に、この場合の一例を示す。
これは、時刻T1においてジョブ#3が並列I/Oを開始するが、同時に実行されているジョブ#1、#2もI/Oノードを確保しているため、ジョブ#3が並列I/Oを行うのに十分なI/Oノードを確保できず、I/O時間が多くかかってしまい、後から投入されたジョブ#4の実行開始時期がその分だけ遅延されるという問題を示している。
一方、資源を動的に割り当てる機能を提供するものとしては、例えば、特開2007−115246号公報(特許文献1参照)がある。特許文献1は、アプリケーションAが資源を解放する前に、アプリケーションBに資源を割り当てる場合の問題を解決するものである。これは、ソフトウェアへの資源の割り当てや解除にそのソフトウェアを関与させることによって可能になる。つまり、資源を確保しているアプリケーションAが関与せずに、アプリケーションBがそれら資源を動的に確保することはできない。このため、並列I/Oのように一時的に多量のI/O資源を要するような場合には不向きである。
また、他の手法として、ジョブ起動時の基本的なI/Oノードの割り当てにおいて、ジョブが要求したI/O資源が不足している場合、割り当てることができるI/O資源をのみ割り当て、そのジョブの実行を開始するものを考えている(現在出願中:特願2008−095653)。これによれば、他のジョブが終了し、I/O資源が空いた時点で、I/O資源が不足した状態で動作しているジョブに対して、本来の要求量まで動的にI/O資源を増加させることができると考えられる。しかし、例えば、HPCの分野では、ジョブは常にI/O資源を使用している訳ではなく、I/Oを行うのは、ジョブの実行時間全体の一部のみと考えられる。特に、並列I/Oを行うジョブは、並列I/O中のみ多数のI/O資源が必要であり、それ以外の処理では、わずかなI/O資源のみを保有していれば良い。このようなI/O資源の要求量が動的に増減するような使用方法を実施するためには、I/O資源の要求量自体をジョブ実行中に動的に変化させる機能がなければならない。従って、複数のI/Oノードを使用して、複数の計算ノードから並列I/Oを並列ファイルシステムへ発行する場合において、並列I/Oに必要な並列度を確保でき、且つ無駄なI/O資源を確保しないような、動的I/O資源の確保機能を提供することが課題となる。
また、従来のI/Oノードの制御方法の一例が、電気通信回線を通じて、http://sc06.supercomputing.org/schedule/pdf/pap178.pdf(非特許文献1参照)に、利用可能になっている。非特許文献1は、『Jose Moreira et al., “Designing a Highly−Scalable Operating System: The Blue Gene/L Story”, In proceedings of IEEE/ACM Supercomputing SC’06, Tampa, November 2006.』を電子化したものである。非特許文献1では、計算ノード上で要求されたI/O処理を、決められたI/Oノードへ送信し、I/Oノード上でファイルシステムに対してI/Oを発行することにより実現している。このような構成を有する従来のI/Oノードの処理方法は、次のように動作する。即ち、非特許文献1の3.3節に説明されているように、I/Oノードから対象とするファイルシステムを使用可能にしておく。そして、計算ノード上で呼び出されたI/Oを要求するシステムコールに基づくI/O要求をネットワークを経由して決められたI/Oノードへ送信し、I/Oノード上で「CIOD」と呼ばれるデーモン(daemon)を用いて、そのI/Oを該当するファイルシステムに対して実行する。I/Oノード上でのI/O処理が終了すると「CIOD」が要求元の計算ノードにI/O処理の結果を返送する。
しかし、この従来のI/Oノードの制御方法には、次のような問題点があった。
第1の問題点として、本システムで動作するジョブが必要とするI/O資源に依存せず、与えられるI/O資源は常に一定である。このため、効率的なI/O資源の割り当てができない。その理由は、非特許文献1の3.1節に記載の通り、1台のI/Oノードと複数の計算ノードを「psets」と呼ばれる集合と定義しているため、I/Oノードを計算ノードに動的に割り当てることができる構成ではないためである。
第2の問題点として、並列I/Oに必要な並列度が得られるだけのI/Oノード数が確保できるとは限らない。必要な並列度を得るためには、ハードウェア構成を変更しなければならない。その理由は、計算ノード数に対するI/Oノード数の比が固定されているためである。
特開2007−115246号公報
http://sc06.supercomputing.org/schedule/pdf/pap178.pdf
本発明の目的は、複数のI/Oノードを使用して、複数の計算ノードから並列I/Oを並列ファイルシステムへ発行する場合において、並列I/Oに必要な並列度を確保でき、且つ無駄なI/O資源を確保しない動的I/O資源の確保機能を有するI/Oノード制御方式及び方法を提供することである。
本発明のI/Oノード制御方式は、データを蓄積するファイルシステムと、ファイルシステムにアクセスするI/Oノードと、ジョブを実行し、I/O処理が発生した場合には、I/OノードにI/O要求を発行する計算ノードと、ジョブのスケジューリングを行い、あるジョブに対して、当該ジョブの実行を停止させることなく、I/Oノードを動的に割り当てるジョブサーバーとを具備する。ジョブサーバーは、ジョブ開始時においては、期待した並列度で並列I/Oを実行するために必要な数に満たない少数のI/Oノードを確保し、並列I/Oを実行する時に、不足分のI/Oノードを、他のジョブが保有するI/Oノードから一時的に横取りするI/Oノードスケジューラを具備する。
本発明のI/Oノード制御方法では、I/Oノードから、データを蓄積するファイルシステムにアクセスする。また、計算ノードで、ジョブを実行し、I/O処理が発生した場合には、I/OノードにI/O要求を発行する。また、ジョブサーバーで、ジョブのスケジューリングを行い、あるジョブに対して、当該ジョブの実行を停止させることなく、I/Oノードを動的に割り当てる。また、ジョブサーバーのI/Oノードスケジューラで、ジョブ開始時においては、期待した並列度で並列I/Oを実行するために必要な数に満たない少数のI/Oノードを確保する。また、I/Oノードスケジューラで、並列I/Oを実行する時に、不足分のI/Oノードを、他のジョブが保有するI/Oノードから一時的に横取りする。
あるジョブが並列I/Oを行う時のみ、他のジョブに割り当てられているI/Oノードを一時的に横取りすることで、ジョブ実行中であっても動的にI/Oノードをそのジョブが使用する計算ノードに割り当てることが可能となる。
並列I/O(Input/Output)を行うのに十分なI/Oノードを確保できない場合を示す図である。 本発明のI/Oノード制御方式を備えた並列計算機システムの構成図である。 本発明のI/Oノード制御方式の構成例を示すブロック図である。 I/Oノード管理テーブルの例を示す図である。 ジョブ管理テーブルの例を示す図である。 そのジョブが保有するI/Oノードだけでは並列I/Oの実行には不足である時に、その不足分を他のジョブが保有しているI/Oノードから横取りする場合を示す図である。 並列I/O実行開始時の処理の例を示すシーケンス図である。 並列I/O用I/Oノード要求時のI/Oノードスケジューラの動作を示すフローチャートである。 並列I/O終了時の処理の例を示すシーケンス図である。 並列I/O終了時のI/Oノードスケジューラの動作を示すフローチャートである。
以下に、本発明の実施形態について添付図面を参照して説明する。
図2に、本発明のI/O(Input/Output)ノード制御方式を備えた並列計算機システムの構成図を示す。図2の並列計算機システムは、相互結合ネットワーク4と制御ネットワーク5に接続された複数の計算ノード3と、相互結合ネットワーク4と並列ファイルシステムを含む任意のファイルシステム6が構築されたI/Oシステムに接続された複数のI/Oノード2と、投入されるジョブの制御を行うジョブサーバー1を備えることを前提とし、特に並列I/O用のI/O資源の割り当てを行う。
つまり、図2の計算ノード3のうち任意の1つの計算ノードは、全てのI/Oノードと通信が可能である。その計算ノードは、どのI/Oノードを使用したとしても同じファイルシステムへアクセス可能であるので、任意の計算ノードとI/Oノードの組み合わせが可能である。このため、図2の並列計算機システムは、ジョブ実行中であっても動的にI/Oノードをそのジョブが使用する計算ノードに割り当てることが可能なシステム構成であることを前提としている。
即ち、本発明のI/Oノード制御方式は、I/Oノードを動的に割りてることによる、並列I/O実行時の資源割り当ての効率化を目的としており、ジョブサーバー1は、あるジョブが並列I/Oを行う時のみ、他のジョブに割り当てられているI/Oノードを一時的に横取りする。
なお、本発明の記述において、I/Oノードは、ネットワークファイルシステム等のサーバーとクライアントの関係があるファイルシステムのクライアントとなり得るコンピュータである。また、計算ノードは、I/O要求をI/Oノードへ転送し、実際のI/O処理をI/Oノードへ依頼するという仕組みを前提としている。
図3を参照して、本発明のI/Oノード制御方式の構成例について説明する。本発明のI/Oノード制御方式は、ジョブサーバー1と、I/Oノード2と、計算ノード3と、相互結合ネットワーク4と、制御ネットワーク5と、ファイルシステム6を含む。
ジョブサーバー1は、ジョブスケジューラ101を備える。ジョブスケジューラ101は、I/Oノードスケジューラ102と、既存コンポーネント103を備える。I/Oノードスケジューラ102は、I/Oノード登録部102−1と、I/Oノード管理テーブル102−2と、ジョブ管理テーブル102−3と、I/Oノード確保/解放部102−4と、I/Oノード設定ファイル102−5と、並列I/O用I/Oノード確保/解放部102−6と、I/Oノード情報作成部102−7と、I/Oノード情報テーブル102−8と、I/Oノードグループ変更部102−9と、I/Oノード要求情報作成部102−10を備える。
I/Oノード2は、通信デーモン201と、共通処理デーモン202と、送信スレッド(主送信スレッド)203と、I/Oデーモン204と、I/Oスレッド205と、送信スレッド(副送信スレッド)206を備える。通信デーモン201は、接続確立部201−1と、プロセス生成部201−2を備える。共通処理デーモン202は、受信部202−1と、スレッド生成部202−2と、ジョブテーブル操作部202−3と、通信バッファ202−4と、プロセス間通信部202−5と、プロセス生成部202−6と、ジョブ管理テーブル202−7と、I/Oデーモン終了部202−8と、I/Oデーモン停止/再開部202−9を備える。送信スレッド203は、送信部203−1と、通信バッファ203−2と、プロセス間通信部203−3を備える。I/Oデーモン204は、プロセス間通信部204−1と、スレッド生成部204−2と、I/Oスレッド管理テーブル204−3と、I/Oバッファ確保部204−4と、I/Oバッファ管理テーブル204−5と、I/Oバッファ待ち合わせ部204−6と、I/Oスレッド起動部204−7と、ファイル管理テーブル204−8を備える。I/Oスレッド205は、待ち合わせ部205−1と、I/O部205−2を備える。送信スレッド206は、プロセス間通信部206−1と、待ち合わせ部206−2を備える。
計算ノード3は、通信部301と、ジョブ管理デーモン302と、ユーザプロセス303と、I/Oリクエスト作成部304と、I/Oノード対応テーブル305と、マウント部306と、マウントポイント対応テーブル307と、並列I/O用I/Oノード要求部308と、同期待ち部309と、I/Oノード待ち合わせ部310と、I/Oノード割り当て変更部311と、並列I/O終了通知部312を備える。
これらは、それぞれ概略次のように動作する。
●ジョブサーバー1
ジョブサーバー1は、ユーザ投入したジョブの制御を行う。本発明の場合、ジョブスケジューラ101から呼び出されるI/Oノードスケジューラ102は、ジョブサーバー1上で実行される。また、ジョブサーバー1は、各計算ノード3と通信が可能である。
ジョブスケジューラ101は、I/Oノードスケジューラ102と、従来のジョブスケジューリングの機能である既存コンポーネント103を内包する。
I/Oノードスケジューラ102は、ジョブスケジューラ101から呼び出され、ジョブ毎のI/Oノードの割り当て、又は解放等に関連した処理を行う。
I/Oノードスケジューラ102内のI/Oノード登録部102−1は、I/Oノード設定ファイル102−5から「各I/Oノードの番号」、「最大I/Oスレッド数」、「IPアドレス」を読み出し、I/Oノード管理テーブル102−2へ登録する。
I/Oノードスケジューラ102内のI/Oノード管理テーブル102−2は、I/Oノード登録部102−1により作成される。I/Oノード管理テーブル102−2の例を、図4に示す。図4に示すように、I/Oノード管理テーブル102−2は、「I/Oノード番号」と、「グループ」と、「横取りジョブ番号」と、「横取り計算ノード番号」と、「IPアドレス」を含む。また、I/Oノードスケジューラ102内のI/Oノード管理テーブル102−2は、I/Oノード確保/解放部102−4、並列I/O用I/Oノード確保/解放部102−6、I/Oノードグループ変更部102−9により、参照、更新される。
I/Oノードスケジューラ102内のジョブ管理テーブル102−3は、各ジョブが保有している計算ノードとそれに対応するI/Oノードとの対応のために使用する。ジョブ管理テーブル102−3の例を、図5に示す。図5に示すように、ジョブ管理テーブル102−3は、「ジョブ番号」と、「計算ノード番号」と、「I/Oノード番号」を含む。また、I/Oノードスケジューラ102内のジョブ管理テーブル102−3は、I/Oノード確保/解放部102−4、並列I/O用I/Oノード確保/解放部102−6により、参照、更新される。
I/Oノードスケジューラ102内のI/Oノード確保/解放部102−4は、ジョブ起動時において、当該ジョブが要求するI/Oノード数分のI/Oノードの選択と確保を行う。また、I/Oノードスケジューラ102内のI/Oノード確保/解放部102−4は、ジョブ終了時において、当該ジョブが使用していたI/Oノードの解放を行う。また、I/Oノードスケジューラ102内のI/Oノード確保/解放部102−4は、上記の処理において、I/Oノード管理テーブル102−2、ジョブ管理テーブル102−3を検索、更新する。
I/Oノードスケジューラ102内のI/Oノード設定ファイル102−5は、「各I/Oノードの番号」、「最大I/Oスレッド数」、「IPアドレス」を記録しておくファイルであり、ジョブサーバー1に直接接続されたディスク装置上に構築されたファイルシステムに保存されている。I/Oノードスケジューラ102内のI/Oノード設定ファイル102−5は、システム管理者がI/Oノードの設定を行う際に作成、変更される。また、I/Oノードスケジューラ102内のI/Oノード設定ファイル102−5は、ジョブサーバー1を起動する際に、I/Oノード登録部102−2により読み込まれる。
I/Oノードスケジューラ102内のI/Oノード確保/解放部102−6は、I/Oノード管理テーブル102−2へ反映されるI/Oノードスケジューラ102内の並列I/O用I/Oノードを確保したり解放したりする。また、I/Oノードスケジューラ102内のI/Oノード確保/解放部102−6は、計算ノード3から、並列I/O用I/Oノード要求を受信した際、I/Oノード管理テーブル102−2、ジョブ管理テーブル102−3を参照し、並列I/Oに使用できるI/Oノードを抽出する。また、I/Oノードスケジューラ102内のI/Oノード確保/解放部102−6は、並列I/O終了通知を受信した際、受信された「ジョブ番号」をキーにして、ジョブ管理テーブル102−3を検索し、当該ジョブのエントリを特定し、特定されたエントリの中の「計算ノード番号」を抽出する。なお、並列I/O終了通知には、終了したジョブの「ジョブ番号」(JID)が含まれる。
I/Oノードスケジューラ102内のI/Oノード情報作成部102−7は、I/Oノードの確保後、計算ノード毎にI/Oノード情報を作成する際に用いる。ここでは、I/Oノードスケジューラ102内のI/Oノード情報作成部102−7は、当該ジョブで使用する計算ノード数分のI/Oノード情報テーブルの領域をメモリ上に確保し、ジョブ管理テーブル102−3に登録した当該ジョブについて、計算ノード毎に対応する「I/Oノード番号」とその「IPアドレス」を記録する。
I/Oノードスケジューラ102内のI/Oノード情報作成テーブル102−8は、上記のI/Oノード情報作成部102−7により作成され、計算ノード毎に対応するI/Oノードの情報を記録する。I/Oノードスケジューラ102内のI/Oノード情報作成テーブル102−8は、ジョブ起動時に一時的に作成される表である。
I/Oノードスケジューラ102内のI/Oノードグループ変更部102−9は、並列I/O用のI/Oノード割り当て時において、図4に示すI/Oノード管理テーブル102−2の「グループ」の項目をBグループ(「B」)からAグループ(「A」)へ変更する。更に、I/Oノードスケジューラ102内のI/Oノードグループ変更部102−9は、「横取りジョブ番号」と「横取り計算ノード番号」に、当該ジョブの「ジョブ番号」と割り当てた「計算ノード番号」を格納する。また、I/Oノードグループ変更部102−9は、並列I/O用I/Oノード解放時において、I/Oノード管理テーブル102−2内の「横取りジョブ番号」、「横取り計算ノード番号」が「ジョブ番号」、「計算ノード番号」と一致する全てのエントリについて、Aグループ(「A」)からBグループ(「B」)へ変更し、「横取りジョブ番号」と、「横取り計算ノード番号」を消去する。
I/Oノードスケジューラ102内のI/Oノード要求情報作成部102−10は、I/Oノード要求情報をジョブスケジューラから、I/Oノードスケジューラを呼び出す際に渡される。この際、I/Oノードスケジューラ102内のI/Oノード要求情報作成部102−10は、ジョブスケジューラから渡されたI/Oノード要求情報を参照し、I/Oノード数が「0」の場合、当該ジョブが必要とするI/O資源量(I/Oノード数)を推定し、I/Oノード数と各I/Oノードの占有率を決める。
既存コンポーネント103は、従来のジョブスケジューリングの機能を指す。従来のジョブスケジューリングの機能とは、例えば、計算ノードやCPU数の割り当て、メモリ、CPUの使用量等の資源管理機能、ジョブの優先度、実行中のジョブを任意の時点で停止させて当該ジョブの使用するメモリをファイルに記録するチェックポイント、又は同ファイルを基にチェックポイント時点から再実行するリスタート等のジョブ制御の機能と、各計算ノードとの通信機能のことである。
●I/Oノード2
I/Oノード2は、サーバー、クライアントの関係があるファイルシステムのクライアントとなり得るコンピュータである。本発明の場合、計算ノード3がI/O処理をI/Oノード2へ転送し、実際のI/O処理をI/Oノード2へ依頼するという仕組みを前提としている。また、本発明の場合、どのI/Oノード2からでも、同じファイルシステム6をアクセスできることを前提とする。即ち、複数のI/Oノード2の各々は、同じファイルシステム6をアクセスできるものとする。このため、各I/Oノード2は、同じパス名でファイルシステム6をマウントする必要がある。
通信デーモン201は、計算ノード3からの接続要求があると、接続を確立するためのデーモンであり、各I/Oノード2に1つ存在する。各I/Oノード2内の通信デーモン201は、接続要求があった計算ノード3との接続が確立すると、共通処理デーモン202を生成し、以後計算ノード3と通信は、共通処理デーモン202が行う。
通信デーモン201内の接続確立部201−1は、上記の通信デーモン201の接続確立のためのプリミティブ(primitive)である。なお、プリミティブとは、ある大きな構造を表現するのに使われる最も基本的な構成要素を示す。
通信デーモン201内のプロセス生成部201−2は、共通処理デーモン202を生成するために使用する。通信デーモン201内のプロセス生成部201−2は、オペレーティングシステム(OS)が提供するプロセスを生成するためのシステムコールを利用する。
共通処理デーモン202は、計算ノード3からの接続要求毎に通信デーモン201によって生成される。また、共通処理デーモン202は、計算ノード3からのパケットの受信、及びI/Oデーモンへの送信を行う。
共通処理デーモン202内の受信部202−1は、計算ノード3と接続確立した際のソケットを使用し、当該計算ノード3から送信されるパケットの受信、待ち合わせを行うプリミティブである。
共通処理デーモン202内のスレッド生成部202−2は、送信スレッド203を生成する。また、共通処理デーモン202内のスレッド生成部202−2は、「POSIX(Portable Operating System Interface for UNIX(登録商標))」スレッド等、一般に利用可能なスレッドライブラリを利用する。
共通処理デーモン202内のジョブテーブル操作部202−3は、生成されたI/Oデーモン204の「プロセスID」(以下、PID)を対応する「ジョブ番号」(以下、JID)のエントリへ登録する。また、共通処理デーモン202内のジョブテーブル操作部202−3は、受信パケットを送信すべきI/Oデーモン204を特定するために、「ジョブ番号」(JID)をキーとして、ジョブ管理テーブル202−7を検索する。
共通処理デーモン202内の通信バッファ202−4は、計算ノード3から送信されるパケットを格納する。本発明の場合、I/Oデーモン204へ送信する際も、計算ノード3から受信する際と同じバッファを使用する。即ち、共通処理デーモン202内の通信バッファ202−4は、I/Oデーモン204へ送信するパケットを格納する。
共通処理デーモン202内のプロセス間通信部202−5は、共通処理デーモン202からI/Oデーモン204へI/O要求等を受け渡すために使用し、同じコンピュータ(I/Oノード)内でのプロセス間の通信のためのプリミティブである。
共通処理デーモン202内のプロセス生成部202−6は、ジョブ起動時において、共通処理デーモン202が、計算ノード3から初期化情報を受信した際、I/Oデーモンを生成するために使用するものである。共通処理デーモン202内のプロセス生成部202−6は、オペレーティングシステム(OS)が提供するプロセスを生成するためのシステムコールを利用する。
共通処理デーモン202内のジョブ管理テーブル202−7は、I/Oデーモン204とジョブの対応をとるため、当該ジョブのジョブIDとI/Oデーモン204の「プロセスID」、及び並列I/Oの目印を記録するための対応表である。
共通処理デーモン202内のI/Oデーモン終了部202−8は、ジョブ終了時に、共通処理デーモン202−1が計算ノード3からジョブの終了通知を受信した際に、当該ジョブに対応するI/Oデーモン204に終了シグナルを送信する。
共通処理デーモン202内のI/Oデーモン終了部202−9は、並列I/Oの実行開始時、及び終了時において、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモンとその配下のスレッドを停止、再開させるための処理を行う。例えば、共通処理デーモン202内のI/Oデーモン終了部202−9は、並列I/Oを実行する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモンとその配下のスレッドを一時的に停止させるための処理を行う。また、共通処理デーモン202内のI/Oデーモン終了部202−9は、並列I/Oを終了する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモンとその配下のスレッドを再開させるための処理を行う。
送信スレッド203は、共通処理デーモン202が生成するスレッドであり、共通処理デーモン202とは独立に動作できるがメモリを共有できる。送信スレッド203は、I/O処理の実行結果等を当該計算ノード3へ返送するために使用する。
送信スレッド203内の送信部203−1は、計算ノード3と接続確立した際のソケットを使用し、当該計算ノードへパケットを送信するためのプリミティブである。
送信スレッド203内の通信バッファ203−2は、送信スレッド206からの受信、及び計算ノード3への送信の際に使用するバッファである。
送信スレッド203内のプロセス間通信部203−3は、送信スレッド206から送信されるデータを受信するために使用し、同じコンピュータ(I/Oノード)内でのプロセス間の通信のためのプリミティブである。
I/Oデーモン204は、I/Oスレッド205、I/Oバッファの管理、スレッドの生成等を行うデーモンであり、一般に複数のI/Oスレッド205と1つの送信スレッド206を生成する。I/Oデーモン204は、ジョブ毎に1つ存在する。
I/Oデーモン204内のプロセス間通信部204−1は、共通処理デーモン202が計算ノード3から受信したI/O要求等のパケットを受信するために使用し、同じコンピュータ(I/Oノード)内でのプロセス間の通信のためのプリミティブである。
I/Oデーモン204内のスレッド生成部204−2は、I/Oスレッド205と送信スレッド206を生成する。なお、I/Oデーモン204内のスレッド生成部204−2は、「POSIX」スレッド等、一般に利用可能なスレッドライブラリを利用する。
I/Oデーモン204内のI/Oスレッド管理テーブル204−3は、「ジョブ最大I/Oスレッド数」、「生成済みのI/Oスレッド数」、「現在I/O処理実行中のI/Oスレッド数」を管理する。また、I/Oデーモン204内のI/Oスレッド管理テーブル204−3は、当該I/Oスレッドが使用中であることを示すためにI/O実行中フラグを用いる。
I/Oデーモン204内のI/Oバッファ確保部204−4は、共通処理デーモン202から送信されるI/O要求等のパケットの受信バッファ、及びI/Oスレッド205がI/Oを発行するためのバッファを確保する。I/Oデーモン204内のI/Oバッファ確保部204−4は、I/O要求等のパケットを、共通処理デーモン202から受信し、I/O終了後、送信スレッド206が送信スレッド203へ送信するまでの間、同じバッファを使用するので、メモリ間のコピーをする必要がない。
I/Oデーモン204内のI/Oバッファ管理テーブル204−5は、図6に示すようなイメージでI/Oバッファを管理する。図6の詳細については後述する。また、I/Oデーモン204内のI/Oバッファ管理テーブル204−5は、I/Oバッファの現在の状態を示すために、受信待ちフラグ、I/O待ちフラグ、I/O実行中フラグ、返却待ちフラグを用いる。
I/Oデーモン204内のI/Oバッファ待ち合わせ部204−6は、I/Oバッファ確保部204−4によりI/Oバッファを確保しようとした際、既にI/Oバッファを確保できる上限値まで達しており確保できない場合がある。この場合、I/Oデーモン204内のI/Oバッファ待ち合わせ部204−6は、他の使用中のI/Oバッファが空くまで待ち合わせを行う。
I/Oデーモン204内のI/Oスレッド起動部204−7は、I/Oスレッド管理テーブル204−3を参照し、空きI/Oスレッドがあるかどうかを調べる。I/Oデーモン204内のI/Oスレッド起動部204−7は、空きスレッドがある場合、I/Oスレッド管理テーブル204−3から使用中ではない(I/Oで使用中を示すフラグが設定されていない)I/Oスレッドを1つ選び、選ばれたI/OスレッドにI/O処理中フラグを設定し、待ち合わせ部205−1でI/O要求を待ち合わせているI/Oスレッド205を再実行する処理を行う。
I/Oデーモン204内のファイル管理テーブル204−8は、計算ノード3で展開(「open」)されたファイルと、I/Oノード2がマウントしているファイルシステム上のファイルとの対応を取るために使用する。また、I/Oデーモン204内のファイル管理テーブル204−8は、計算ノード3の「IPアドレス」、I/Oを要求したプロセスの「プロセスID」(PID)、「ファイルディスクリプタ」(以下、FD)と、I/Oノード2上での「ファイルディスクリプタ」(FD)の対応を格納する。
I/Oスレッド205は、計算ノード3から要求されたI/O処理を実際に実行する。この際、I/Oスレッド205は、I/Oバッファ管理テーブル204−5から、I/O待ちフラグが設定されているI/Oバッファを1つ選択し、そのバッファ内容に応じてI/O対象を決める。I/Oスレッド205は、I/Oデーモン204が生成するスレッドであり、I/Oデーモン204とは独立に動作できるがメモリを共有できる。また、I/Oスレッド205は、「ジョブ最大I/Oスレッド数」まで、ジョブ毎に生成可能である。
I/Oスレッド205内の待ち合わせ部205−1は、計算ノード3からI/O要求が来るまで、待ち合わせを行う。また、I/Oスレッド205内の待ち合わせ部205−1は、I/O要求を受信すると、I/Oデーモン204がI/Oスレッド起動部204−7により再実行する。
I/Oスレッド205内のI/O部205−2は、計算ノード3からのI/O要求に基づき、「open」/「read」/「write」等々のシステムコールをI/Oノード2がマウントしているファイルシステムに対して実行し、実行が終了すると実行結果を加えた当該I/Oバッファに格納し、送信スレッド206を再実行する。
送信スレッド206は、I/O処理の終了したI/OバッファのI/O要求をI/Oバッファ管理テーブル204−5から1つ取り出し、プロセス間通信部206−1により、送信スレッド203へ送信する。
送信スレッド206内のプロセス間通信部206−1は、送信スレッド203へI/O処理が終了したI/Oバッファ内のデータを送信する。送信スレッド206内のプロセス間通信部206−1は、同じコンピュータ(I/Oノード)内でのプロセス間の通信のためのプリミティブである。
送信スレッド206内の待ち合わせ部206−2は、I/O処理が終了してからI/Oスレッド205により再実行されるまで、待ち合わせを行う。
●計算ノード3
計算ノード3は、一般に複数存在し、特定のジョブに属する複数のユーザプロセスにおいてユーザのアプリケーションプログラムを実行するコンピュータである。図2に示すように、計算ノード3は、ジョブサーバー1、任意のI/Oノード2、及び任意の(他の)計算ノード3と通信が可能である。
通信部301は、ジョブサーバー1、及びI/Oノード2と通信を行うための仕組み。
ジョブ管理デーモン302は、ジョブスケジューラ101からの通信を受け取り、各計算ノードにおけるジョブの起動等の制御を行う。
ユーザプロセス303は、一般に複数のユーザプロセスを含む。また、ユーザプロセス303は、ジョブサーバー1から起動される特定のジョブに属する。また、ユーザプロセス303は、ユーザのアプリケーションプログラムを実行し、必要に応じて、ライブラリ関数やシステムコールにより割り当てられたI/Oノード2へI/Oを要求する。
I/Oリクエスト作成部304は、ユーザプロセス303から、I/Oノード2がマウントしているファイルシステムへ「read」/「write」やその他のファイル、ファイルシステムに対する操作を行う場合、その要求を対応するI/Oノード2へ送信するためのリクエストを作成する。また、I/Oリクエスト作成部304は、リトライする機能、及び他のI/Oノードが存在する場合、I/Oノードを切り替えてリトライする機能を持つ。
I/Oノード対応テーブル305は、計算ノード3に割り当てられたI/Oノード2の対応表である。また、I/Oノード対応テーブル305は、ジョブ毎に、対応するI/Oノードの「IPアドレス」や、通信に用いるソケットを記録する。
マウント部306は、計算ノード3上のユーザプロセス303が、「open」等ファイルやディレクトリのパス名を指定するシステムコールを呼び出したとき、I/Oノード2におけるパス名に変換する必要がある。そのため、マウント部306は、マウントコマンドで指定された計算ノード3のマウントポイントのパス名と、I/Oノード2でのマウントポイントのパス名の対応をマウントポイント対応テーブル307へ記録する。
マウントポイント対応テーブル307は、上記のマウントコマンドで指定された計算ノード3のマウントポイントのパス名と、I/Oノード2でのマウントポイントのパス名の対応を保持するためのテーブルである。
並列I/O用I/Oノード要求部308は、ジョブ管理デーモン302が、必要な「I/Oノード数」と当該ジョブの「ジョブ番号」をジョブサーバー1へ送信する際に使用する。
同期待ち部309は、計算ノード3内のユーザプロセス303が同一ジョブ内の他の計算ノードのユーザプロセスと同期する必要がある場合、ユーザプロセス303の動作を、同一ジョブ内の全てのユーザプロセスが同期ポイントに到達するまで待ち合わせるための処理を行う。すなわち、計算ノード3内のユーザプロセス303が同一ジョブ内の他の計算ノードのユーザプロセスと同期する必要がある場合、ユーザプロセス303は、同期待ち部309の機能により、同一ジョブ内の全てのユーザプロセスが同期ポイントに到達するまで待ち合わせる。
I/Oノード待ち合わせ部310は、計算ノード3の1つであるマスターノード上のユーザプロセス303の動作を、ジョブ管理デーモン302がジョブサーバー1、I/Oノード2との通信を終了するまで待ち合わせるための処理を行う。すなわち、計算ノード3がマスターノードである場合、ユーザプロセス303は、I/Oノード待ち合わせ部310の機能により、ジョブ管理デーモン302がジョブサーバー1、I/Oノード2との通信を終了するまで待ち合わせる。
I/Oノード割り当て変更部311は、通信部301を経由して当該I/Oノード2へI/Oノード変更要求を送信する際に用いる機能である。I/Oノード変更要求には、当該ジョブの「ジョブ番号」と、「計算ノード番号」が含まれる。
●相互結合ネットワーク4
相互結合ネットワーク4は、複数の計算ノード3を使用して並列処理を行うジョブにおいて、計算ノード3との間におけるデータやメッセージの交換、及び計算ノード3とI/Oノード2間におけるI/OデータとI/Oのための制御データの通信に用いる。また、相互結合ネットワーク4は、任意の計算ノード3との間、又は任意の計算ノード3とI/Oノード2間において、高速に通信が可能なネットワークとする。但し、相互結合ネットワーク4は、一般に利用可能な、「Ethernet(登録商標)」や「Infiniband」等でも良い。
●制御ネットワーク5
制御ネットワーク5は、ジョブサーバー1と計算ノード3との間において、ジョブの起動、終了時において必要な通信を行う。また、制御ネットワーク5は、「Ethernet(登録商標)」等、一般に利用可能なネットワークを利用する。
●ファイルシステム6
ファイルシステム6は、I/Oノード2からアクセス可能である。ファイルシステム6の例として、「POSIX」等の一般的に知られたインターフェースを提供する任意の並列ファイルシステム、ネットワークファイルシステム、又はクラスタファイルシステム等が考えられる。また、ファイルシステム6は、システム管理者によって、I/Oノード2の起動時に各I/Oノード2から同じパス名をマウントポイントとしてマウントされていることを前提とする。なお、ファイルシステム6は、複数のファイルシステムをマウントする場合、ファイルシステム毎にマウントポイントのパス名を変更する必要があるが、各I/Oノード2からはファイルシステム毎に同じパス名でマウントする。
<動作の説明>
次に、本発明の実施形態の動作について詳細に説明する。
なお、ジョブサーバー1と計算ノード3、及び計算ノード3とI/Oノード2は、それぞれTCP/IP等の一般的な通信プロトコルを用いて通信できるものとする。また、それぞれのオペレーティングシステム(OS)は、「UNIX(登録商標)」や「Linux(登録商標)」等を前提とする。
◆基礎となるI/O資源の割り当て、及びI/O処理の動作
最初に、図3、図4、図5を参照して、並列I/Oが要求された場合の動作の説明に先立って、その基礎となるI/O資源の割り当て、及びI/O処理の動作を説明する。但し、I/Oノード登録時、ジョブ起動時、I/O実行時、ジョブ終了時について、処理が異なるので、これらを分けて記載する。
●I/Oノード登録時
ジョブサーバー1の起動時において、I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2、ジョブ管理テーブル102−3の領域をメモリ上に確保し、I/Oノード登録部102−1によりI/Oノード設定ファイル102−5から「各I/Oノードの番号」、「最大I/Oスレッド数」、「IPアドレス」を読み出し、I/Oノード管理テーブルへ登録する。また、システム運用中において、システム管理者は、管理用のコマンドを用いて上記と同様に「I/Oノードの番号」、「最大I/Oスレッド数」、「IPアドレス」を入力することで、I/Oノードを追加することができる。
●ファイルシステムのマウント時
ファイルシステム6へ直接アクセスするのはI/Oノード2であり、I/Oを要求するのは計算ノード3である。従って、I/Oノード2がマウントしたファイルシステム6と計算ノード3との対応関係を示す情報が必要となる。このとき、NFS等のネットワークファイルシステムをマウントする場合と同様なインターフェースを用い、あたかもI/Oノード2がネットワークファイルシステムのサーバーであるかのように、各計算ノード3からシステム管理者がマウントコマンドを実行する。
上記において、ファイルシステムタイプがI/Oノードであることを示している場合は、マウント部306により、指定されたI/Oノード2上のマウントポイントのパス名とそれに対する計算ノード3のマウントポイントのパス名の対応関係を示す情報をマウントポイント対応テーブル307の空きエントリに登録する。なお、マウントポイント対応テーブル307の領域は、計算ノード3の起動時にメモリ上に確保される。即ち、計算ノード3は、起動時に、マウントポイント対応テーブル307の領域をメモリ上に確保する。但し、I/Oノード2からファイルシステム6を使用できるように、予めシステム管理者がマウントしていることを前提とする。
●ジョブ起動時
ジョブサーバー1内のジョブスケジューラ101は、I/Oノード要求情報を作成し、I/Oノードスケジューラ102を呼び出す。I/Oノード要求情報には、「I/Oノード数」と、「計算ノード数」と、各計算ノードの「IPアドレス」と、「要求するメモリ容量」と、「実装メモリ容量」が含まれる。但し、ジョブスケジューラ101は、「I/Oノード数」に関して、並列I/Oに十分な「I/Oノード数」をジョブ起動時には確保せず、例えば要求された「計算ノード数」の1/N(N:正の整数)のI/Oノードのみを要求する。そして、I/Oノード要求情報は、ジョブスケジューラ101から、I/Oノードスケジューラ102を呼び出す際に渡されることとする。即ち、ジョブスケジューラ101は、I/Oノードスケジューラ102を呼び出す際に、I/Oノードスケジューラ102にI/Oノード要求情報を渡す。
次に、I/Oノード確保/解放部102−4は、図4に示すようなI/Oノード管理テーブル102−2を検索し、Bグループ(「B」)のI/Oノードを抽出する。そして、I/Oノード確保/解放部102−4は、ジョブ管理テーブル102−3を検索し、それらI/Oノードの中から当該ジョブへ割り当てるI/Oノードを決める。但し、I/Oノード確保/解放部102−4は、要求された台数分のI/Oノードが確保できない場合は、要求された台数分のI/Oノードが確保できない旨のエラーをジョブスケージュラ101に返す。I/Oノード確保/解放部102−4は、要求された台数分のI/Oノードが確保できた場合は、確保できたI/Oノードを通常I/O用I/Oノード(Bグループ(「B」))として、I/Oノード管理テーブル102−2へ登録し、ジョブ管理テーブル102−3に当該ジョブのエントリを新たに確保し、「ジョブ番号」と、「計算ノード番号」と、それに対応する「I/Oノード番号」を格納する。
次に、I/Oノード情報作成部102−7は、計算ノード毎にI/Oノード情報を作成する。まず、I/Oノード情報作成部102−7は、当該ジョブで使用する計算ノード数分のI/Oノード情報テーブル102−8の領域をメモリ上に確保し、ジョブ管理テーブル102−3に登録した当該ジョブについて、各計算ノード3毎に対応する「I/Oノード番号」とその「IPアドレス」を記録する。そして、I/Oノード情報作成部102−7は、制御権をジョブスケジューラ101へ返却する。ジョブスケジューラ101は、I/Oノード情報作成部102−7からの制御権の返却後、I/Oノード情報テーブル102−8の領域を解放する。
この後、ジョブスケジューラ101は、上記I/Oノード情報を含むジョブ起動に関する情報を各計算ノード3に送信する。
計算ノード3内の通信部301は、ジョブスケジューラ101からジョブ起動のための必要な情報を含むパケットを受信する。
計算ノード3内のジョブ管理デーモン302は、通信部301がジョブスケジューラ101からジョブ起動のための必要な情報を含むパケットを受信すると、ユーザプロセス303を起動する前に、ジョブ毎にI/Oノード対応テーブル305の領域をメモリ上に確保し、I/Oノード対応テーブル305へ同パケット内に含まれるI/Oノード情報を当該ジョブの「ジョブ番号」(JID)と共に格納する。
次に、ジョブ管理デーモン302は、当該I/Oノードとの通信のための接続が確立されていない場合は、通信部301により接続要求を行う。そして、ジョブ管理デーモン302は、この結果として作成されたソケットをI/Oノード対応テーブル305へ記録する。ジョブ管理デーモン302は、I/Oノードとの接続が確立されると、通信部301へ、当該ジョブの「ユーザID」(以下、UID)、「グループID」(以下、GID)、「補足グループID」等の認証情報、「ジョブ番号」(JID)、当該ジョブに許される生成可能なI/Oスレッド数として「ジョブ最大I/Oスレッド数」、及び初期化情報であることを示す識別子を含む初期化情報を送信する。
通信部301は、上記の初期化情報を、相互結合ネットワーク4を介して、共通処理デーモン202へ送信する。
I/Oノード2内の通信デーモン201は、各I/Oノード2に1つ存在し、計算ノード3からの接続要求があると、計算ノード3との接続確立後、共通処理デーモン202を1つ生成する。
生成された共通処理デーモン202は、スレッド生成部202−2により送信スレッド203を生成する。その後、共通処理デーモン202は、通信バッファ202−4、ジョブ管理テーブル202−7の領域をメモリ上に確保し、受信部202−1により当該計算ノード3からの受信待ち状態となる。
また、送信スレッド203は、通信バッファ203−2の領域をメモリ上に確保し、プロセス間通信部203−3によりI/Oの終了通知に対する受信待ち状態となる。
次に、共通処理デーモン202は、計算ノード3から初期化情報を受信すると、プロセス生成部202−6によりI/Oデーモン204を生成し、ジョブテーブル操作部202−3によりI/Oデーモン204の「プロセスID」(PID)を生成し、生成された「プロセスID」(PID)をジョブ管理テーブル202−7の対応する「ジョブ番号」(JID)のエントリへ登録し、プロセス間通信部202−5により、同初期化情報を、生成されたI/Oデーモン204へ送信する。
次に、生成されたI/Oデーモン204は、I/Oスレッド管理テーブル204−3、I/Oバッファ管理テーブル204−5、ファイル管理テーブル204−8の領域をメモリ上に確保し、I/Oバッファ確保部204−4によりI/Oバッファを固定長のバッファとして1つ確保して受信待ちを示すフラグを設定し、I/O管理テーブル204−5へ登録する。
次に、I/Oデーモン204は、スレッド生成部204−2により、送信スレッド206を1つ生成する。そして、I/Oデーモン204は、確保したバッファを受信領域として、プロセス間通信部204−1により共通処理デーモン202に対して受信待ち状態となる。
生成された送信スレッド206は、待ち合わせ部206−2により待ち合わせ状態となる。
次に、I/Oデーモン204は、共通処理デーモン202から、初期化情報を受信すると、同情報内にある認証情報を基に、実効の「ユーザID」、「グループID」、「補足グループID」等を計算ノード3上のユーザプロセス303と同じ値に設定する。そして、I/Oデーモン204は、当該ジョブに許される生成可能なI/Oスレッド数として「ジョブ最大I/Oスレッド数」をI/Oスレッド管理テーブル204−3に登録する。その後、I/Oデーモン204は、再度、プロセス間通信部204−1により、共通処理デーモン202からの受信待ち状態となる。
なお、共通処理デーモン202は、所定の計算ノード3と1対1の関係にある。通信デーモン201は、他の計算ノード3からの接続要求があった場合、その計算ノード3と接続を確立し、新たに共通処理デーモン202を生成する。
●ジョブ終了時
計算ノード3内のジョブ管理デーモン302は、ユーザプロセス303が全て終了したことを検知すると、I/Oノード対応テーブル305を参照し、対応するI/Oノード2へジョブ終了通知を示すパケットを送信する。
即ち、計算ノード3内の通信部301は、ジョブ終了通知であることを示す「パケット識別子」と、「計算ノード番号」、当該ジョブの「ジョブ番号」(JID)を格納したパケットを、対応するI/Oノード2へ送信する。その後、計算ノード3内の通信部301は、ジョブサーバー1のジョブスケジューラ101へ当該ジョブの終了通知を送信する。
I/Oノード2内の共通処理デーモン202は、ジョブテーブル操作部202−3により、受信パケット内の「ジョブ番号」(JID)をキーとして、ジョブ管理テーブル202−7を検索し、当該ジョブに対応するI/Oデーモン204を特定し、そのエントリを削除する。そして、共通処理デーモン202は、I/Oデーモン終了部202−8により、I/Oデーモン204へ終了シグナルを送信し、I/Oデーモン204とその配下の全てのI/Oスレッド205と送信スレッド206を終了させる。この際、共通処理デーモン202は、I/Oデーモン終了部202−8により、確保されていたI/Oバッファ等の領域も全て解放する。
ジョブサーバー1は、ジョブの終了通知を受信すると、ジョブスケジューラ101からI/Oノードスケジューラ102を呼び出し、I/Oノードスケジューラ102により、確保したI/Oノードの解放処理を行う。この際、ジョブスケジューラ101からI/Oノードスケジューラ102に、終了した「ジョブ番号」(JID)も渡される。即ち、ジョブサーバー1は、ジョブの終了通知を受信すると、ジョブスケジューラ101により、I/Oノードスケジューラ102に、終了したジョブの「ジョブ番号」(JID)を渡す。そして、I/Oノードスケジューラ102は、I/Oノード確保/解放部102−4により、「ジョブ番号」をキーとして、ジョブ管理テーブル102−3を検索し、該当するエントリを特定する。
次に、I/Oノードスケジューラ102は、使用していた「計算ノード番号」と「I/Oノード番号」を抽出した後、ジョブ管理テーブル102−3の当該エントリを削除する。次に、I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2を検索し、当該ジョブが使用していたI/Oノードのエントリを特定する。そして、I/Oノードスケジューラ102は、当該エントリの「グループ」がAグループ(「A」)であり、「横取りジョブ番号」と「横取り計算ノード番号」が、当該ジョブの「ジョブ番号」と「計算ノード番号」のいずれかと一致する場合は、「グループ」をBグループ(「B」)に戻し、「横取りジョブ番号」と「横取り計算ノード番号」をクリアする。その後、I/Oノードスケジューラ102は、ジョブスケジューラ101に制御を戻す。
●I/O実行時
計算ノード3上において、ジョブ内のユーザプロセス303は、「open」/「read」/「write」/「close」等のI/Oに関係するシステムコールを呼び出し、I/Oを発行する。
ユーザプロセス303は、呼び出したシステムコールの種別が「read」/「write」である場合、一度にI/Oノード2に転送できるサイズ(以下、転送サイズ)と、「read」/「write」等のシステムコールの引数として与えられたユーザ要求I/Oサイズを比較し、ユーザ要求I/Oサイズの方が大きい場合は転送サイズ毎に分割したサイズをI/Oサイズとして逐次に、処理を行う。
I/Oリクエスト作成部304は、計算ノード3上で保持する当該ファイルの属性情報を示す「パケット識別子」を格納する。この属性情報の例として、当該ファイルの「ファイルディスクリプタ」(FD)、又はファイルやディレクトリのパス名、カレントディレクトリのパス名、システムコールを呼び出したプロセスの「プロセスID」(PID)と計算ノード3の「IPアドレス」、当該ユーザプロセス303が属するジョブの「ジョブ番号」(JID)、認証情報(「ユーザID」、「グループID」、「補足グループID」等)が考えられる。また、システムコールの種別が「read」/「write」の場合は、この属性情報の例として、更に、I/Oサイズ、現在のファイルオフセット、及びシステムコールの種別(「open」,「read」,「write」等)が考えられる。次に、I/Oリクエスト作成部304は、システムコールの種別が「write」の場合は、「write」データが格納されているメモリのアドレスからI/Oサイズ分の長さを読み出し、上記パケットの最後に付加する。上記において、I/Oリクエスト作成部304は、ファイルやディレクトリのパス名、及びカレントディレクトリのパス名について、マウントポイント対応テーブル307を検索し、計算ノード3上におけるパス名に対応するI/Oノード2でのルートファイルシステムからのフルパス名に変換する必要がある。そして、I/Oリクエスト作成部304は、I/Oノード対応テーブルを参照し、当該ジョブに対応するI/Oノード2のソケットを特定し、そのソケットを指定して同パケットを送信する。
I/Oノード2において、共通処理デーモン202は、受信部202−1により、上記パケットを受信する。そして、共通処理デーモン202は、受信されたパケットのデータが格納されている通信バッファ202−4内の「ジョブ番号」(JID)を参照し、その「ジョブ番号」(JID)をキーとして、ジョブテーブル操作部202−3によりジョブ管理テーブル202−7を検索し、該当するI/Oデーモン204を特定する。そして、当該I/Oデーモン204へ受信したパケットをプロセス間通信部202−5により送信する。
この後、I/Oデーモン204が、プロセス間通信部204−1により共通処理デーモン202から送信されたパケットを受信すると、受信バッファの格納されているバッファに対応するI/Oバッファ管理テーブル204−5のエントリにI/O待ちフラグを設定して受信待ちのフラグをクリアし、I/Oスレッド起動部204−7により、同パケット内のジョブ毎に生成可能な「最大I/Oスレッド数」をI/Oスレッド管理テーブル204−3に登録し、同テーブル内の下記を参照する。
a:ジョブ最大I/Oスレッド数
b:生成済みのI/Oスレッド数
c:現在I/O処理実行中のI/Oスレッド数
(a,b,cは、それぞれ0以上の整数値)
この際、以下の3通りの条件があり得る。
b > c ―(1)
b <= c,b < a ―(2)
b >= a ―(3)
(1)の場合、空きスレッドがあるので、I/Oスレッド管理テーブル204−3から使用中ではない(I/Oで使用中を示すフラグが設定されていない)I/Oスレッドを1つ選び、それにI/O処理中フラグを設定し、待ち合わせ部205−1でI/O要求を待ち合わせているI/Oスレッド205を再実行する。
(2)の場合、空きスレッドは存在しないが、まだ生成可能なので、スレッド生成部204−2は、新たなスレッドを生成し、I/Oスレッド管理テーブル204−3へ登録し、I/O処理中フラグを設定する。生成されたスレッドは、一旦待ち合わせ部205−1で停止するので、同I/Oスレッド205を再実行する。
(3)の場合、空きスレッドがなく、且つ「ジョブ最大I/Oスレッド数」に達しているので、これ以上I/Oスレッドを生成することができない状態である。この場合、処理中のI/Oスレッド205が空くまで、I/Oバッファ管理テーブル204−5に繋がれたままとなる。
この後、I/Oデーモン204は、再度、共通処理デーモン202からの受信待ちのために、I/Oバッファ確保部204−4によりI/Oバッファ管理テーブル204−5を参照し、使用中ではない(フラグが設定されていない)I/Oバッファを検索する。I/Oデーモン204は、使用中ではない(フラグが設定されていない)I/Oバッファが見つからない場合は、I/Oバッファ確保部204−4により新たにI/Oバッファを1つ確保して受信待ちフラグを設定し、I/Oバッファ管理テーブル204−5へ登録する。I/Oデーモン204は、使用中ではない(フラグが設定されていない)I/Oバッファが見つかった場合、I/Oバッファ確保部204−4によりそのエントリに受信待ちフラグを設定する。そして、I/Oデーモン204は、そのI/Oバッファを受信領域として、プロセス間通信部204−1により受信待ち状態となる。但し、I/Oデーモン204は、I/Oバッファを確保しようとした際、I/Oバッファ数が最大値に達している場合、I/Oバッファ待ち合わせ部204−6により、使用中のバッファが解放されるまで待ち合わせる。
次に、I/Oスレッド205は、I/Oデーモン204から再実行されると、I/O部205−2により、I/Oバッファ管理テーブル204−5を検索し、I/O待ちを示すフラグが設定されているI/Oバッファを1つ選択し、同フラグをクリアし、I/O実行中フラグを設定する。次に、I/Oスレッド205は、同I/Oバッファを参照し、システムコールの種別(「open」,「read」,「write」等)を確認する。
I/Oスレッド205は、システムコールの種別が「read」/「write」以外で、引数にファイル又はディレクトリのパス名が指定されるシステムコール(「open」等)の場合は、ファイル又はディレクトリのパス名、及びその他の引数を指定し、実際にそのシステムコール(「open」等)を呼び出す。ここでは、I/Oスレッド205は、「open」システムコールを呼び出す。
I/Oスレッド205は、システムコールの種別が「read」/「write」の場合は、既に当該ファイルに対して「open」が実行されているので、ファイル管理テーブル204−8をI/Oバッファ内に格納されている計算ノード3の「IPアドレス」、I/Oを要求したプロセスの「プロセスID」(PID)と、「ファイルディスクリプタ」(FD)をキーにして検索し、対応するI/Oノード2上の「ファイルディスクリプタ」(FD)を得る。
次に、I/Oスレッド205は、「lseek」システムコールを用いて、対象ファイルのオフセットを指定された位置に移動する。そして、I/Oスレッド205は、「ファイルディスクリプタ」(FD)、当該I/OバッファのI/Oデータの格納位置のアドレス、及びI/Oサイズを指定し、実際に「read」/「write」システムコールを呼び出す。
また、I/Oスレッド205は、システムコールの種別が「open」/「read」/「write」以外で、引数に「ファイルディスクリプタ」(FD)が指定されている場合は、既に当該ファイルに対して「open」が実行されているので、ファイル管理テーブル204−8を、I/Oバッファ内に格納されている計算ノード3の「IPアドレス」と、計算ノード3上でI/Oを要求したプロセスの「プロセスID」(PID)と、「ファイルディスクリプタ」(FD)をキーにして検索し、対応するI/Oノード2上の「ファイルディスクリプタ」(FD)を得る。次に、I/Oスレッド205は、指定されたシステムコールの種別に基づいて必要な引数を指定し、そのシステムコールを実行する。実行されたシステムコールは、対象ファイルが存在しない等のエラーが起きていない場合、戻り値として「ファイルディスクリプタ」(FD)を返す。
次に、I/Oスレッド205は、実行されたシステムコールから復帰すると、システムコールの種別が「open」の場合は、システムコールから戻り値として返された「ファイルディスクリプタ」(FD)を受け取る。I/Oスレッド205は、この「ファイルディスクリプタ」(FD)を、計算ノード3の「ファイルディスクリプタ」(FD)と、「IPアドレス」と、計算ノード3上でI/Oを要求したプロセスの「プロセスID」(PID)と共に、当該I/Oバッファの所定の位置に格納する。
また、I/Oスレッド205は、システムコールの種別が「open」以外の場合は、戻り値とエラーコードを当該I/Oバッファの所定の位置に格納する。その後、I/Oスレッド205は、I/O実行中フラグをクリアし、返却待ちフラグを設定する。そして、I/Oスレッド205は、送信スレッド206を再実行する。そして、I/Oスレッド205は、再度、I/Oバッファ管理テーブル204−5を検索し、I/O待ちフラグが設定されたI/Oバッファがあれば、そのフラグをクリアしI/O実行中を設定し、I/O処理を行う。I/Oスレッド205は、I/O待ちフラグが設定されたI/Oバッファがなければ、待ち合わせ部205−1により待ち状態となる。
再実行された送信スレッド206は、I/Oバッファ管理テーブル204−5に返却待ちフラグが設定されたI/Oバッファがあるかどうか調べる。送信スレッド206は、I/Oバッファ管理テーブル204−5に返却待ちフラグが設定されたI/Oバッファがない場合は、再度、待ち合わせ部206−2により、待ち合わせ状態になる。送信スレッド206は、I/Oバッファ管理テーブル204−5に返却待ちフラグが設定されたI/Oバッファがある場合、設定されている返却待ちフラグをクリアし、プロセス間通信部206−1により送信スレッド203へ送信する。また、この際、送信スレッド206は、I/Oバッファ待ち合わせ部204−6によりI/Oデーモン204がI/Oバッファが空くのを待ち合わせている場合は、I/Oデーモン204を再実行する。
次に、送信スレッド203は、プロセス間通信部203−3により送信スレッド206からのパケットを受信し、送信部203−1により通信バッファ203−2に格納されている送信スレッド206から受信したデータを、当該計算ノード3へシステムコール返信パケットとして送信する。
計算ノード3は、上記のシステムコール返信パケットを通信部301により受信する。計算ノード3は、受信したパケット内のエラー番号を参照し、「0」以外の値が入っている場合は、何らかのエラーが発生したことを示すので、システムコールの種別によらず、そのエラー番号と戻り値をそのままユーザプロセス303へ返して処理を終了する。また、計算ノード3は、エラー番号が「0」であり、システムコールの種別が「read」/「write」以外であり、返却されるデータがある場合は、それをユーザプロセス303から指定されたアドレスへコピーし、戻り値をそのままユーザプロセス303へ返して処理を終了する。また、計算ノード3は、システムコールの種別が「read」/「write」である場合、ファイルのオフセットに、戻り値の値を加算し、その戻り値をそのままユーザプロセス303へ返して処理を終了する。
◆並列I/Oが要求された場合の動作
次に、図3、図4、図5、図7、図9、及び図8、図10のフローチャートを参照して、並列I/Oが要求された場合の動作を詳細に説明する。但し、並列I/O実行開始時と、並列I/O終了時とでは、処理が異なるので、これらを分けて記載する。
●並列I/O実行開始時
図7に示すように、並列I/Oの実行開始時において、計算ノード3からジョブサーバー1及びI/Oノード2へそれぞれ処理を依頼する。
(1)ステップS11
計算ノード3は、並列I/O用I/Oノード要求部308により、並列I/O用I/Oノード要求をジョブサーバー1へ送信する。
(2)ステップS12
ジョブサーバー1は、並列I/O用I/Oノード確保/解放部102−6により、並列I/O用I/Oノードの確保を行う。
(3)ステップS13
また、ジョブサーバー1は、I/Oノードグループ変更部102−9により、I/Oノードグループの変更を行う。
(4)ステップS14
計算ノード3は、I/Oノード割り当て変更部311により、I/Oノードの割り当てを変更する。
(5)ステップS15
I/Oノード2は、I/Oデーモン停止/再開部202−9により、I/Oデーモンの再開を行う。
(6)ステップS16
I/Oノード2は、プロセス生成部202−6により、プロセスを生成する。
(7)ステップS17
計算ノード3は、並列I/Oを開始する。
以下に、上記の処理の詳細について説明する。
計算ノード3では、並列処理においては、予めジョブ毎にマスターノードとなる計算ノードが1つ決められており、当該ジョブ内の他の計算ノードは、スレーブノードとする。また、並列I/Oを行うためのプリミティブとして、並列I/Oライブラリを呼び出すこととする。なお、上記の並列I/Oライブラリとは、MPI−IO等の一般に利用可能な並列I/Oライブラリに図3の計算ノード3内に示す機能を加えたものを想定している。このための実装として、例えば、MPI−IO等と同じライブラリ名(関数名)やインターフェースを用いたライブラリ関数を作り、その関数の中で、本発明の必要な処理と、MPI−IO等の関数を呼び出すようにしても良い。この場合、アプリケーションプログラムのソースコードを変更する必要はない。
マスターノードのユーザプロセス303は、並列I/Oライブラリを呼び出すと、まずI/Oサイズを調べる。マスターノードのユーザプロセス303は、I/Oサイズが閾値よりも小さい場合は、I/Oノードを確保するためのオーバーヘッドが無視できなくなるため、例え並列度が確保できない場合でも、既に当該ジョブに割り当てられているI/Oノードのみで並列I/Oを行う。この場合、以降の処理は行われない。また、マスターノードのユーザプロセス303は、I/Oサイズが閾値以上である場合、ジョブ管理デーモン302に通知する。
マスターノードのジョブ管理デーモン302は、ユーザプロセス303からの通知に応じて、並列I/O用I/Oノード要求部308により、必要な「I/Oノード数」と当該ジョブの「ジョブ番号」をジョブサーバー1へ送信する。その後、ジョブ管理デーモン302は、I/Oノード待ち合わせ部310により、I/Oノードが確保できるまで待ち合わせる。また、ジョブ管理デーモン302は、ジョブサーバー1からI/Oノード情報を受信するまで、受信待ち状態となる。
なお、ユーザプロセス303は、スレーブノードが並列I/Oライブラリを呼び出した場合は、マスターノードが必要なI/Oノードを取得するための上記処理が終了するまで、同期待ち部309によりマスターノードが同期ポイントに到達まで待ち合わせる。
その後、ジョブ管理デーモン302は、ジョブスケジューラ1内のI/Oノードスケジューラ102より、I/Oノード情報を受信する。次に、ジョブ管理デーモン302は、受信したI/Oノード情報を参照し、I/Oノード対応テーブル305の内容と比較して、当該計算ノードに対応するI/Oノードの組み合わせが異なっているかどうかを調べる。ジョブ管理デーモン302は、当該計算ノードに対応するI/Oノードの組み合わせが異なっている場合は、並列I/O用に確保されたI/Oノードであるので、まずI/Oノード対応テーブル305の当該エントリにそれを示す目印を付け、I/Oノード割り当て変更部311により、通信部301を経由して当該I/Oノード2へI/Oノード変更要求を送信する。このI/Oノード変更要求には、当該ジョブの「ジョブ番号」と、「計算ノード番号」が含まれる。その後、ジョブ管理デーモン302は、受信待ち状態となる。
この後、ジョブ管理デーモン302は、各I/Oノード2からI/Oノード変更要求の終了通知を通信部301を経由して受信する。ジョブ管理デーモン302は、変更を要する全てのI/Oノード2からI/Oノード変更要求の終了通知を受信した後、I/Oノード待ち合わせ部310により、待ち状態のユーザプロセス303を起動する。次に、ユーザプロセス303は、同期待ち部309によりスレーブノード内のユーザプロセス303が全て同期ポイントに到達するまで同期待ち状態となる。
当該ジョブ内の全計算ノード3(マスターノードと全スレーブノード)は、上記の同期ポイントに到達した時点で、並列I/Oに必要な並列度に見合うI/Oノード2が確保できたことになる。この場合、当該ジョブ内の同期ポイントで同期待ちをしていた全計算ノード3内のユーザプロセス303は、I/Oリクエスト作成部304により、実際のI/O処理を始める。このI/O処理自体は、上述の一般のI/O処理の説明の通りである。
ジョブサーバー1は、計算ノード3(マスターノード)から、並列I/O用I/Oノード要求(「I/Oノード数」と当該ジョブの「ジョブ番号」)を受信すると、この並列I/O用I/Oノード要求をI/Oノードスケジューラ102に渡す。
I/Oノードスケジューラ102は、並列I/O用I/Oノード確保/解放部102−6により、まず、ジョブ管理テーブル102−3を参照し、既に当該ジョブに割り当てられている「I/Oノード番号」と「計算ノード番号」を抽出する。そして、I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2を参照し、抽出された「I/Oノード番号」のI/Oノードのグループを確認する。I/Oノードスケジューラ102は、抽出された「I/Oノード番号」のI/OノードのグループがAグループ(「A」)である場合は、当該ジョブのI/Oノードは既に他のジョブに横取りされていることを示しているので、メモリ上に確保したI/Oノード情報テーブル102−8に「I/Oノード番号」を格納し、当該ジョブのマスターノードへ送信する。
次に、I/Oノードスケジューラ102は、新たに割り当てが必要な「I/Oノード数」を算出し、I/Oノードグループ変更部102−9により、I/Oノード管理テーブル102−2内のBグループ(「B」)のI/Oノードの内、当該ジョブが使用していないI/Oノードを抽出する。I/Oノードスケジューラ102は、他にAグループ(「A」)のI/Oノードがあり、必要数のBグループ(「B」)のI/Oノードが存在しない場合は、メモリ上に確保したI/Oノード情報テーブル102−8に「I/Oノード番号」を格納し、当該ジョブのマスターノードへ送信する。I/Oノードスケジューラ102は、抽出されたBグループ(「B」)のI/Oノードが必要数以上ある場合、これら抽出されたI/Oノードから実際にAグループ(「A」)へグループを変更する(横取りする)I/Oノードを選択する必要がある。この際、I/Oノードスケジューラ102は、なるべく各々のジョブに割り当てられているI/Oノード全てを奪わないように選択する。その理由は、1台でもI/Oノードが残されていれば、そのジョブは遅いながらもI/Oが可能になるためである。
次に、I/Oノードスケジューラ102は、選択されたI/Oノードと元々当該ジョブに割り当てられていたI/Oノードについて、I/Oノードグループ変更部102−9により、I/Oノード管理テーブル102−2の「グループ」の項目をBグループ(「B」)からAグループ(「A」)へ変更する。更に、I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2の「横取りジョブ番号」と「横取り計算ノード番号」に、当該ジョブの「ジョブ番号」と割り当てた「計算ノード番号」を格納する。但し、I/Oノードスケジューラ102は、ジョブ管理テーブル102−3については、並列I/O終了後に元のジョブに戻す際に必要になるので、変更せず元の情報を残しておく。つまり、I/Oノードスケジューラ102は、ジョブ管理テーブル102−3に記載されているジョブ毎のI/Oノードの割り当てよりも、I/Oノード管理テーブル102−2の「グループ」毎のI/Oノードの割り当てを優先する。例えば、I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2の「グループ」がAグループ(「A」)であれば、Aグループ(「A」)のI/Oノードの割り当てを優先する。
この後、I/Oノードスケジューラ102は、メモリ上に確保したI/Oノード情報テーブル102−8に「I/Oノード番号」を格納し、当該ジョブの全計算ノードへ送信する。
図8は、並列I/O用I/Oノード要求時のI/Oノードスケジューラ102のフローチャートである。
(1)ステップS101
ジョブサーバー1は、マスターノードである計算ノード3から並列I/O用I/Oノード要求を受信すると、ジョブスケジューラ101によりI/Oノードスケジューラ102を呼び出す。
(2)ステップS102
I/Oノードスケジューラ102は、I/Oノード管理テーブル102−2を参照し、当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされていないかをチェック(確認)する。
(3)ステップS103
I/Oノードスケジューラ102は、当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされてしまっている場合、並列I/O用I/Oノードの確保を断念し、I/Oノード情報として確保失敗を設定する。
(4)ステップS104
そして、I/Oノードスケジューラ102は、I/Oノードスケジューラから復帰し、I/Oノード情報をマスターノード(計算ノード3)に通知して処理を終える。
(5)ステップS105
また、I/Oノードスケジューラ102は、当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされていない場合、当該計算ノード3が既に保有するI/Oノードと並列I/Oに必要なI/Oノードの数から、当該ジョブに新たに割り当てが必要な「I/Oノード数」を算出する。
(6)ステップS106
I/Oノードスケジューラ102は、「I/Oノード数」を算出した結果に基づいて、必要な数のI/Oノードが確保できないことがないかをチェック(確認)する。I/Oノードスケジューラ102は、必要な数のI/Oノードが確保できないことが判明した場合、上記と同様に、並列I/O用I/Oノードの確保を断念し、I/Oノード情報として確保失敗を設定して、I/Oノードスケジューラから復帰し、I/Oノード情報をマスターノードに通知して処理を終える。
(7)ステップS107
次に、I/Oノードスケジューラ102は、必要な数のI/Oノードを確保できた場合、I/Oノードグループ変更部102−9により、選択されたI/Oノードについて、I/Oノード管理テーブル102−2内の「グループ」をAグループ(「A」)からBグループ(「B」)に変更する。このとき、I/Oノードスケジューラ102は、「横取りジョブ番号」と、「横取り計算ノード番号」へ、当該ジョブの「ジョブ番号」と、割り当てる「計算ノード番号」を設定する。
(8)ステップS108
最後に、I/Oノードスケジューラ102は、ジョブスケジューラ101に復帰後、各計算ノード3へI/Oノード情報(「I/Oノード番号」)を送信する。
なお、I/Oノード2内の共通処理デーモン202は、通信デーモン201−1を経由してI/Oノード変更要求を受けると、まずジョブ管理テーブル202−7に登録されているI/Oデーモンのうち、受信された「ジョブ番号」のジョブ以外の全てに対して、I/Oデーモン停止/再開部202−9により、それらジョブに対応するI/Oデーモン204とその配下のI/Oスレッド205、送信スレッド206へ停止指示(「UNIX(登録商標)」等で使用される「STOP」シグナルの送信)を行う。これにより、I/Oノード2は、当該I/Oノード2を割り当てられていた他のジョブの計算ノードからI/O要求を受信しても処理しなくなる。ここで、I/Oノード2内の共通処理デーモン202は、上記処理中に当該ジョブの「ジョブ番号」が既にジョブ管理テーブル202−7に登録されていた場合は、I/Oノード変更要求の終了通知をマスターノードである計算ノード3へ送信する。
次に、I/Oノード2内の共通処理デーモン202は、ジョブ管理テーブル202−7に登録されていなかった場合は、プロセス生成部202−6により、新たにI/Oデーモン204を生成する。このとき、I/Oノード2内の共通処理デーモン202は、そのI/Oデーモン204の「プロセスID」と「ジョブ番号」を並列I/Oの目印を付けて登録する。そして、生成された同I/Oデーモン204は、スレッド生成部204−2によりI/Oスレッド、送信スレッドを生成し、I/Oスレッド管理テーブル204−3、I/Oバッファ管理テーブル204−5をメモリ上に確保し、生成されたI/Oスレッド205をI/Oスレッド管理テーブル204−3に登録する。その後、I/Oノード2内の共通処理デーモン202は、I/Oノード変更要求の終了通知を計算ノード3の内のマスターノードに送信する。
元々、このI/Oノードを割り当てられていたジョブは、そのジョブが使用していたI/Oデーモンとその配下のI/Oスレッドが停止状態になっているので、他に利用可能なI/Oノードがなければ、計算ノードからI/Oを発行しても受付られず、リトライを繰り返すことになる。そして、このI/Oノードを横取りしたジョブの並列I/Oが終了した時点で、I/Oデーモン、I/Oスレッドの停止状態が解かれるので、リトライが成功し、再びI/Oが可能になる。このため、I/Oノードを横取りされるジョブに対しては、特別な処理は必要なく、且つI/Oデーモンは停止状態になるだけでなので、並列I/O終了時に、再度、I/Oデーモンを生成する必要はなく、即座にI/O処理を再開することができる。なお、計算ノード3は、I/Oリクエスト作成部304において、リトライする機能、及び他のI/Oノードが存在する場合、I/Oノードを切り替えてリトライする機能を持つ。
●並列I/O終了時
図9に示すように、並列I/Oの終了時において、計算ノード3からジョブサーバー1、I/Oノード2へそれぞれ処理を依頼する。
(1)ステップS21
計算ノード3は、並列I/O終了通知部312により、並列I/O終了通知をジョブサーバー1へ送信する。
(2)ステップS22
ジョブサーバー1は、並列I/O用I/Oノード確保/解放部102−6により、並列I/O用I/Oノードの解放を行う。
(3)ステップS23
また、ジョブサーバー1は、I/Oノードグループ変更部102−9により、I/Oノードグループの変更を行う。
(4)ステップS24
計算ノード3は、I/Oノード割り当て変更部311により、I/Oノードの割り当てを変更する。
(5)ステップS25
I/Oノード2は、I/Oデーモン停止/再開部202−9により、I/Oデーモンの停止を行う。
(6)ステップS26
I/Oノード2は、I/Oデーモン終了部202−8により、I/Oデーモンを終了する。
(7)ステップS27
計算ノード3は、並列I/Oを終了する。
以下に、上記の処理の詳細について説明する。
計算ノード3では、並列I/Oが終了すると、スレーブノード内のユーザプロセス303は、同期待ち部309により、マスターノードが同期ポイントに到達するまで待ち合わせる。この後、マスターノードのユーザプロセス303は、ジョブ管理デーモン302に、並列I/Oが終わった旨を通知し、I/Oノード待ち合わせ部310により、並列I/Oの終了処理が終了するまで待ち状態となる。ジョブ管理デーモン302は、並列I/Oを行っていたジョブの「ジョブ番号」を含む並列I/O終了通知を並列I/O終了通知部312によりジョブサーバー1に送信し、受信待ち状態となる。
その後、当該ジョブ内の各計算ノード3は、ジョブサーバー1からI/Oノードグループ変更終了通知を受信する。この際、ジョブ管理デーモン302は、I/Oノード対応テーブル305を検索し、並列I/O用に確保したことを示す目印のついたI/Oノード2を抽出する。ジョブ管理デーモン302は、そのI/Oノード2に、I/O割り当て変更部311を用いて、当該ジョブの「ジョブ番号」を含むI/Oノード復帰要求を通信部301を経由して送信する。
この後、マスターノードのジョブ管理デーモン302は、各I/Oノード2からI/Oノード復帰要求の終了通知を通信部301を経由して受信する。マスターノードのジョブ管理デーモン302は、復帰を要する全てのI/Oノード2からI/Oノード復帰要求の終了通知を受信した後、I/Oノード待ち合わせ部310により、待ち状態のユーザプロセス303を起動する。このユーザプロセス303は、同期待ち部309によりスレーブノード内のユーザプロセス303が全て同期ポイントに到達するまで同期待ち状態となる。
各計算ノード3内のユーザプロセス303は、当該ジョブ内の全計算ノード3(マスターノードと全スレーブノード)が上記同期ポイントに到達した時点で、並列I/Oのための全ての処理が終了したことになるので、並列I/Oライブラリからユーザプログラムへ復帰する。
図10は、並列I/O終了時のI/Oノードスケジューラ102のフローチャートである。
(1)ステップS201
ジョブサーバー1は、マスターノードである計算ノード3から並列I/O終了通知を受信すると、ジョブスケジューラ101によりI/Oノードスケジューラ102を呼び出す。即ち、ジョブサーバー1は、並列I/O終了通知を受信すると、ジョブスケジューラ101によりI/Oノードスケジューラ102を起動する。
(2)ステップS202
I/Oノードスケジューラ102は、並列I/O用I/Oノード確保/解放部102−6により、受信された「ジョブ番号」をキーにして、ジョブ管理テーブル102−3を検索し、当該ジョブのエントリを特定し、特定されたエントリの中の「計算ノード番号」を抽出する。
(3)ステップS203
次に、I/Oノードスケジューラ102は、I/Oノードグループ変更部102−9により、I/Oノード管理テーブル102−2内の「横取りジョブ番号」、「横取り計算ノード番号」が「ジョブ番号」、「計算ノード番号」と一致する全てのエントリについて、Aグループ(「A」)からBグループ(「B」)へ変更し、「横取りジョブ番号」と、「横取り計算ノード番号」を消去する。
(4)ステップS204
その後、I/Oノードスケジューラ102は、メモリ上に確保したI/Oノード情報テーブル102−8に「I/Oノード番号」と「ジョブ番号」を格納し、ジョブスケジューラ101に制御を返す。
(5)ステップS205
ジョブサーバー1は、制御がI/Oノードスケジューラ102からジョブスケジューラ101に復帰した後、ジョブスケジューラ101により、各計算ノード3へI/Oノード情報(「I/Oノード番号」)を送信する。即ち、ジョブスケジューラ101は、I/Oノード情報テーブル102−8に格納された「I/Oノード番号」をI/Oノードグループ変更終了通知として、当該ジョブの全計算ノード3へ送信する。
I/Oノード2内の共通処理デーモン202は、通信デーモン201−1を経由してI/Oノード復帰要求を受けると、まずジョブ管理テーブル202−7に登録されているI/Oデーモンのうち、受信された「ジョブ番号」のジョブ以外の全てに対して、I/Oデーモン停止/再開部202−9により、それらジョブに対応するI/Oデーモン204とその配下のI/Oスレッド205、送信スレッド206へ継続指示(例えば「UNIX(登録商標)」等で使用される継続シグナル「SIGCONT」の送信)を行う。これにより、停止させられていた他のジョブのI/Oデーモンとその配下のI/Oスレッド、送信スレッドが再び動作可能となる。なお、I/Oノードを横取りされたジョブが、並列I/Oの実行中に終了した場合は、そのジョブに対応するI/Oデーモンは既に終了しており、またジョブ管理テーブル202−7のエントリも既に削除されているため、何もする必要はない。
次に、共通処理デーモン202は、ジョブ管理テーブル202−7に登録されているI/Oデーモン204の内、並列I/O用の目印が付いているI/Oデーモンについて、I/Oデーモン終了部202−8により、同I/Oデーモンとその配下のI/Oスレッドと送信スレッドを終了させる。その後、共通処理デーモン202は、終了通知をマスターノードである計算ノード3へ送信する。なお、共通処理デーモン202は、各テーブルやバッファへの参照/追加/更新の際は、排他制御を行い一貫性を保っている。
以上のように、本発明では、図2に示すような、相互結合ネットワーク4と制御ネットワーク5に接続された複数の計算ノード3、相互結合ネットワーク4と並列ファイルシステムを含む任意のファイルシステム6が構築されたI/Oシステムに接続された複数のI/Oノード2、投入されるジョブの制御を行うジョブサーバー1等からなる並列計算機システムを前提とし、特に並列I/O用のI/O資源の割り当てを行うためのI/Oノードの制御方法に関する。
つまり、図2の任意の1つの計算ノードは、全てのI/Oノードと通信が可能であり、その計算ノードは、どのI/Oノードを使用したとしても同じファイルシステムへアクセス可能であるので、任意の計算ノードとI/Oノードの組み合わせが可能である。このため、ジョブ実行中であっても動的にI/Oノードをそのジョブが使用する計算ノードに割り当てることが可能なシステム構成であることを前提としたI/Oノードの制御方法である。
即ち、I/Oノードを動的に割りてることによる、並列I/O実行時の資源割り当ての効率化を目的とした発明であり、あるジョブが並列I/Oを行う時のみ、他のジョブに割り当てられているI/Oノードを一時的に横取りすることに特徴がある。
本発明では、ジョブ開始時においては、期待した並列度で並列I/Oを実行できるだけの多数のI/Oノードを確保せず、少ない数のI/Oノードのみを確保しておく。そして、並列I/O開始時に不足するI/Oノードを並列I/O用I/Oノード確保/解放部102−6、I/Oノードグループ変更部102−9により、他のジョブが保有するBグループ(「B」)のI/Oノードから選択することにより、他の実行中のジョブから一時的に横取りする。
また、本発明では、I/Oノード管理テーブル102−2、ジョブ管理テーブル102−3により、横取りしたI/Oノードの情報と横取りされたジョブのそれを同時に管理する。本発明では、並列I/Oが期待された並列度で実行できた場合、その分当該ジョブが早く終了することになるため、I/O資源だけではなく、CPU、メモリ資源についても早く解放される。このため、実行待ちの他のジョブを早く実行開始させることも可能となる。
一方、並列I/Oには、多数のI/Oノードが必要になるが、必要な「I/Oノード数」が確保できない場合、他のジョブがI/Oノードを解放するまで待ち合わせていると、その待ち時間の分だけCPU、メモリ等他の資源を確保している時間も長くなる。つまり、並列I/O実行時は、他のI/Oよりも緊急度が高いと考えて良い。このため、並列I/O実行時のみ他のジョブが保有するI/Oノードを横取りして、期待された並列度で並列I/Oを行えるようにする。I/O資源であるI/Oノードは、並列I/O用I/Oノード(Aグループ(「A」))、一般I/O用I/Oノード(Bグループ(「B」))の2つのグループに分けて、ジョブサーバー内のI/Oノードスケジューラが管理する。そして、Aグループ(「A」)のI/Oノードは、それを割り当てられたジョブの並列I/O以外のI/Oでは使用できないI/Oノードの集合とする。但し、これらグループは固定的に割り当てるのではなく、必要に応じて変更する。
ジョブ開始時において、ジョブサーバー内のI/Oノードスケジューラは、並列I/Oに十分なI/Oノード数を確保せず、例えば要求された計算ノード数の1/N(N:正の整数)のI/Oノードのみを確保し、それらを通常I/O用I/Oノード(Bグループ(「B」))とし、それに合わせてI/Oノード管理テーブル、ジョブ管理テーブルへその情報を設定する。そして、そのジョブから並列I/Oが要求されると、そのジョブが保有するI/Oノードだけでは並列I/Oの実行には不足である場合、その不足分を他のジョブが保有しているBグループ(「B」)のI/Oノードから選択し、I/Oノード管理テーブル、ジョブ管理テーブルを更新することにより、それらI/OノードをAグループ(「A」)に変更する。これにより、並列I/Oを実行しようとするジョブ以外からは使用不可となる。その後、並列I/Oが終了した時点で、I/Oノード管理テーブル、ジョブ管理テーブルを更新することで、使用したI/OノードをAグループ(「A」)からBグループ(「B」)へ戻す。これにより、元々それらI/Oノードを保有していたジョブからも、再度、I/Oを発行できるようになる。
図6に、この場合の一例を示す。
これは、時刻T1において、ジョブ#3が、同時に実行されているジョブ#1、#2の持つI/Oノードを一時的に横取りすることによって、ジョブ#3が並列I/Oを行うのに十分なI/Oノードを確保でき、時刻T2に並列I/Oを終了できる状況を示している。ここでは、ジョブ#1〜#3が、同量のI/Oノードを保有している状態で、ジョブ#3が並列I/Oを要求した時、ジョブ#1、#2の保有するI/OノードをAグループ(「A」)へ変更する。これにより、一時的にそれらI/Oノードをジョブ#1、#2から使用不可とし、ジョブ#3が全てのI/Oノードを使用できるようにする。そして、ジョブ#3の並列I/Oが終了した時点でAグループ(「A」)のI/OノードをBグループ(「B」)に戻し、ジョブ#1、#2から、再度、使用可能な状態することを現している。
また、並列I/Oを効率よく実行できたために、ジョブ#3は、図1よりも早く終了でき、その分後続のジョブ#4の実行開始時期を早めることもできる。更に、ジョブ#1、#2は、ジョブ#3が並列I/Oを実行している間I/Oを行っていなければ、例えI/Oノードを横取りされたとしても、ジョブの実行が遅延することはない。これにより、複数のジョブを同時に実行させる場合、無駄にI/O資源を確保することなく、且つ並列I/Oを期待した並列度で実行できるようなI/O資源のスケジューリングが可能となる。
本発明により、並列I/Oを実行するジョブが、その並列I/O開始時点において、期待した並列度を得られるだけのI/Oノードを保有していない場合でも、一時的に必要数のI/Oノードを確保して、期待した並列度で並列I/Oを実施できる。このことは、ジョブ実行中において、I/O資源の要求量を動的に変化させることでもある。その理由は、並列I/O開始時点において、不足分のI/Oノードを他のジョブが保有するI/Oノードから一時的に横取りし(I/O資源要求量の動的変化)、不足分を補うためである。
また、本発明により、I/O資源を効率よく利用できる。その理由は、ジョブ開始時は、少ないI/Oノード数のみを確保してジョブの実行を開始し、並列I/Oを実行するときのみ、期待した並列度を得られるだけのI/Oノードを一時的に他のジョブから横取りして、並列I/Oが終了すれば、元のジョブにそれらI/Oノードを返すためである。このため、ジョブ投入時に並列I/Oに必要な全てのI/Oノードの確保を要求する必要はない。
また、本発明により、後から投入された他のジョブの実行開始が遅延されることがなく、計算ノード(CPU, メモリ)等、I/O以外の資源も効率よく利用できる。その理由は、並列I/Oを実行する時のみ、それに必要な数のI/Oノードを確保するためである。つまり、本発明では、ジョブの実行開始から終了までの内、並列I/Oを行うための所要時間はわずかであると考えられる。それにもかかわらず、並列I/Oに必要なだけのI/Oノードを、ジョブ開始時に確保してしまうと、他のジョブが投入されても、必要な計算ノード数等の他の資源が確保できるにも関わらず、I/Oノードを確保できないために、実行を開始できないという不都合が生じる。
また、本発明では、I/Oノードを横取りされたジョブであっても、必ずしも横取りされた時間だけそのジョブの実行時間が遅延されるとは限らない。ジョブは、必ずしも常にI/Oを行っている訳ではなく、特にHPC分野の場合、ジョブの実行時間の内I/Oを行っている時間はわずかであると考えられる。このため、横取りされている間にI/Oを要求しなければ、横取りされたジョブの実行時間に影響を与えない。
また、本発明により、計算ノードは、I/Oチャネル等I/O関係のハードウェアに多くのコストを掛けることなく、並列I/Oを実現することができる。このため、CPUやメモリといった計算に直接関係のある資源にその分コストが掛けられる。その理由は、並列I/Oを行う時だけ多くのI/Oノードを要求すれば良いので、複数のジョブが実行されている場合でも限られたI/O資源を効率よく共用できるためである。
本発明によれば、HPC(High Performance Computing)のような大規模なデータを高速に処理しなければならない分野において、必要な資源の異なる複数のジョブを並列計算機システム上で共用する場合等、I/O資源を含む計算資源を分割して使用するような環境で利用できる。
以上、本発明の実施形態を詳述してきたが、実際には、上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の変更があっても本発明に含まれる。
1… ジョブサーバー
101… ジョブスケジューラ
102… I/Oノードスケジューラ
102−1… I/Oノード登録部
102−2… I/Oノード管理テーブル
102−3… ジョブ管理テーブル
102−4… I/Oノード確保/解放部
102−5… I/Oノード設定ファイル
102−6… 並列I/O用I/Oノード確保/解放部
102−7… I/Oノード情報作成部
102−8… I/Oノード情報テーブル
102−9… I/Oノードグループ変更部
102−10… I/Oノード要求情報作成部
103… 既存コンポーネント
2… I/Oノード
201… 通信デーモン
201−1… 接続確立部
201−2… プロセス生成部
202… 共通処理デーモン
202−1… 受信部
202−2… スレッド生成部
202−3… ジョブテーブル操作部
202−4… 通信バッファ
202−5… プロセス間通信部
202−6… プロセス生成部
202−7… ジョブ管理テーブル
202−8… I/Oデーモン終了部
202−9… I/Oデーモン停止/再開部
203… 送信スレッド(主送信スレッド)
203−1… 送信部
203−2… 通信バッファ
203−3… プロセス間通信部
204… I/Oデーモン
204−1… プロセス間通信部
204−2… スレッド生成部
204−3… I/Oスレッド管理テーブル
204−4… I/Oバッファ確保部
204−5… I/Oバッファ管理テーブル
204−6… I/Oバッファ待ち合わせ部
204−7… I/Oスレッド起動部
204−8… ファイル管理テーブル
205… I/Oスレッド
205−1… 待ち合わせ部
205−2… I/O部
206… 送信スレッド(副送信スレッド)
206−1… プロセス間通信部
206−2… 待ち合わせ部
3… 計算ノード
301… 通信部
302… ジョブ管理デーモン
303… ユーザプロセス
304… I/Oリクエスト作成部
305… I/Oノード対応テーブル
306… マウント部
307… マウントポイント対応テーブル
308… 並列I/O用I/Oノード要求部
309… 同期待ち部
310… I/Oノード待ち合わせ部
311… I/Oノード割り当て変更部
312… 並列I/O終了通知部
4… 相互結合ネットワーク
5… 制御ネットワーク
6… ファイルシステム

Claims (17)

  1. データを蓄積するファイルシステムと、
    前記ファイルシステムにアクセスするI/Oノードと、
    ジョブを実行し、I/O処理が発生した場合には、前記I/OノードにI/O要求を発行する計算ノードと、
    ジョブのスケジューリングを行い、あるジョブに対して、当該ジョブの実行を停止させることなく、前記I/Oノードを動的に割り当てるジョブサーバーと
    を具備し、
    前記ジョブサーバーは、
    ジョブ開始時においては、期待した並列度で並列I/Oを実行するために必要な数に満たない少数のI/Oノードを確保し、並列I/Oを実行する時に、不足分のI/Oノードを、他のジョブが保有するI/Oノードから一時的に横取りするI/Oノードスケジューラ
    を具備する
    I/Oノード制御方式。
  2. 請求項1に記載のI/Oノード制御方式であって、
    前記I/Oノードスケジューラは、横取りしたI/Oノードの情報、及びI/Oノードを横取りされたジョブの情報を同時に管理する
    I/Oノード制御方式。
  3. 請求項2に記載のI/Oノード制御方式であって、
    前記I/Oノードスケジューラは、
    I/Oノード番号、最大I/Oスレッド数、及びIPアドレスを関連付けて登録しているI/Oノード管理テーブルと、
    ジョブ番号、計算ノード番号、及びI/Oノード番号を関連付けて登録しているジョブ管理テーブルと、
    前記計算ノードから並列I/O用I/Oノード要求を受信し、前記I/Oノード管理テーブル、及び前記ジョブ管理テーブルを参照し、並列I/Oに使用できるI/Oノードを抽出する並列I/O用I/Oノード確保/解放部と、
    並列I/O用のI/Oノード割り当て時に、前記I/Oノード管理テーブルのグループの項目を通常I/O用グループから並列I/O用グループへ変更し、横取りジョブ番号と横取り計算ノード番号に、当該ジョブのジョブ番号と割り当てる計算ノードの番号を格納するI/Oノードグループ変更部と
    を具備する
    I/Oノード制御方式。
  4. 請求項3に記載のI/Oノード制御方式であって、
    前記並列I/O用I/Oノード確保/解放部は、前記計算ノードから並列I/O終了通知を受信し、前記並列I/O終了通知に含まれるジョブ番号をキーにして、前記ジョブ管理テーブルを検索し、当該ジョブのエントリを特定し、前記特定されたエントリの中の計算ノード番号を抽出し、
    前記I/Oノードグループ変更部は、並列I/O用I/Oノード解放時に、前記I/Oノード管理テーブル内の横取りジョブ番号、横取り計算ノード番号がジョブ番号、計算ノード番号と一致するエントリについて、グループの項目を並列I/O用グループから通常I/O用グループへ変更し、横取りジョブ番号、及び横取り計算ノード番号を消去する
    I/Oノード制御方式。
  5. 請求項1乃至4のいずれか一項に記載のI/Oノード制御方式であって、
    前記I/Oノードは、
    I/Oスレッドと送信スレッドを生成するI/Oデーモンと、
    並列I/Oを実行する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモン及び当該I/Oデーモンの配下のスレッドを停止させるための処理を行い、並列I/Oを終了する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモン及び当該I/Oデーモンの配下のスレッドを再開させるための処理を行うI/Oデーモン停止/再開部と
    を具備する
    I/Oノード制御方式。
  6. 請求項1乃至5のいずれか一項に記載のI/Oノード制御方式であって、
    前記計算ノードは、
    ジョブに属し、ユーザのアプリケーションプログラムを実行し、前記I/OノードへI/Oを要求するユーザプロセスと、
    前記ユーザプロセスが同一ジョブ内の他の計算ノードのユーザプロセスと同期する必要がある場合、前記ユーザプロセスの動作を、前記同一ジョブ内の全てのユーザプロセスが同期ポイントに到達するまで待ち合わせる同期待ち部と、
    前記ユーザプロセスの動作を、前記ジョブ管理デーモンが前記ジョブサーバー、及び前記各I/Oノードとの通信を終了するまで待ち合わせるI/Oノード待ち合わせ部と、
    前記I/Oノードへ、当該ジョブのジョブ番号、及び計算ノード番号が含まれるI/Oノード変更要求を送信するI/Oノード割り当て変更部と
    を具備する
    I/Oノード制御方式。
  7. 請求項1乃至6のいずれか一項に記載のI/Oノード制御方式で使用されるジョブサーバー。
  8. 請求項1乃至6のいずれか一項に記載のI/Oノード制御方式で使用されるI/Oノード。
  9. 請求項1乃至6のいずれか一項に記載のI/Oノード制御方式で使用される計算ノード。
  10. I/Oノードから、データを蓄積するファイルシステムにアクセスすることと、
    計算ノードで、ジョブを実行し、I/O処理が発生した場合には、前記I/OノードにI/O要求を発行することと、
    ジョブサーバーで、ジョブのスケジューリングを行い、あるジョブに対して、当該ジョブの実行を停止させることなく、前記I/Oノードを動的に割り当てることと、
    前記ジョブサーバーのI/Oノードスケジューラで、ジョブ開始時においては、期待した並列度で並列I/Oを実行するために必要な数に満たない少数のI/Oノードを確保することと、
    前記I/Oノードスケジューラで、並列I/Oを実行する時に、不足分のI/Oノードを、他のジョブが保有するI/Oノードから一時的に横取りすることと
    を含む
    I/Oノード制御方法。
  11. 請求項10に記載のI/Oノード制御方法であって、
    前記I/Oノードスケジューラで、横取りしたI/Oノードの情報、及びI/Oノードを横取りされたジョブの情報を同時に管理すること
    を更に含む
    I/Oノード制御方法。
  12. 請求項11に記載のI/Oノード制御方法であって、
    前記I/Oノードスケジューラで、前記計算ノードから並列I/O用I/Oノード要求を受信することと、
    I/Oノード番号、最大I/Oスレッド数、及びIPアドレスを関連付けて登録しているI/Oノード管理テーブルを参照することと、
    ジョブ番号、計算ノード番号、及びI/Oノード番号を関連付けて登録しているジョブ管理テーブルを参照することと、
    並列I/Oに使用できるI/Oノードを抽出することと、
    並列I/O用のI/Oノード割り当て時に、前記I/Oノード管理テーブルのグループの項目を通常I/O用グループから並列I/O用グループへ変更することと、
    横取りジョブ番号と横取り計算ノード番号に、当該ジョブのジョブ番号と割り当てる計算ノードの番号を格納することと
    を更に含む
    I/Oノード制御方法。
  13. 請求項12に記載のI/Oノード制御方法であって、
    前記I/Oノードスケジューラで、当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされていないかを前記I/Oノード管理テーブルを参照してチェックすることと、
    当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされてしまっている場合、並列I/O用I/Oノードの確保を断念し、並列I/O用I/Oノードの確保を断念した旨を前記計算ノードに通知して処理を終了することと
    を更に含む
    I/Oノード制御方法。
  14. 請求項13に記載のI/Oノード制御方法であって、
    前記I/Oノードスケジューラで、当該ジョブに既に割り当てられているI/Oノードが他のジョブに横取りされていない場合、前記計算ノードが既に保有するI/Oノード数と並列I/Oに必要なI/Oノード数に基づき、当該ジョブに新たに割り当てが必要なI/Oノード数を算出することと、
    必要な数のI/Oノードが確保できない場合、並列I/O用I/Oノードの確保を断念し、並列I/O用I/Oノードの確保を断念した旨を前記計算ノードに通知して処理を終了することと
    必要な数のI/Oノードを確保できた場合、前記確保されたI/Oノードについて、I/Oノード管理テーブル内のグループの項目を通常I/O用グループから並列I/O用グループに変更することと、
    横取りジョブ番号、及び横取り計算ノード番号へ、当該ジョブのジョブ番号、及び割り当てる計算ノード番号を設定することと、
    前記計算ノードへ、前記設定されたI/Oノード番号を送信することと
    を更に含む
    I/Oノード制御方法。
  15. 請求項14に記載のI/Oノード制御方法であって、
    前記I/Oノードスケジューラで、前記計算ノードから並列I/O終了通知を受信することと、
    前記並列I/O終了通知に含まれるジョブ番号をキーにして、前記ジョブ管理テーブルを検索し、当該ジョブのエントリを特定し、前記特定されたエントリの中の計算ノード番号を抽出することと、
    並列I/O用I/Oノード解放時に、前記I/Oノード管理テーブル内の横取りジョブ番号、横取り計算ノード番号がジョブ番号、計算ノード番号と一致するエントリについて、グループの項目を並列I/O用グループから通常I/O用グループへ変更することと、
    横取りジョブ番号、及び横取り計算ノード番号を消去することと、
    前記I/Oノード情報テーブルにI/Oノード番号とジョブ番号を格納することと、
    前記計算ノードへ、I/Oノードグループ変更終了通知としてI/Oノード番号を送信することと
    を更に含む
    I/Oノード制御方法。
  16. 請求項10乃至15のいずれか一項に記載のI/Oノード制御方法であって、
    前記I/Oノードで、I/Oスレッドと送信スレッドを生成することと、
    並列I/Oを実行する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモン及び当該I/Oデーモンの配下のスレッドを停止させるための処理を行うことと、
    並列I/Oを終了する時に、並列I/Oを行うジョブ以外の他のジョブのI/Oデーモン及び当該I/Oデーモンの配下のスレッドを再開させるための処理を行うことと
    を更に含む
    I/Oノード制御方法。
  17. 請求項10乃至15のいずれか一項に記載のI/Oノード制御方法であって、
    前記計算ノードで、ジョブに属するユーザプロセスにより、ユーザのアプリケーションプログラムを実行することと、
    前記I/OノードへI/Oを要求することと、
    前記ユーザプロセスが同一ジョブ内の他の計算ノードのユーザプロセスと同期する必要がある場合、前記ユーザプロセスの動作を、前記同一ジョブ内の全てのユーザプロセスが同期ポイントに到達するまで待ち合わせることと、
    前記ユーザプロセスの動作を、前記ジョブ管理デーモンが前記ジョブサーバー、及び前記各I/Oノードとの通信を終了するまで待ち合わせることと、
    前記I/Oノードへ、当該ジョブのジョブ番号、及び計算ノード番号が含まれるI/Oノード変更要求を送信することと
    を更に含む
    I/Oノード制御方法。
JP2009123058A 2009-05-21 2009-05-21 I/oノード制御方式及び方法 Expired - Fee Related JP5288272B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009123058A JP5288272B2 (ja) 2009-05-21 2009-05-21 I/oノード制御方式及び方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009123058A JP5288272B2 (ja) 2009-05-21 2009-05-21 I/oノード制御方式及び方法

Publications (2)

Publication Number Publication Date
JP2010271907A true JP2010271907A (ja) 2010-12-02
JP5288272B2 JP5288272B2 (ja) 2013-09-11

Family

ID=43419884

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009123058A Expired - Fee Related JP5288272B2 (ja) 2009-05-21 2009-05-21 I/oノード制御方式及び方法

Country Status (1)

Country Link
JP (1) JP5288272B2 (ja)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10214257A (ja) * 1997-01-30 1998-08-11 Fujitsu Ltd 並列計算機
JP2001175485A (ja) * 1999-12-17 2001-06-29 Nec Corp ジョブ制御装置
JP2002057702A (ja) * 2000-08-08 2002-02-22 Mitsubishi Electric Corp ラベルスイッチングパスの優先制御方法およびこれを用いた通信システム
JP2009251708A (ja) * 2008-04-02 2009-10-29 Nec Corp I/oノード制御方式及び方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10214257A (ja) * 1997-01-30 1998-08-11 Fujitsu Ltd 並列計算機
JP2001175485A (ja) * 1999-12-17 2001-06-29 Nec Corp ジョブ制御装置
JP2002057702A (ja) * 2000-08-08 2002-02-22 Mitsubishi Electric Corp ラベルスイッチングパスの優先制御方法およびこれを用いた通信システム
JP2009251708A (ja) * 2008-04-02 2009-10-29 Nec Corp I/oノード制御方式及び方法

Also Published As

Publication number Publication date
JP5288272B2 (ja) 2013-09-11

Similar Documents

Publication Publication Date Title
JP4569846B2 (ja) I/oノード制御方式及び方法
WO2017133623A1 (zh) 一种数据流处理方法、装置和系统
US10382574B2 (en) Systems and methods for providing messages to multiple subscribers
US8028292B2 (en) Processor task migration over a network in a multi-processor system
US9262218B2 (en) Methods and apparatus for resource management in cluster computing
WO2018035856A1 (zh) 实现硬件加速处理的方法、设备和系统
US8996469B2 (en) Methods and apparatus for job state tracking in cluster computing
JP2015537307A (ja) コンポーネント指向ハイブリッドクラウドオペレーティングシステムのアーキテクチャ及びその通信方法
JP2018531465A (ja) メッセージデータを格納するためのシステム及び方法
JP2018531465A6 (ja) メッセージデータを格納するためのシステム及び方法
WO2021254330A1 (zh) 内存管理方法、系统、客户端、服务器及存储介质
US20080228923A1 (en) Server-Side Connection Resource Pooling
US9804889B2 (en) Methods and apparatus for state objects in cluster computing
EP0747832A2 (en) Customer information control system and method in a loosely coupled parallel processing environment
WO2015176636A1 (zh) 分布式数据库服务管理系统
KR20060041928A (ko) 프린트 시스템 및 방법
US20220114145A1 (en) Resource Lock Management Method And Apparatus
CN112073456B (zh) 分布式锁的实现方法、相关设备及系统
US20200356419A1 (en) Synchronization between processes in a coordination namespace
WO2024066342A1 (zh) 任务处理方法、装置、电子设备及存储介质
US5790868A (en) Customer information control system and method with transaction serialization control functions in a loosely coupled parallel processing environment
US5630133A (en) Customer information control system and method with API start and cancel transaction functions in a loosely coupled parallel processing environment
US8442939B2 (en) File sharing method, computer system, and job scheduler
JP4862056B2 (ja) 仮想計算機管理機構及び仮想計算機システムにおけるcpu時間割り当て制御方法
JP5288272B2 (ja) I/oノード制御方式及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130201

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130422

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: 20130510

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130523

R150 Certificate of patent or registration of utility model

Ref document number: 5288272

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees