scp の複数同時接続

日本とアメリカの間で internet 越しに data を大量転送する場合、国内で転送する場合に比べて転送速度が十分に出ません。その理由は、単純に日本とアメリカが空間的に離れているからです。

東大も SLAC も当然 1 Gbps の回線をそれぞれの server に載せていますが、遅延時間*1のせいで性能を使い切ることはできません。scp で転送してみると、実際に出る速度はおよそ 5 Mbps です。 隣り合わせの server 同士では 400 Mbps 程度出ますので、主には遅延時間のせいで約 100 倍も通信速度を損していることになります。

実際に速度を制限するのは internet や接続している装置の性能ではなく遅延時間なわけですから、転送 data を複数に分割して、複数の scp を同時実行すれば理論上は転送速度が向上するはずです。そこで、どの程度の速度が出るかを試してみました。

東大本郷と SLAC の間で、1 GB の file を同時に 40 個の scp で転送してみたところ、1 process あたりの平均で 5.3 Mbps が出ました。合計で 212 Mbps 出ています。これだけあれば、1 時間で 90 GB 程度の転送を行うことが可能になります。24 時間で 2.2 TB ですから、大量の data 転送をするにしても、大して問題になりません。

scp を 40 個も同時に走らせた場合、 CPU の処理が気になりますが、2.5 GHz x 4 core の CPU で、送信側、受信側ともに10%程度の占有率しかありませんでした。これも問題にならないでしょう。

*1:scp などの TCP 通信を用いた data 転送方法では、ある大きさの data が送信されるたびに、送受信された data が正しいかという確認を行います。そのため、一定の data 量が通信されるたびにこの確認作業が発生するため、空間的に離れた場所ではこの確認作業が data 転送速度を制限することになります。例えば東京と San Francisco の距離は、約 8000 km もあります。単純に data が光速度で伝わったとしても、この区間の往復には 50 ミリ秒必要となります。そのため、data の確認作業のたびに 50 ミリ秒の待ち時間が生じてしまうのです。これを遅延時間と呼びます。実際に ping コマンドを使って、東大本郷と SLAC での通信速度を調べてみると、往復にはおよそ 120 ミリ秒かかっていることが分かります。これが実際の遅延時間となって現れます。