JP5996691B2 - ファイル転送方法及びファイル転送プログラム - Google Patents

ファイル転送方法及びファイル転送プログラム Download PDF

Info

Publication number
JP5996691B2
JP5996691B2 JP2015030241A JP2015030241A JP5996691B2 JP 5996691 B2 JP5996691 B2 JP 5996691B2 JP 2015030241 A JP2015030241 A JP 2015030241A JP 2015030241 A JP2015030241 A JP 2015030241A JP 5996691 B2 JP5996691 B2 JP 5996691B2
Authority
JP
Japan
Prior art keywords
transfer
file
thread
tcp
data
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.)
Expired - Fee Related
Application number
JP2015030241A
Other languages
English (en)
Other versions
JP2016152569A (ja
Inventor
バジェニン ドミトリー
バジェニン ドミトリー
Original Assignee
株式会社シミュラティオ
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 株式会社シミュラティオ filed Critical 株式会社シミュラティオ
Priority to JP2015030241A priority Critical patent/JP5996691B2/ja
Priority to US14/673,264 priority patent/US10241929B2/en
Publication of JP2016152569A publication Critical patent/JP2016152569A/ja
Application granted granted Critical
Publication of JP5996691B2 publication Critical patent/JP5996691B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1408Protection against unauthorised use of memory or access to memory by using cryptography
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/64Hybrid switching systems
    • H04L12/6418Hybrid transport
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Human Computer Interaction (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Transfer Between Computers (AREA)

Description

本発明は、ネットワークを介してファイルデータ(バルクデータ)を転送する技術に関する。
比較的大きなデータ量のデータが、互いにネットワークで接続された異なるデータ通信装置間で転送されている。このデータは、バルクデータ又はファイルデータと呼ばれている。通常、データはファイル単位に処理される。このため、ファイルの転送は、単一ファイル単位で転送される。
一方、転送効率を上げるため、与えられた帯域を有効に使用する検討がなされている。このひとつに、UDP(User Datagram Protocol)に従ったパケット分割技術がある(例えば、特許文献1参照)。UDPは、コネクションレスであり、且つ無手順のプロトコルであり、TCP(Transmission Control Protocol)のプロトコルより制約が少ない。このため、UDPでは、データ転送レートを転送状態から検出し、データ転送レートを動的に調整することにより、帯域を有効に使用できる。
日本特許公開2013−038664号公報(日本特許第5152940号公報)
一方、前述のTCPは、比較的複雑なプロトコルである。即ち、TCPは、転送毎にコネクションを確立し、且つ転送データのエラー検出等を行い、順序性、信頼性、データの完全性を保証するプロトコルである。特許文献1の技術は、簡易なプロトコルであるUDPにおける帯域の有効利用技術であるため、TCPよるプロトコルに適用するのが、困難であった。
本発明の目的は、TCPプロトコルでファイル転送する際に、TCPの帯域を十分使用することができるファイル転送方法及びファイル転送プログラムを提供することにある。
この目的の達成のため、本発明の一側面は、処理部が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、前記処理部が、TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記各転送スレッドを前記処理部の複数のコアにスケジューリングし、前記ストリーム毎に暗号化を伴うデータ転送を実行し、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを有し、前記M個のストリームのコネクションは、それぞれ、当該コネクションを形成する転送スレッドに割り当てられた転送ジョブで指定されたデータ群とオフセット位置を転送する
単一のファイルをN個のデータ群に分割し、N個の転送ジョブを作成し、TCPの同時接続数Mのコネクションを利用して、N個の転送ジョブをM個のコネクションで多重転送するため、信頼性のあるTCPの帯域をフルに使用して、ファイルを転送できる。即ち、サイズの大きいファイルの転送時間を短縮できる。又、分割データ群とともにそのデータ群のファイル内の開始位置を示すオフセットを転送するため、分割したファイルのデータ群を独立したコネクション(またはチャネル)で転送しても、受信側でオフセットから分割したデータ群を元のファイルに復元できる。
実施の形態のファイル転送システムのブロック図である。 第1の実施の形態のファイル転送構成の全体構成図である。 図2のファイル分割処理の説明図である。 図2の多重スレッドストリーミング処理の説明図である。 多重スレッド転送動作の説明図である。 図2の多重スレッドの使いまわし処理の説明図である。 図2のファイル転送システムのソフトウェアモジュールの構成図である。 図7の転送ジョブ作成処理のフロー図である。 図7の転送スレッド実行処理のフロー図である。 第2の実施の形態のファイル転送方法の説明図である。 第3の実施の形態のソフトウェアモジュールの構成図である。 図11のモニターモジュールの処理フロー図である。
以下、実施の形態を、ファイル転送方法の第1の実施の形態、ファイル転送構成、第2の実施の形態、第3の実施の形態、他の実施の形態の順で説明するが、開示の転送方法及びシステムは、この実施の形態に限られない。
(ファイル転送方法の第1の実施の形態)
図1は、実施の形態のファイル転送システムのブロック図である。図1に示すように、ファイル転送システムでは、第1の送受信システム1が、TCP(Transmission Control Protocol)ネットワーク3を介し第2の送受信システム2に接続する。
この例では、第1の送受信システム1は、第1の記憶装置10、第1の端末装置(ここでは、パーソナルコンピュータ)12を備える。第1の端末装置12は、第1の記憶装置10を使用して所望のデータの読み書き処理を行う。又、第1の端末装置12は、LAN(Local Area Network)18を介しTCPネットワーク3に接続する。
第2の送受信システム2は、第2の記憶装置20、第1のサーバー22を備える。第1のサーバー22は、第2の記憶装置20を使用して所望のデータの読み書き処理を行う。又、第1のサーバー22は、LAN(Local Area Network)28を介しTCPネットワーク3に接続する。
第1のサーバー22は、送受信システムのssh(Security Shell)サーバー機能とftp(File Transfer Protocol)サーバー機能とを構成する。又、第1の端末装置12から第1のサーバー22(第2の記憶装置20への)へのデータ送信を、アップロードと称する。同様に、第1のサーバー22(第2の記憶装置20)から第1の端末装置12(第1の記憶装置10)へのデータ送信を、ダウンロードと称する。
第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プロトコルを使用して、ファイル送信(アップロード)する例を説明する。
図2は、本実施の形態のファイル転送構成の全体構成図であり、図3は図2のファイル分割処理の説明図であり、図4は、図2の多重スレッドストリーミング処理の説明図であり、図5は、多重スレッド転送動作の説明図であり、図6は、図2の多重スレッドの使いまわし処理の説明図である。
図2に示すように、端末装置12には、アプリケ―ション層のファイル転送モジュール40,50と、トランスポート層のTCP処理モジュール60とからなる多重転送プログラムがインストールされる。ファイル転送モジュール40、50は、転送ジョブ作成モジュール40と転送スレッド実行モジュール50とを有する。
転送ジョブ作成プログラム40は、送信すべき単一のファイル4のファイルサイズをチャンクサイズと呼ぶ単位に分割し(split)、分割したチャンク毎に、ファイル内の開始位置を示すオフセットを持つ転送ジョブを作成する。作成した転送ジョブは、ジョブリスト41(図4参照)として管理される。
例えば、図3に示すように、転送すべきファイル4のファイルサイズ(file Size)を設定されたチャンクサイズ(chunk Size)で割り、ファイル4を先頭バイト位置からN(N=file Size/chunk Sizeであり、整数)個のチャンク4−0〜4−N−1に仮想的に分割する。転送ジョブは、仮想的に分割された各チャンクに対応して作成される。
図2、図3では、分割したファイルを、チャンク0〜N−1で示す。そして、転送ジョブ作成モジュール40は、各分割されたチャンク4−0〜4−N−1を個々に転送するため、転送スレッドを、TCP同時最大接続数である最大ストリーム数分作成し、スレッドプール42(メモリ110)に格納する(図4参照)。但し、TCPの同時最大接続数である最大ストリーム数よりチャンク数Nが小さい場合は、チャンク数であるN個のスレッドを作成し、スレッドプール42(メモリ110)に格納する。
次に、図4に示すように、図2の転送スレッド実行モジュール50は、転送ジョブリスト41の先頭から転送ジョブを、スレッドプール42内の作成された転送スレッドの数分取り出し、1つの転送スレッドに1つの転送ジョブを割り当て、スレッド毎に転送ジョブを並列に実行する。1つの転送スレッドは1つのコネクションを作成し、TCPのプロトコルラッパー(protocol wrapper)60に転送ジョブに対応するチャンクの転送を依頼する。即ち、作成するコネクション数は転送スレッドの数と等しい。
TCPのプロトコルラッパー(protocol wrapper)60は、個々のコネクションを使用して、分割されたチャンクを、TCPパケット30−1の形式で並列に同時転送する。この時、TCPのプロトコルラッパー(protocol wrapper)60は、パケットの暗号化など付加的な処理を実行する。
図2に戻り、TCPパケット30−1は、インターネットであるTCP/IPネットワーク3を経由して、第1のサーバー22に転送される。第1のサーバー22は、デーモン(daemon)処理(又はSSH処理)22−1を実行し、受信したパケットを復号化する。そして、受信したパケット30−2を複数のチャンク4−0〜4−N−1からなるファイル4に復元する。
図4では、第1のサーバー22は、各コネクションに対し、独立にデータ転送処理22−1を実行する。このデータ処理22−1は、暗号化/復号化など付加的処理を含み、OSのジョブスケジューリングで実行される。この受信プロセスでは、1つのCPU100は、1つのプロセスを担当する。
図4では、転送すべきファイル4のファイルサイズが「105」、チャンクサイズが「10」、ストリーム数が「3」の例を示す。転送ジョブ作成モジュール40は、ファイル4を11個(=105/10=11)のチャンクに分割し、個々のチャンクの先頭位置を示すオフセットとファイル名を付加した11個の転送ジョブを作成し、ジョブリスト41に格納する。
例えば、ジョブリスト41において、転送ジョブ0(offset 0と記す)は、チャンク0に対応する。同様に、転送ジョブ1〜10(offset 10〜100と記す)のそれぞれは、チャンク1〜10に対応する。
転送ジョブ作成モジュール40は、スレッドプール42に最大ストリーム数(ここでは、3個)の転送スレッドを作成する。転送スレッド実行プログラム50は、スレッドプール42の3つの転送スレッドの個々に転送ジョブを割り当て(即ち、3つの転送ジョブを3つのストリームのコネクションに割り当て)、TCPのプロトコルラッパー(protocol wrapper)60に転送を依頼する。そして、図4では、TCPのプロトコルラッパー(protocol wrapper)60は、3つのストリームで3つのチャンクを並列に多重転送する。
図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コネクションで転送される。
この個々のTCPコネクションは独立であるため、単一のTCPコネクションと同一の転送制御、例えば、コネクト、エラー検出、リトライ、エラー訂正、ディスコネクト、を行う。又、個々のTCPコネクションでは、データの順序性を保証する。このため、図5に示すように、4つのストリームでは、リトライ等のため、転送の進行度が異なる場合がある。図5では、ディスティネーションファイル4A内のチャンク内に転送の進行度を、パーセントで表示する。
又、チャンク数Nが最大ストリーム数Mより小さい場合は、このチャンク数Nを同時接続数とする。更に、1度接続したストリームのコネクションを1つのチャンクを転送後も保持し続け、チャンク数Nがストリーム数Mより大きい場合、別の未転送チャンクを転送する際に再利用する。これにより、コネクション接続に関わる通信手続きを短縮できる。図5で説明すると、M個のストリームは、1つのチャンクの転送終了後、矢印に示すように、そのストリームのコネクションを1つのチャンクを転送後も保持し続け、別の未転送チャンク(図5でwaitingと表示したもの)を転送する際に再利用する。
図4の転送例でのコネクションの再利用を、図6で説明する。図6において、図4で説明したものと同一のものは同一の記号で示す。図4では、1番目、2番目、3番目のチャンク0,1、2の転送ジョブが3つの転送スレッド0,1,2に割り当てられ、並列転送が行われていた。
ここで、1番目、2番目のチャンク0,1の転送が完了すると、転送スレッド0,1のコネクションを保持し続け、4番目、5番目チャンク4.5の転送ジョブを、空いた(転送が完了した)2つの転送スレッド0,1に割り当てる。以降、同様にして、転送スレッドがチャンクの転送を完了すると、ラウンド・ロビン方式で、空いた転送スレッドを、ジョブリスト41の次の未処理の転送ジョブに割り当てる。
更に、図4に示すように、端末装置12のCPU100が、マルチコア(例えば、3コア以上)構成であり、Java(登録商標)で動作している場合には、JVM(Java Virtual Machine)により、それぞれの転送スレッドが、それぞれのコアに割り当てられ、処理される。即ち、1つのJVMが、それぞれのスレッドを複数のコアにスケジューリングして、処理を割り当て、処理を実行する。本実施の形態では、ストリーム毎にデータ転送に必要な処理を行う。例えば、暗号化通信を伴うファイル転送では、単一ファイルから読み出したデータに対し暗号化処理を実施後、実際にファイル転送する。このため、暗号化処理時に使用されるCPUは1つに限定され、データ転送動作とは別の遅延が発生する。このため、結果として、転送に要する時間が遅延する。
これに対し、本実施の形態では、暗号化処理を伴うファイル転送時に、ストリーム毎に暗号化処理を実施してデータ転送する。このため、ストリーム数に応じたCPUを並列に使用でき、データ転送動作とは別の遅延量を小さくできる。
このように、単一ファイルを複数のチャンクに分割し、個々の転送スレッドを作成することにより、TCPの最大接続数のストリームで、複数のチャンクを同時転送する。このため、TCPの制約内で、TCPの帯域を最大限使用できる。又、TCPの信頼性、順序性、データ完全性をそのまま利用できる。
一方、分割された個々のチャンクは、1つのファイルとみなして、TCP転送される。このため、受信側では、複数のファイルが転送された場合と区別が難しい。即ち、受信側で、転送された個々のチャンクから元の単一のソースファイル4を復元する工夫が必要である。
本実施の形態では、図5に示すように、転送する個々のチャンクデータに同じファイル名とオフセット値を付加する。オフセット値は、チャンクデータのファイル4内での開始位置を示し、チャンクデータの先頭に付加される。即ち、このオフセット値は、図3で説明したように、チャンク分割した際のそのチャンクの開始アドレスである。受信側では、チャンクデータを受信した際に、同じファイル名の個々の開始オフセット位置から個々のチャンクデータを書き始める。従って、全てのチャンクデータを転送し終わると、ディスティネーションファイル4Aが復元できる。
(ファイル転送構成)
図7は、本実施の形態のファイル転送構成のブロック図であり、図8は、図7の転送ジョブ作成モジュールの処理フロー図であり、図9は、図7の転送スレッド実行モジュールの処理フロー図である。図7において、図1乃至図6で説明したものと同一のものは同一の記号で示す。又、図1と同様に、第1の送受信システム1の第1の端末装置12が、第1の記憶装置10に格納されたファイル4を、第2の送受信システム2の第1のサーバー22にTCPネットワーク3を介しファイル転送(アップロード)する例で説明する。
図7に示すように、端末装置12では、CPU100が、前述の転送ジョブ作成モジュール40と、スレッドプール42と、転送スレッド実行モジュール50と、暗号化モジュール60−1と、エラーコード生成モジュール60−2とを実行する。暗号化モジュール60−1と、エラーコード生成モジュール60−2とは、TCPモジュール60の一部である。
転送ジョブ作成モジュール40は、記憶装置10のソースファイル4(図1参照)をチャンクサイズ単位に分割し(split)、分割したチャンク毎に転送ジョブを作成し、ジョブリスト41に格納する。又、転送ジョブ作成モジュール40は、TCPの最大接続数である最大ストリーム数分の転送スレッドを作成し、スレッドプール42に格納する。転送スレッド実行モジュール50は、スレッドプール42内の作成された転送スレッドに、転送ジョブを割り当て、個々のスレッドへコネクションを割り当て、TCPのプロトコルラッパー(protocol wrapper)60に転送を依頼する。
TCPのプロトコルラッパー(protocol wrapper)60は、最大ストリーム数(最大接続数)分のコネクション(セッション)を作成し、個々のコネクションを使用して、分割されたチャンクを、TCPパケット30−1の形式で並列に同時転送する。この時、TCPのプロトコルラッパー(protocol wrapper)60は、暗号化モジュール60−1でパケットを暗号化処理し、エラーコード生成モジュール60−2でエラーコードを生成する。送信部(通信デバイス)120は、インターネット3を介し送受信データ通信装置22と最大ストリーム数のコネクションを確立し、TCPに従い、データ転送する。
送受信データ通信装置22では、CPU100が、エラーコード検査モジュール22−2と、復号化モジュール22−1と、チャンクリアセンブルモジュール22−3とを実行する。受信部(通信デバイス)120は、インターネット3を介しTCPパケットを受信し、エラーコード検査モジュール22−2は、受信したTCPパケットのエラーを検査する。復号化モジュール22−1は、エラー検査後のパケットデータを復号化する。チャンクリアセンブルモジュール22−3は、複数のストリームのチャンクを前述のオフセット値を用いて、ディスティネーションファイル4Aを復元する(図5参照)。
図8により転送ジョブ作成モジュール40を説明する。この例では、チャンクサイズ及び同時接続数(コネクション数)Mは、ユーザーが指定する固定値である。又、図10でも説明するように、チャンクサイズを自動割り振りできる。先ず、制御ポインタを説明する。ポインタjは、チャンク数を示し、初期値は「0」である。file sizeは、ファイル4のトータルサイズである。Nはチャンク数である。Mは最大同時接続数である。
S1:転送ジョブ作成モジュール40を起動すると、転送ジョブ作成モジュール40は、チャンクサイズchunk size、ファイルサイズfile size及び最大接続数Mを読み込む。
S2:チャンクサイズchunk sizeが、「0」を越えているか判定する。チャンクサイズchunk sizeが、「0」を越えている場合(true)、先ずチャンクサイズが指定されている。
S3:チャンクサイズchunk sizeが、「0」を越えていない場合(false)、チャンクサイズchunk sizeは指定されていない。このため、チャンクサイズchunk sizeを計算する。ここでは、図10の第2の実施の形態でも説明するように、分割したチャンクのサイズchunk sizeが、各チャンクで等しくなるように、チャンクサイズchunk sizeを計算する。例えば、チャンク分割数Nを規定値とし、ファイルサイズをチャンク分割数で割り、チャンクサイズchunk sizeを計算する。
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の実施の形態で説明する。
S5:チャンクポインタjが、チャンクの分割数Nより小さいか(j<N)を判定する。
S6:チャンクポインタjが、チャンクの分割数Nより小さい場合(true)は、まだ、ファイル4をN分割していない状態である。このため、新たなチャンク(転送)ジョブを作成し、ジョブリスト41に追加する。
S7:次に、チャンクポインタjをインクリメント(j++)する。そして、ステップS5に戻る。
S8:チャンクポインタjが、チャンクの分割数Nより小さくない(大きい)場合(false)は、既に、1つのファイル4に対し、N個のチャンクの転送ジョブを作成し終えた状態を示す。このため、スレッドプール42内の転送スレッドに転送ジョブを割り当て、起動(start)する。これにより、図9の転送スレッド実行モジュールが、最大接続数Mの各転送スレッドに対し開始する。この転送スレッド実行モジュールの処理は、図9で後述する。
S9:スレッドプール42内の各転送スレッドがwait状態(割り当てる転送ジョブがない)となったかを判定する。
S10:スレッドプール42内の各転送スレッドがwait状態となると、スレッドプール42に、転送の失敗(failed)ジョブがあるかを判定する。
S11:ステップS10で、スレッドプール42内に失敗ジョブがないと判定する(false)と、転送成功と判断し、終了する。
S12:ステップS10で、スレッドプール42内に失敗ジョブがあると判定する(true)と、転送失敗と判断し、終了する。この場合、ファイル全体の転送失敗と判断する。
このように、ファイル転送を開始する際、ファイルをN個のチャンクに分割し、それぞれの転送ジョブを作成する。又、スレッドプールを設け、同時接続数M分のスレッドを格納し、転送ジョブを転送スレッドに割り当て、転送スレッドの実行(最大接続数の多重転送)を制御する。スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを転送スレッドに割り当て、転送スレッドを実行(チャンク転送を起動)する。スレッドプール内の転送スレッドに割り当てる転送ジョブがなくなると、1つのファイル転送完了と判断する。
次に、図9により、転送スレッド実行モジュール50を説明する。先ず、制御ポインタを説明する。retryは、TCPの転送リトライ回数を示す。転送状態(state)は、成功(success)であるか、失敗(failed)であるかのいずれかを示す。bufferは、メモリ110内での転送すべきファイルの先頭アドレス(allocate())を示す。オフセット(offset)は、前述のファイル4内の各チャンクの先頭位置を示し、例えば、i番目のチャンクは、offset=i*chunk size (図3で説明したチャンクサイズ)である。
S20:転送スレッド実行モジュール50を開始すると、リトライポインタretryを「0」に初期化し、転送状態(state)に失敗(failed)を、bufferに、転送すべきファイル4の先頭アドレスをセットする。又、オフセット(Offset)を「i*chunk size」で計算する。
S21:セッション(session)を接続(connect)にセットする。これにより、TCPラッパ60(図4参照)は、TCPコネクションを確立する。
S22:TCPラッパ60から接続に成功したかの通知を受けたかを判定する。接続に成功したとの通知を受けなかった場合(false)、ステップS29に進む。
S23:TCPラッパ60から接続に成功したとの通知を受けた場合(true)、転送長lenをセットする。即ち、1つのチャンクデータを複数のTCPパケットに分割して、TCP転送する。このため、そのチャンクのオフセット位置からTCPパケットの読み込みサイズbuffer分のデータを読み出し、その読み込みサイズを転送長lenに設定する。
S24:読み出したデータを、TCPラッパ60の転送バッファに書き込む。これにより、当該コネクションでそのチャンクのデータ転送を開始する。
S25:TCPラッパ60からI/Oエラーの通知があったかを判定する。
S26:I/Oエラーの通知がない場合(false)、そのチャンクの転送が完了したと判断し、オフセット(offset)を更新する。即ち、offset=offset+lenを計算する。
S27:次に、ストリームの終了、即ち、EOS(end of stream condition)であるか判定する。EOSは、例えば、offset>=(i+1)*chunk sizeとなった場合(即ち、S26でファイルサイズを越えた場合)や、ファイルの終了に到達した場合である。EOSでない場合(false)、ステップS22に戻る。
S28:ステップS27でEOSであると判定すると(true)、転送状態(state)を成功(success)に設定し、終了する。
S29:ステップS25でI/Oエラーの通知があった場合(true)、リトライ回数retryを「1」インクリメントする。
S30:リトライ回数retryがリトライ回数の最大(maxR)を越えたかを判定する。リトライ回数retryがリトライ回数の最大(maxR)を越えた場合(true),転送動作を終了する。この場合、転送状態(stat)は、ステップS20で初期設定された失敗のままとなる。
S31:リトライ回数retryがリトライ回数の最大(maxR)を越えていない場合(false),セッションを閉鎖(close)し、ステップS21に戻る。
このように、転送スレッドを実行する際に、セッションを接続(connection)に設定し、当該チャンクの転送コネクションを確保する。当該チャンクの転送コネクションを確保すると、当該チャンクのデータ及びオフセットをTCPラッパ60に出力する。TCPラッパ60が当該コネクションで当該チャンクデータ及びオフセットをTCPで転送する。尚、図9の処理は、1つの転送スレッド分を示し、図8で説明したように、最大接続数M個の処理が走る。
(ファイル転送方法の第2の実施の形態)
図10は、第2の実施の形態のファイル転送方法の説明図である。図2で説明した第1の実施の形態では、チャンクサイズは固定であった。このため、図3に示すように、末尾のチャンク4−N−1のデータ長はチャンクサイズ以下となる可能性がある。
このため、最大同時接続数Mを使用した場合、末尾のチャンク4−N−1を、それ以前の順番のチャンクと並列転送している場合、末尾のチャンクデータが先に転送完了してしまう。この実施の形態は、このような事態を防止し、ファイルを分割して、最大同時接続数Mの並列転送することにより、転送時間をより短縮する。
図10に示すように、ファイルの各チャンクのチャンクサイズを同じにした。この処理は、図8のステップS2,S3で説明した。ファイルの各チャンクのチャンクサイズを同じにしたため、最大同時接続数Mを使用した場合、末尾のチャンク4−N−1を、それ以前の順番のチャンクと並列転送している場合、末尾のチャンクデータが先に転送完了してしまうことを防止できる。このため、ファイルを分割して、最大同時接続数Mの並列転送することにより、転送時間をより短縮できる。
(ファイル転送方法の第3の実施の形態)
図2で説明した第1の実施の形態では、最大同時接続数(ストリーム数)Mは一定であった。図11、図12で説明する第3の実施の形態では、最大同時接続数(ストリーム数)Mを転送スピードに応じて変更するものである。例えば、既に転送を終えたチャンクの転送速度に応じて動的に最大接続数を変更する。
図11は第3の実施の形態のソフトウェアモジュール構成図である。図11において、図2乃至図6で説明したものと同一のものは、同一の記号で示してある。即ち、図11の構成は、転送ジョブ作成モジュール40、スレッドプール42、転送スレッド実行モジュール50及びTCPラッパ60の他に、モニターモジュール70を設けた。このモニターモジュール70は、TCPラッパ60による転送速度をモニターし、スレッドプール42の最大接続数M(転送スレッド数)を変化する。
図12は、図11のモニターモジュール70の処理フロー図である。
S50:モニターモジュール70は、旧速度oldSpeed、現在速度currentSpeedを、「0」に初期化する。
S51:モニターモジュール70は、スレッドプール内の全スレッドの転送速度を、TCPラッパ60から取得し、新速度newSpeedを、その合計を計算して得る。
S52:現在速度currentSpeedが、設定した遅延時間(例えば、1000ms)前の旧速度oldSpeedの1.2倍より大きいか(早いか)を判定する。
S53:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの1.2倍より大きい場合(true)、最大接続数Mを「1」インクリメントする。図7で言えば、ステップS3の最大接続数Mが増加する。
S54:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの1.2倍より大きくない場合(false)、現在速度currentSpeedが、1000ms前の旧速度oldSpeedの0.8倍より小さいか(遅いか)を判定する。
S55:現在速度currentSpeedが、1000ms前の旧速度oldSpeedの0.8倍より小さい場合(true)、最大接続数Mを「1」デクリメントする。図8で言えば、ステップS4の最大接続数Mが減少する。
S56:現在速度currentSpeedを、ステップS51の新速度newSpeedに更新する。
S57:スレッドプール42に転送スレッドが転送完了しているかを判定する。スレッドプール42に転送スレッドが転送完了していない場合(false),終了する。
S58:一方、スレッドプール42に転送スレッドが転送完了している場合(true)、1000msスリープし、ステップS51に戻る。
このようにして、スレッドプール内の転送実行中の転送スレッドの転送速度に応じて、同時最大接続数を変更するため、TCPの最大ストリーム数を有効に利用できる。又、転送速度が遅い場合、同時最大接続数を減少するため、無用な再送等を防止できる。
(他の実施の形態)
前述の実施の形態では、1つのファイルの転送を例に説明したが、プログラムの起動時に同時に転送するように指定した複数のファイルにも適用できる。若しくはデイレクトリを同時に転送する場合にも適用できる。その際、単一のファイル毎に、前述したファイルの分割と多重化通信を行う。又、同時接続数はプログラムの起動単位で保持し、ストリーム数は複数のファイルに跨って算出する。
以上、本発明を実施の形態により説明したが、本発明の趣旨の範囲内において、本発明は、種々の変形が可能であり、本発明の範囲からこれらを排除するものではない。
単一のファイルをN個のデータ群に分割し、N個の転送ジョブを作成し、TCPの最大接続数のコネクションを利用して、N個の転送ジョブをM個のコネクション(転送スレッドの実行)で多重転送するため、信頼性のあるTCPの帯域をフルに使用して、ファイル転送できる。即ち、サイズの大きいファイルの転送時間を短縮できる。又、分割データ群とともにそのデータ群のファイル内の位置を示すオフセットを転送するため、分割したファイルのデータ群を独立したコネクション(またはチャネル)で転送しても、受信側でオフセットから分割したデータ群を元のファイルに復元できる。
1:クライアント、2:サーバー、3、インターネット、4、転送ソースファイル、4A:ディスティネーションファイル、4−0〜4−N−1:チャンク(データ群)、OF:オフセット、10、20:記憶装置、12,22:端末装置、40:転送スレッド作成モジュール、42:スレッドプール、50:転送スレッド実行モジュール、60:TCPラッパ、100:CPU(処理部)、110:メモリ、120:通信デバイス。

Claims (5)

  1. 処理部が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
    前記処理部が、TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記各転送スレッドを前記処理部の複数のコアにスケジューリングし、前記ストリーム毎に暗号化を伴うデータ転送を実行し、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記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個のデータ群とオフセット位置を並列に転送する工程であって、前記M個のストリームのコネクションが、それぞれ、当該コネクションを形成する転送スレッドに割り当てられた転送ジョブで指定されたデータ群とオフセット位置を転送する工程とを、
    前記コンピュータに実行させるプログラム。
  4. 請求項3のプログラムにおいて、
    前記作成されたN個の転送ジョブの内、M個の転送ジョブをスレッドプールに設けられた前記TCPの同時接続数Mの転送スレッドに割り当てる工程と、
    前記スレッドプール内の前記M個の転送スレッドにより、前記M個のデータ群とオフセット位置を、前記TCPのM個のコネクションにより、並列に転送した結果、前記スレッドプール内の1つの転送スレッドの実行が完了すると、次の転送ジョブを前記転送スレッドに割り当て、前記転送スレッドを実行する工程とを
    更にコンピュータに実行させるプログラム。
  5. 処理部が、メモリ内の単一のファイルをN個(Nは整数で、2以上)のデータ群に分割し、N個のデータ群とオフセット位置を示すN個の転送ジョブを作成する工程と、
    前記処理部が、TCP(Transmission Control Protocol)の同時接続数のM個のストリームのコネクションを形成するM個の転送スレッドにN個の転送ジョブを割り当て、前記M個のストリームのコネクションにより、前記N個の転送ジョブで指定された前記N個のデータ群とオフセット位置の内、前記M個の転送スレッドに割り当てられた前記M個のデータ群とオフセット位置を並列に転送する工程とを有し、
    前記M個のストリームのコネクションは、それぞれ、当該コネクションを形成する転送スレッドに割り当てられた転送ジョブで指定されたデータ群とオフセット位置を転送することを特徴とするファイル転送方法。
JP2015030241A 2015-02-19 2015-02-19 ファイル転送方法及びファイル転送プログラム Expired - Fee Related JP5996691B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2015030241A JP5996691B2 (ja) 2015-02-19 2015-02-19 ファイル転送方法及びファイル転送プログラム
US14/673,264 US10241929B2 (en) 2015-02-19 2015-03-30 Data transfer method for parallel transfer of data divided into a plurality of data groups over multiple TCP connections simultaneously

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015030241A JP5996691B2 (ja) 2015-02-19 2015-02-19 ファイル転送方法及びファイル転送プログラム

Publications (2)

Publication Number Publication Date
JP2016152569A JP2016152569A (ja) 2016-08-22
JP5996691B2 true JP5996691B2 (ja) 2016-09-21

Family

ID=56693732

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015030241A Expired - Fee Related JP5996691B2 (ja) 2015-02-19 2015-02-19 ファイル転送方法及びファイル転送プログラム

Country Status (2)

Country Link
US (1) US10241929B2 (ja)
JP (1) JP5996691B2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10375144B2 (en) * 2015-09-28 2019-08-06 Sony Corporation Uploading over parallel requests
US10120921B2 (en) * 2015-10-20 2018-11-06 Mastercard International Incorporated Parallel transfer of SQL data to software framework
CN113259415B (zh) 2016-07-30 2023-03-10 华为技术有限公司 一种网络报文处理方法、装置及网络服务器
CN108021333B (zh) * 2016-11-03 2021-08-24 阿里巴巴集团控股有限公司 随机读写数据的系统、装置及方法
JP6944317B2 (ja) * 2017-09-12 2021-10-06 株式会社日立システムズ ファイル転送システムおよびファイル転送方法
US11269536B2 (en) * 2019-09-27 2022-03-08 Open Text Holdings, Inc. Method and system for efficient content transfer to distributed stores
CN111225122A (zh) * 2020-01-19 2020-06-02 深圳英飞拓科技股份有限公司 基于ptp协议的校时机制在多摄像机视频同步中的实现方法
US11082495B1 (en) 2020-04-07 2021-08-03 Open Text Holdings, Inc. Method and system for efficient content transfer to a server

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
EP1563389A4 (en) * 2001-08-01 2008-06-25 Actona Technologies Ltd VIRTUAL DATA DISTRIBUTION NETWORK
JP4281649B2 (ja) * 2004-08-05 2009-06-17 日本電信電話株式会社 データパケット伝送方法及びシステム
US20120054362A1 (en) * 2010-08-31 2012-03-01 Canon Kabushiki Kaisha Mechanism for autotuning mass data transfer from a sender to a receiver over parallel connections
JP2013012284A (ja) * 2011-06-30 2013-01-17 Toshiba Corp コンテンツ送信装置及びダビング方法
JP5152940B2 (ja) 2011-08-10 2013-02-27 株式会社Skeed バルクデータを効率的に転送するためのデータ転送方法
KR20130046540A (ko) * 2011-10-28 2013-05-08 삼성에스디에스 주식회사 데이터 전송 장치 및 방법
JP2013121028A (ja) * 2011-12-07 2013-06-17 Nippon Telegr & Teleph Corp <Ntt> データパケット伝送方法及びシステム
JP5724154B2 (ja) 2013-05-16 2015-05-27 株式会社Skeed データ配信システム、データ配信のためのデータ通信装置およびプログラム

Also Published As

Publication number Publication date
US20160246538A1 (en) 2016-08-25
US10241929B2 (en) 2019-03-26
JP2016152569A (ja) 2016-08-22

Similar Documents

Publication Publication Date Title
JP5996691B2 (ja) ファイル転送方法及びファイル転送プログラム
US9608917B1 (en) Systems and methods for achieving high network link utilization
EP2359565B1 (en) Reassembling streaming data across multiple packetized communication channels
US9577961B2 (en) Input/output management in a distributed strict queue
US9578074B2 (en) Adaptive content transmission
US7987467B2 (en) Scale across in a grid computing environment
US9571414B2 (en) Multi-tiered processing using a distributed strict queue
US9584593B2 (en) Failure management in a distributed strict queue
US9843528B2 (en) Client selection in a distributed strict queue
US20120191674A1 (en) Dynamic Monitoring of Ability to Reassemble Streaming Data Across Multiple Channels Based on History
US20150381549A1 (en) Message batching in a distributed strict queue
US9575820B2 (en) Client control in a distributed strict queue
US10050893B2 (en) Data transmission using modified weighted fair queue algorithm
US20200059427A1 (en) Integrating a communication bridge into a data processing system
US11076188B1 (en) Size comparison-based segment cancellation
US9577878B2 (en) Geographic awareness in a distributed strict queue
WO2024156239A1 (zh) 视频流传输方法、装置、电子设备及存储介质
US12120203B2 (en) UDP message distribution method, UDP message distribution apparatus, electronic device and computer readable storage medium
US20160057068A1 (en) System and method for transmitting data embedded into control information
CN115617474A (zh) 一种面向边缘计算的启动时间感知的依赖任务调度方法
US20100095006A1 (en) Efficient selection of a messaging multiplexed channel instance
JP5440105B2 (ja) 画像処理システム、画像処理装置、データ転送制御方法、プログラム及び記録媒体
CN117201479B (zh) 一种跨集群文件传输方法、系统及装置
JP7326234B2 (ja) 情報処理装置、情報処理方法及びコンピュータプログラム
US10270883B2 (en) Scheduling downloads

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160715

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160824

R150 Certificate of patent or registration of utility model

Ref document number: 5996691

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees