特開2016-152569(P2016-152569A)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社シミュラティオの特許一覧

特開2016-152569ファイル転送方法及びファイル転送プログラム
<>
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000003
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000004
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000005
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000006
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000007
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000008
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000009
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000010
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000011
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000012
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000013
  • 特開2016152569-ファイル転送方法及びファイル転送プログラム 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】特開2016-152569(P2016-152569A)
(43)【公開日】2016年8月22日
(54)【発明の名称】ファイル転送方法及びファイル転送プログラム
(51)【国際特許分類】
   H04L 12/953 20130101AFI20160725BHJP
【FI】
   H04L12/953
【審査請求】有
【請求項の数】4
【出願形態】OL
【全頁数】17
(21)【出願番号】特願2015-30241(P2015-30241)
(22)【出願日】2015年2月19日
(71)【出願人】
【識別番号】515047471
【氏名又は名称】株式会社シミュラティオ
(74)【代理人】
【識別番号】100094525
【弁理士】
【氏名又は名称】土井 健二
(74)【代理人】
【識別番号】100094514
【弁理士】
【氏名又は名称】林 恒徳
(72)【発明者】
【氏名】ドミトリー バジェニン
【テーマコード(参考)】
5K030
【Fターム(参考)】
5K030GA03
5K030HA08
5K030JT02
5K030KA01
5K030LB11
5K030LE14
5K030MB13
(57)【要約】
【課題】ファイル転送をTCPにより効率良く実行する。
【解決手段】処理部(100)が、メモリ(110)内の単一のファイル(4)をN個(Nは整数で、2以上)のデータ群(4−0〜4―N−1)に分割し、N個のデータ群とオフセット位置(OF)を示すN個の転送ジョブを作成する工程と、処理部(100)が、TCP(Transmission Control Protocol)の同時接続数のM個の転送スレッドに前記転送ジョブを割り当て、M個のコネクションにより、N個の転送ジョブで指定されたN個のデータ群とオフセット位置の内、M個の転送ジョブで指定されたM個のデータ群とオフセット位置を並列に転送する工程とを有する。
【選択図】図2
【特許請求の範囲】
【請求項1】
処理部が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
前記処理部が、M個の転送スレッドにN個の転送ジョブを割り当て、TCP(Transmission Control Protocol)の同時接続数の前記M個のコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを有することを
特徴とするファイル転送方法。
【請求項2】
請求項1のファイル転送方法において、
前記作成されたN個の転送ジョブの内、M個の転送ジョブをスレッドプールに設けられた前記TCPの同時接続数Mの転送スレッドに割り当てる工程と、
前記スレッドプール内の前記M個の転送スレッドにより、前記M個のデータ群とオフセット位置を、前記TCPのM個のコネクションにより、並列に転送した結果、前記スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを前記転送スレッドに割り当て、前記転送スレッドを実行する工程とを更に有することを
特徴とするファイル転送方法。
【請求項3】
メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
M個の転送スレッドにN個の転送ジョブを割り当て、TCP(Transmission Control Protocol)の同時接続数の前記M個のコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを、
コンピュータに実行させるプログラム。
【請求項4】
請求項3のプログラムにおいて、
前記作成されたN個の転送ジョブの内、M個の転送ジョブをスレッドプールに設けられた前記TCPの同時接続数Mの転送スレッドに割り当てる工程と、
前記スレッドプール内の前記M個の転送スレッドにより、前記M個のデータ群とオフセット位置を、前記TCPのM個のコネクションにより、並列に転送した結果、前記スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを前記転送スレッドに割り当て、前記転送スレッドを実行する工程とを
更にコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワークを介してファイルデータ(バルクデータ)を転送する技術に関する。
【背景技術】
【0002】
比較的大きなデータ量のデータが、互いにネットワークで接続された異なるデータ通信装置間で転送されている。このデータは、バルクデータ又はファイルデータと呼ばれている。通常、データはファイル単位に処理される。このため、ファイルの転送は、単一ファイル単位で転送される。
【0003】
一方、転送効率を上げるため、与えられた帯域を有効に使用する検討がなされている。このひとつに、UDP(User Datagram Protocol)に従ったパケット分割技術がある(例えば、特許文献1参照)。UDPは、コネクションレスであり、且つ無手順のプロトコルであり、TCP(Transmission Control Protocol)のプロトコルより制約が少ない。このため、UDPでは、データ転送レートを転送状態から検出し、データ転送レートを動的に調整することにより、帯域を有効に使用できる。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】日本特許公開2013−038664号公報(日本特許第5152940号公報)
【発明の概要】
【発明が解決しようとする課題】
【0005】
一方、前述のTCPは、比較的複雑なプロトコルである。即ち、TCPは、転送毎にコネクションを確立し、且つ転送データのエラー検出等を行い、順序性、信頼性、データの完全性を保証するプロトコルである。特許文献1の技術は、簡易なプロトコルであるUDPにおける帯域の有効利用技術であるため、TCPよるプロトコルに適用するのが、困難であった。
【0006】
本発明の目的は、TCPプロトコルでファイル転送する際に、TCPの帯域を十分使用することができるファイル転送方法及びファイル転送プログラムを提供することにある。
【課題を解決するための手段】
【0007】
この目的の達成のため、本発明の一側面は、処理装置が、記憶装置内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、前記処理装置が、前記M個の転送スレッドを実行し、TCP(Transmission Control Protocol)の同時接続数のM個のコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドで指定された前記M個のデータ群とオフセット位置を並列に転送する工程とを有する。
【発明の効果】
【0008】
単一のファイルをN個のデータ群に分割し、N個の転送ジョブを作成し、TCPの同時接続数Mのコネクションを利用して、N個の転送ジョブをM個のコネクションで多重転送するため、信頼性のあるTCPの帯域をフルに使用して、ファイルを転送できる。即ち、サイズの大きいファイルの転送時間を短縮できる。又、分割データ群とともにそのデータ群のファイル内の開始位置を示すオフセットを転送するため、分割したファイルのデータ群を独立したコネクション(またはチャネル)で転送しても、受信側でオフセットから分割したデータ群を元のファイルに復元できる。
【図面の簡単な説明】
【0009】
図1】実施の形態のファイル転送システムのブロック図である。
図2】第1の実施の形態のファイル転送構成の全体構成図である。
図3図2のファイル分割処理の説明図である。
図4図2の多重スレッドストリーミング処理の説明図である。
図5】多重スレッド転送動作の説明図である。
図6図2の多重スレッドの使いまわし処理の説明図である。
図7図2のファイル転送システムのソフトウェアモジュールの構成図である。
図8図7の転送ジョブ作成処理のフロー図である。
図9図7の転送スレッド実行処理のフロー図である。
図10】第2の実施の形態のファイル転送方法の説明図である。
図11】第3の実施の形態のソフトウェアモジュールの構成図である。
図12図11のモニターモジュールの処理フロー図である。
【発明を実施するための形態】
【0010】
以下、実施の形態を、ファイル転送方法の第1の実施の形態、ファイル転送構成、第2の実施の形態、第3の実施の形態、他の実施の形態の順で説明するが、開示の転送方法及びシステムは、この実施の形態に限られない。
【0011】
(ファイル転送方法の第1の実施の形態)
図1は、実施の形態のファイル転送システムのブロック図である。図1に示すように、ファイル転送システムでは、第1の送受信システム1が、TCP(Transmission Control Protocol)ネットワーク3を介し第2の送受信システム2に接続する。
【0012】
この例では、第1の送受信システム1は、第1の記憶装置10、第1の端末装置(ここでは、パーソナルコンピュータ)12を備える。第1の端末装置12は、第1の記憶装置10を使用して所望のデータの読み書き処理を行う。又、第1の端末装置12は、LAN(Local Area Network)18を介しTCPネットワーク3に接続する。
【0013】
第2の送受信システム2は、第2の記憶装置20、第1のサーバー22を備える。第1のサーバー22は、第2の記憶装置20を使用して所望のデータの読み書き処理を行う。又、第1のサーバー22は、LAN(Local Area Network)28を介しTCPネットワーク3に接続する。
【0014】
第1のサーバー22は、送受信システムのssh(Security Shell)サーバー機能とftp(File Transfer Protocol)サーバー機能とを構成する。又、第1の端末装置12から第1のサーバー22(第2の記憶装置20への)へのデータ送信を、アップロードと称する。同様に、第1のサーバー22(第2の記憶装置20)から第1の端末装置12(第1の記憶装置10)へのデータ送信を、ダウンロードと称する。
【0015】
第1の端末装置12及び第1のサーバー22の各々は、CPU(Central Processing Unit)100と、メモリ110及び通信デバイス120とを有する。この実施の形態では、第1の送受信システム1の第1の端末装置12が、第1の記憶装置10に格納されたファイル4を、第2の送受信システム2の第1のサーバー22にTCPネットワーク3を介しsshプロトコルを使用して、ファイル送信(アップロード)する例を説明する。
【0016】
図2は、本実施の形態のファイル転送構成の全体構成図であり、図3図2のファイル分割処理の説明図であり、図4は、図2の多重スレッドストリーミング処理の説明図であり、図5は、多重スレッド転送動作の説明図であり、図6は、図2の多重スレッドの使いまわし処理の説明図である。
【0017】
図2に示すように、端末装置12には、アプリケ―ション層のファイル転送モジュール40,50と、トランスポート層のTCP処理モジュール60とからなる多重転送プログラムがインストールされる。ファイル転送モジュール40、50は、転送ジョブ作成モジュール40と転送スレッド実行モジュール50とを有する。
【0018】
転送ジョブ作成プログラム40は、送信すべき単一のファイル4のファイルサイズをチャンクサイズと呼ぶ単位に分割し(split)、分割したチャンク毎に、ファイル内の開始位置を示すオフセットを持つ転送ジョブを作成する。作成した転送ジョブは、ジョブリスト41(図4参照)として管理される。
【0019】
例えば、図3に示すように、転送すべきファイル4のファイルサイズ(file Size)を設定されたチャンクサイズ(chunk Size)で割り、ファイル4を先頭バイト位置からN(N=file Size/chunk Sizeであり、整数)個のチャンク4−0〜4−N−1に仮想的に分割する。転送ジョブは、仮想的に分割された各チャンクに対応して作成される。
【0020】
図2図3では、分割したファイルを、チャンク0〜N−1で示す。そして、転送ジョブ作成モジュール40は、各分割されたチャンク4−0〜4−N−1を個々に転送するため、転送スレッドを、TCP同時最大接続数である最大ストリーム数分作成し、スレッドプール42(メモリ110)に格納する(図4参照)。但し、TCPの同時最大接続数である最大ストリーム数よりチャンク数Nが小さい場合は、チャンク数であるN個のスレッドを作成し、スレッドプール42(メモリ110)に格納する。
【0021】
次に、図4に示すように、図2の転送スレッド実行モジュール50は、転送ジョブリスト41の先頭から転送ジョブを、スレッドプール42内の作成された転送スレッドの数分取り出し、1つの転送スレッドに1つの転送ジョブを割り当て、スレッド毎に転送ジョブを並列に実行する。1つの転送スレッドは1つのコネクションを作成し、TCPのプロトコルラッパー(protocol wrapper)60に転送ジョブに対応するチャンクの転送を依頼する。即ち、作成するコネクション数は転送スレッドの数と等しい。
【0022】
TCPのプロトコルラッパー(protocol wrapper)60は、個々のコネクションを使用して、分割されたチャンクを、TCPパケット30−1の形式で並列に同時転送する。この時、TCPのプロトコルラッパー(protocol wrapper)60は、パケットの暗号化など付加的な処理を実行する。
【0023】
図2に戻り、TCPパケット30−1は、インターネットであるTCP/IPネットワーク3を経由して、第1のサーバー22に転送される。第1のサーバー22は、デーモン(daemon)処理(又はSSH処理)22−1を実行し、受信したパケットを復号化する。そして、受信したパケット30−2を複数のチャンク4−0〜4−N−1からなるファイル4に復元する。
【0024】
図4では、第1のサーバー22は、各コネクションに対し、独立にデータ転送処理22−1を実行する。このデータ処理22−1は、暗号化/復号化など付加的処理を含み、OSのジョブスケジューリングで実行される。この受信プロセスでは、1つのCPU100は、1つのプロセスを担当する。
【0025】
図4では、転送すべきファイル4のファイルサイズが「105」、チャンクサイズが「10」、ストリーム数が「3」の例を示す。転送ジョブ作成モジュール40は、ファイル4を11個(=105/10=11)のチャンクに分割し、個々のチャンクの先頭位置を示すオフセットとファイル名を付加した11個の転送ジョブを作成し、ジョブリスト41に格納する。
【0026】
例えば、ジョブリスト41において、転送ジョブ0(offset 0と記す)は、チャンク0に対応する。同様に、転送ジョブ1〜10(offset 10〜100と記す)のそれぞれは、チャンク1〜10に対応する。
【0027】
転送ジョブ作成モジュール40は、スレッドプール42に最大ストリーム数(ここでは、3個)の転送スレッドを作成する。転送スレッド実行プログラム50は、スレッドプール42の3つの転送スレッドの個々に転送ジョブを割り当て(即ち、3つの転送ジョブを3つのストリームのコネクションに割り当て)、TCPのプロトコルラッパー(protocol wrapper)60に転送を依頼する。そして、図4では、TCPのプロトコルラッパー(protocol wrapper)60は、3つのストリームで3つのチャンクを並列に多重転送する。
【0028】
図5は、この多重転送動作の摸式図である。図5においては、最大ストリーム数(同時接続数)をM(例えば、図5では、図4と異なり、「4」)とする。又、ソースファイル4は、N個のチャンク4−0〜4−N−1に分割されたものとする。更に、1番目と2番目のチャンク4−0,4−1は転送済みである。その場合、3番目以降のM個(ここでは、4個)のチャンクが、M個(ここでは、4個)のストリーム(コネクション)に割り当てられ、並列に転送される。即ち、単一のファイル4が複数のファイル単位に分割され、分割されたファイル単位が個々に独立のTCPコネクションで転送される。
【0029】
この個々のTCPコネクションは独立であるため、単一のTCPコネクションと同一の転送制御、例えば、コネクト、エラー検出、リトライ、エラー訂正、ディスコネクト、を行う。又、個々のTCPコネクションでは、データの順序性を保証する。このため、図5に示すように、4つのストリームでは、リトライ等のため、転送の進行度が異なる場合がある。図5では、ディスティネーションファイル4A内のチャンク内に転送の進行度を、パーセントで表示する。
【0030】
又、チャンク数Nが最大ストリーム数Mより小さい場合は、このチャンク数Nを同時接続数とする。更に、1度接続したストリームのコネクションを1つのチャンクを転送後も保持し続け、チャンク数Nがストリーム数Mより大きい場合、別の未転送チャンクを転送する際に再利用する。これにより、コネクション接続に関わる通信手続きを短縮できる。図5で説明すると、M個のストリームは、1つのチャンクの転送終了後、矢印に示すように、そのストリームのコネクションを1つのチャンクを転送後も保持し続け、別の未転送チャンク(図5でwaitingと表示したもの)を転送する際に再利用する。
【0031】
図4の転送例でのコネクションの再利用を、図6で説明する。図6において、図4で説明したものと同一のものは同一の記号で示す。図4では、1番目、2番目、3番目のチャンク0,1、2の転送ジョブが3つの転送スレッド0,1,2に割り当てられ、並列転送が行われていた。
【0032】
ここで、1番目、2番目のチャンク0,1の転送が完了すると、転送スレッド0,1のコネクションを保持し続け、4番目、5番目チャンク4.5の転送ジョブを、空いた(転送が完了した)2つの転送スレッド0,1に割り当てる。以降、同様にして、転送スレッドがチャンクの転送を完了すると、ラウンド・ロビン方式で、空いた転送スレッドを、ジョブリスト41の次の未処理の転送ジョブに割り当てる。
【0033】
更に、図4に示すように、端末装置12のCPU100が、マルチコア(例えば、3コア以上)構成であり、Java(登録商標)で動作している場合には、JVM(Java Virtual Machine)により、それぞれの転送スレッドが、それぞれのコアに割り当てられ、処理される。即ち、1つのJVMが、それぞれのスレッドを複数のコアにスケジューリングして、処理を割り当て、処理を実行する。本実施の形態では、ストリーム毎にデータ転送に必要な処理を行う。例えば、暗号化通信を伴うファイル転送では、単一ファイルから読み出したデータに対し暗号化処理を実施後、実際にファイル転送する。このため、暗号化処理時に使用されるCPUは1つに限定され、データ転送動作とは別の遅延が発生する。このため、結果として、転送に要する時間が遅延する。
【0034】
これに対し、本実施の形態では、暗号化処理を伴うファイル転送時に、ストリーム毎に暗号化処理を実施してデータ転送する。このため、ストリーム数に応じたCPUを並列に使用でき、データ転送動作とは別の遅延量を小さくできる。
【0035】
このように、単一ファイルを複数のチャンクに分割し、個々の転送スレッドを作成することにより、TCPの最大接続数のストリームで、複数のチャンクを同時転送する。このため、TCPの制約内で、TCPの帯域を最大限使用できる。又、TCPの信頼性、順序性、データ完全性をそのまま利用できる。
【0036】
一方、分割された個々のチャンクは、1つのファイルとみなして、TCP転送される。このため、受信側では、複数のファイルが転送された場合と区別が難しい。即ち、受信側で、転送された個々のチャンクから元の単一のソースファイル4を復元する工夫が必要である。
【0037】
本実施の形態では、図5に示すように、転送する個々のチャンクデータに同じファイル名とオフセット値を付加する。オフセット値は、チャンクデータのファイル4内での開始位置を示し、チャンクデータの先頭に付加される。即ち、このオフセット値は、図3で説明したように、チャンク分割した際のそのチャンクの開始アドレスである。受信側では、チャンクデータを受信した際に、同じファイル名の個々の開始オフセット位置から個々のチャンクデータを書き始める。従って、全てのチャンクデータを転送し終わると、ディスティネーションファイル4Aが復元できる。
【0038】
(ファイル転送構成)
図7は、本実施の形態のファイル転送構成のブロック図であり、図8は、図7の転送ジョブ作成モジュールの処理フロー図であり、図9は、図7の転送スレッド実行モジュールの処理フロー図である。図7において、図1乃至図6で説明したものと同一のものは同一の記号で示す。又、図1と同様に、第1の送受信システム1の第1の端末装置12が、第1の記憶装置10に格納されたファイル4を、第2の送受信システム2の第1のサーバー22にTCPネットワーク3を介しファイル転送(アップロード)する例で説明する。
【0039】
図7に示すように、端末装置12では、CPU100が、前述の転送ジョブ作成モジュール40と、スレッドプール42と、転送スレッド実行モジュール50と、暗号化モジュール60−1と、エラーコード生成モジュール60−2とを実行する。暗号化モジュール60−1と、エラーコード生成モジュール60−2とは、TCPモジュール60の一部である。
【0040】
転送ジョブ作成モジュール40は、記憶装置10のソースファイル4(図1参照)をチャンクサイズ単位に分割し(split)、分割したチャンク毎に転送ジョブを作成し、ジョブリスト41に格納する。又、転送ジョブ作成モジュール40は、TCPの最大接続数である最大ストリーム数分の転送スレッドを作成し、スレッドプール42に格納する。転送スレッド実行モジュール50は、スレッドプール42内の作成された転送スレッドに、転送ジョブを割り当て、個々のスレッドへコネクションを割り当て、TCPのプロトコルラッパー(protocol wrapper)60に転送を依頼する。
【0041】
TCPのプロトコルラッパー(protocol wrapper)60は、最大ストリーム数(最大接続数)分のコネクション(セッション)を作成し、個々のコネクションを使用して、分割されたチャンクを、TCPパケット30−1の形式で並列に同時転送する。この時、TCPのプロトコルラッパー(protocol wrapper)60は、暗号化モジュール60−1でパケットを暗号化処理し、エラーコード生成モジュール60−2でエラーコードを生成する。送信部(通信デバイス)120は、インターネット3を介し送受信データ通信装置22と最大ストリーム数のコネクションを確立し、TCPに従い、データ転送する。
【0042】
送受信データ通信装置22では、CPU100が、エラーコード検査モジュール22−2と、復号化モジュール22−1と、チャンクリアセンブルモジュール22−3とを実行する。受信部(通信デバイス)120は、インターネット3を介しTCPパケットを受信し、エラーコード検査モジュール22−2は、受信したTCPパケットのエラーを検査する。復号化モジュール22−1は、エラー検査後のパケットデータを復号化する。チャンクリアセンブルモジュール22−3は、複数のストリームのチャンクを前述のオフセット値を用いて、ディスティネーションファイル4Aを復元する(図5参照)。
【0043】
図8により転送ジョブ作成モジュール40を説明する。この例では、チャンクサイズ及び同時接続数(コネクション数)Mは、ユーザーが指定する固定値である。又、図10でも説明するように、チャンクサイズを自動割り振りできる。先ず、制御ポインタを説明する。ポインタjは、チャンク数を示し、初期値は「0」である。file sizeは、ファイル4のトータルサイズである。Nはチャンク数である。Mは最大同時接続数である。
【0044】
S1:転送ジョブ作成モジュール40を起動すると、転送ジョブ作成モジュール40は、チャンクサイズchunk size、ファイルサイズfile size及び最大接続数Mを読み込む。
【0045】
S2:チャンクサイズchunk sizeが、「0」を越えているか判定する。チャンクサイズchunk sizeが、「0」を越えている場合(true)、先ずチャンクサイズが指定されている。
【0046】
S3:チャンクサイズchunk sizeが、「0」を越えていない場合(false)、チャンクサイズchunk sizeは指定されていない。このため、チャンクサイズchunk sizeを計算する。ここでは、図10の第2の実施の形態でも説明するように、分割したチャンクのサイズchunk sizeが、各チャンクで等しくなるように、チャンクサイズchunk sizeを計算する。例えば、チャンク分割数Nを規定値とし、ファイルサイズをチャンク分割数で割り、チャンクサイズchunk sizeを計算する。
【0047】
S4:次に、チャンクポインタ数Jを初期化し(「0」)、チャンク分割数Nを計算する。ステップS3で分割数Nが規定値なら計算の必要がない。チャンクサイズchunk sizeが指定されている場合には、図2乃至図3で説明したように、チャンク分割数N(file size/chunk size)を計算する。そして、プールとしてスレッドプール(領域)を確保する(pool:Thread pool)し、プールの最大ジョブ数(pool.maxJob)を、同時最大接続数Mに設定する(即ち、M個の転送スレッドを作成する)。そして、ジョブリストjobListの領域(Vector(N))を確保する。尚、ブロック内のモニター(monitor)は,図11以下の第3の実施の形態で使用するものであり、第3の実施の形態で説明する。
【0048】
S5:チャンクポインタjが、チャンクの分割数Nより小さいか(j<N)を判定する。
【0049】
S6:チャンクポインタjが、チャンクの分割数Nより小さい場合(true)は、まだ、ファイル4をN分割していない状態である。このため、新たなチャンク(転送)ジョブを作成し、ジョブリスト41に追加する。
【0050】
S7:次に、チャンクポインタjをインクリメント(j++)する。そして、ステップS5に戻る。
【0051】
S8:チャンクポインタjが、チャンクの分割数Nより小さくない(大きい)場合(false)は、既に、1つのファイル4に対し、N個のチャンクの転送ジョブを作成し終えた状態を示す。このため、スレッドプール42内の転送スレッドに転送ジョブを割り当て、起動(start)する。これにより、図9の転送スレッド実行モジュールが、最大接続数Mの各転送スレッドに対し開始する。この転送スレッド実行モジュールの処理は、図9で後述する。
【0052】
S9:スレッドプール42内の各転送スレッドがwait状態(割り当てる転送ジョブがない)となったかを判定する。
【0053】
S10:スレッドプール42内の各転送スレッドがwait状態となると、スレッドプール42に、転送の失敗(failed)ジョブがあるかを判定する。
【0054】
S11:ステップS10で、スレッドプール42内に失敗ジョブがないと判定する(false)と、転送成功と判断し、終了する。
【0055】
S12:ステップS10で、スレッドプール42内に失敗ジョブがあると判定する(true)と、転送失敗と判断し、終了する。この場合、ファイル全体の転送失敗と判断する。
【0056】
このように、ファイル転送を開始する際、ファイルをN個のチャンクに分割し、それぞれの転送ジョブを作成する。又、スレッドプールを設け、同時接続数M分のスレッドを格納し、転送ジョブを転送スレッドに割り当て、転送スレッドの実行(最大接続数の多重転送)を制御する。スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを転送スレッドに割り当て、転送スレッドを実行(チャンク転送を起動)する。スレッドプール内の転送スレッドに割り当てる転送ジョブがなくなると、1つのファイル転送完了と判断する。
【0057】
次に、図9により、転送スレッド実行モジュール50を説明する。先ず、制御ポインタを説明する。retryは、TCPの転送リトライ回数を示す。転送状態(state)は、成功(success)であるか、失敗(failed)であるかのいずれかを示す。bufferは、メモリ110内での転送すべきファイルの先頭アドレス(allocate())を示す。オフセット(offset)は、前述のファイル4内の各チャンクの先頭位置を示し、例えば、i番目のチャンクは、offset=i*chunk size (図3で説明したチャンクサイズ)である。
【0058】
S20:転送スレッド実行モジュール50を開始すると、リトライポインタretryを「0」に初期化し、転送状態(state)に失敗(failed)を、bufferに、転送すべきファイル4の先頭アドレスをセットする。又、オフセット(Offset)を「i*chunk size」で計算する。
【0059】
S21:セッション(session)を接続(connect)にセットする。これにより、TCPラッパ60(図4参照)は、TCPコネクションを確立する。
【0060】
S22:TCPラッパ60から接続に成功したかの通知を受けたかを判定する。接続に成功したとの通知を受けなかった場合(false)、ステップS29に進む。
【0061】
S23:TCPラッパ60から接続に成功したとの通知を受けた場合(true)、転送長lenをセットする。即ち、1つのチャンクデータを複数のTCPパケットに分割して、TCP転送する。このため、そのチャンクのオフセット位置からTCPパケットの読み込みサイズbuffer分のデータを読み出し、その読み込みサイズを転送長lenに設定する。
【0062】
S24:読み出したデータを、TCPラッパ60の転送バッファに書き込む。これにより、当該コネクションでそのチャンクのデータ転送を開始する。
【0063】
S25:TCPラッパ60からI/Oエラーの通知があったかを判定する。
【0064】
S26:I/Oエラーの通知がない場合(false)、そのチャンクの転送が完了したと判断し、オフセット(offset)を更新する。即ち、offset=offset+lenを計算する。
【0065】
S27:次に、ストリームの終了、即ち、EOS(end of stream condition)であるか判定する。EOSは、例えば、offset>=(i+1)*chunk sizeとなった場合(即ち、S26でファイルサイズを越えた場合)や、ファイルの終了に到達した場合である。EOSでない場合(false)、ステップS22に戻る。
【0066】
S28:ステップS27でEOSであると判定すると(true)、転送状態(state)を成功(success)に設定し、終了する。
【0067】
S29:ステップS25でI/Oエラーの通知があった場合(true)、リトライ回数retryを「1」インクリメントする。
【0068】
S30:リトライ回数retryがリトライ回数の最大(maxR)を越えたかを判定する。リトライ回数retryがリトライ回数の最大(maxR)を越えた場合(true),転送動作を終了する。この場合、転送状態(stat)は、ステップS20で初期設定された失敗のままとなる。
【0069】
S31:リトライ回数retryがリトライ回数の最大(maxR)を越えていない場合(false),セッションを閉鎖(close)し、ステップS21に戻る。
【0070】
このように、転送スレッドを実行する際に、セッションを接続(connection)に設定し、当該チャンクの転送コネクションを確保する。当該チャンクの転送コネクションを確保すると、当該チャンクのデータ及びオフセットをTCPラッパ60に出力する。TCPラッパ60が当該コネクションで当該チャンクデータ及びオフセットをTCPで転送する。尚、図9の処理は、1つの転送スレッド分を示し、図8で説明したように、最大接続数M個の処理が走る。
【0071】
(ファイル転送方法の第2の実施の形態)
図10は、第2の実施の形態のファイル転送方法の説明図である。図2で説明した第1の実施の形態では、チャンクサイズは固定であった。このため、図3に示すように、末尾のチャンク4−N−1のデータ長はチャンクサイズ以下となる可能性がある。
【0072】
このため、最大同時接続数Mを使用した場合、末尾のチャンク4−N−1を、それ以前の順番のチャンクと並列転送している場合、末尾のチャンクデータが先に転送完了してしまう。この実施の形態は、このような事態を防止し、ファイルを分割して、最大同時接続数Mの並列転送することにより、転送時間をより短縮する。
【0073】
図10に示すように、ファイルの各チャンクのチャンクサイズを同じにした。この処理は、図8のステップS2,S3で説明した。ファイルの各チャンクのチャンクサイズを同じにしたため、最大同時接続数Mを使用した場合、末尾のチャンク4−N−1を、それ以前の順番のチャンクと並列転送している場合、末尾のチャンクデータが先に転送完了してしまうことを防止できる。このため、ファイルを分割して、最大同時接続数Mの並列転送することにより、転送時間をより短縮できる。
【0074】
(ファイル転送方法の第3の実施の形態)
図2で説明した第1の実施の形態では、最大同時接続数(ストリーム数)Mは一定であった。図11図12で説明する第3の実施の形態では、最大同時接続数(ストリーム数)Mを転送スピードに応じて変更するものである。例えば、既に転送を終えたチャンクの転送速度に応じて動的に最大接続数を変更する。
【0075】
図11は第3の実施の形態のソフトウェアモジュール構成図である。図11において、図2乃至図6で説明したものと同一のものは、同一の記号で示してある。即ち、図11の構成は、転送ジョブ作成モジュール40、スレッドプール42、転送スレッド実行モジュール50及びTCPラッパ60の他に、モニターモジュール70を設けた。このモニターモジュール70は、TCPラッパ60による転送速度をモニターし、スレッドプール42の最大接続数M(転送スレッド数)を変化する。
【0076】
図12は、図11のモニターモジュール70の処理フロー図である。
【0077】
S50:モニターモジュール70は、旧速度oldSpeed、現在速度currentSpeedを、「0」に初期化する。
【0078】
S51:モニターモジュール70は、スレッドプール内の全スレッドの転送速度を、TCPラッパ60から取得し、新速度newSpeedを、その合計を計算して得る。
【0079】
S52:現在速度currentSpeedが、設定した遅延時間(例えば、1000ms)前の旧速度oldSpeedの1.2倍より大きいか(早いか)を判定する。
【0080】
S53:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの1.2倍より大きい場合(true)、最大接続数Mを「1」インクリメントする。図7で言えば、ステップS3の最大接続数Mが増加する。
【0081】
S54:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの1.2倍より大きくない場合(false)、現在速度currentSpeedが、1000ms前の旧速度oldSpeedの0.8倍より小さいか(遅いか)を判定する。
【0082】
S55:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの0.8倍より小さい場合(true)、最大接続数Mを「1」デクリメントする。図8で言えば、ステップS4の最大接続数Mが減少する。
【0083】
S56:現在速度currentSpeedを、ステップS51の新速度newSpeedに更新する。
【0084】
S57:スレッドプール42に転送スレッドが転送完了しているかを判定する。スレッドプール42に転送スレッドが転送完了していない場合(false),終了する。
【0085】
S58:一方、スレッドプール42に転送スレッドが転送完了している場合(true)、1000msスリープし、ステップS51に戻る。
【0086】
このようにして、スレッドプール内の転送実行中の転送スレッドの転送速度に応じて、同時最大接続数を変更するため、TCPの最大ストリーム数を有効に利用できる。又、転送速度が遅い場合、同時最大接続数を減少するため、無用な再送等を防止できる。
【0087】
(他の実施の形態)
前述の実施の形態では、1つのファイルの転送を例に説明したが、プログラムの起動時に同時に転送するように指定した複数のファイルにも適用できる。若しくはデイレクトリを同時に転送する場合にも適用できる。その際、単一のファイル毎に、前述したファイルの分割と多重化通信を行う。又、同時接続数はプログラムの起動単位で保持し、ストリーム数は複数のファイルに跨って算出する。
【0088】
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
【産業上の利用可能性】
【0089】
単一のファイルをN個のデータ群に分割し、N個の転送ジョブを作成し、TCPの最大接続数のコネクションを利用して、N個の転送ジョブをM個のコネクション(転送スレッドの実行)で多重転送するため、信頼性のあるTCPの帯域をフルに使用して、ファイル転送できる。即ち、サイズの大きいファイルの転送時間を短縮できる。又、分割データ群とともにそのデータ群のファイル内の位置を示すオフセットを転送するため、分割したファイルのデータ群を独立したコネクション(またはチャネル)で転送しても、受信側でオフセットから分割したデータ群を元のファイルに復元できる。
【符号の説明】
【0090】
1:クライアント、2:サーバー、3、インターネット、4、転送ソースファイル、4A:ディスティネーションファイル、4−0〜4−N−1:チャンク(データ群)、OF:オフセット、10、20:記憶装置、12,22:端末装置、40:転送スレッド作成モジュール、42:スレッドプール、50:転送スレッド実行モジュール、60:TCPラッパ、100:CPU(処理部)、110:メモリ、120:通信デバイス。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
【手続補正書】
【提出日】2016年3月30日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
処理部が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
前記処理部が、TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記各転送スレッドを前記処理部の複数のコアにスケジューリングし、前記ストリーム毎に暗号化を伴うデータ転送を実行し、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを有することを
特徴とするファイル転送方法。
【請求項2】
請求項1のファイル転送方法において、
前記作成されたN個の転送ジョブの内、M個の転送ジョブをスレッドプールに設けられた前記TCPの同時接続数Mの転送スレッドに割り当てる工程と、
前記スレッドプール内の前記M個の転送スレッドにより、前記M個のデータ群とオフセット位置を、前記TCPのM個のコネクションにより、並列に転送した結果、前記スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを前記転送スレッドに割り当て、前記転送スレッドを実行する工程とを更に有することを
特徴とするファイル転送方法。
【請求項3】
メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記各転送スレッドをコンピュータの複数のコアにスケジューリングし、前記ストリーム毎に暗号化を伴うデータ転送を実行し、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを、
前記コンピュータに実行させるプログラム。
【請求項4】
請求項3のプログラムにおいて、
前記作成されたN個の転送ジョブの内、M個の転送ジョブをスレッドプールに設けられた前記TCPの同時接続数Mの転送スレッドに割り当てる工程と、
前記スレッドプール内の前記M個の転送スレッドにより、前記M個のデータ群とオフセット位置を、前記TCPのM個のコネクションにより、並列に転送した結果、前記スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを前記転送スレッドに割り当て、前記転送スレッドを実行する工程とを
更にコンピュータに実行させるプログラム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0007
【補正方法】変更
【補正の内容】
【0007】
この目的の達成のため、本発明の一側面は、処理が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、前記処理が、TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記各転送スレッドを前記処理部の複数のコアにスケジューリングし、前記ストリーム毎に暗号化を伴うデータ転送を実行し、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを有する。