ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

ファイルサーバー間のデータコピーで処理をするPCのメモリ使用の負荷について

ファイルサーバー間のデータコピーで処理をするPCのメモリ使用の負荷について調べてみました。ちょうど検証する環境がないので、気になったのですが、ファイルサーバーのサイジングについて、調べるとだいたい8GB~のメモリを実装していることが多いです。ファイルサーバーって利用者が多いわりにスペックがそれほど必要にならないと感じましたが、100人規模でも8GBくらいで普通に動作しています。

 

ただ、ファイル転送の仕組みに影響されてメモリを使用するケースもあります。処理的にはメモリに一旦データが読み込まれてその後、ディスクに書き込まれます。その際に、データを一旦メモリにすべて転送されてから、ディスクに書き込まれる処理をする場合は、メモリの使用量が高くなるケースがあります。

 

Windows Serverでファイルサーバを構築する場合は、それほど気になりませんが、今回、調べようと思ったきっかけは、データを転送する場合に上に書いたメモリはどこが消費するのかということです。

 

参考になりそうな情報はこちらにありました。

ファイルサーバー間のデータコピーについて | その他(Windows)のQ&A 解決済み【OKWAVE】 

 

以下は質問内容です。

 

ファイルサーバー(マスター)のデータを、ファイルサーバ(バックアップ)に
ネットワーク経由でコピーしようとしています。コピーのコマンドを実行するのは、同じネットワーク内に設置しているクライアントPC(Windows8.1)からです。この場合、処理の命令はクライアントPCから行いますが、データの流れとしては以下のような認識で正しいでしょうか?

■想定しているデータの流れ
ファイルサーバー(マスター) → ファイルサーバー(バックアップ)

■想定していないデータの流れ
ファイルサーバー(マスター) → クライアントPC →ファイルサーバー(バックアップ)

前者の動きをすると考えているのですが、気になっている点としては、クライアントPCをシャットダウンしたり、コピーのコマンドを停止すると処理が止まるため、もしかすると後者の動きが正しいのでは、と考えた次第です。

 

 

続いて、回答です。

 

コピーするプログラムの内部動作としてクライアントPCのメモリー上に読み込んだデータを展開してバックアップに書き込みますので、後者の動きです。実メモリー内に展開できない場合は仮想記憶としてHDD(この場合はSSD)も利用します。

前者の動きをするためには、マスターのサーバーに対して「バックアップに書き込め」という動作をさせないとだめです。

 

つまり、PC側でコピー処理をする場合、一旦ファイルサーバAからデータをPC上のメモリに読み込み、その後、ファイルサーバBのディスクに書き込まれることになります。

 

この場合は、PC側のメモリを消費する想定になります。一方で、サーバのプログラムで処理する場合、処理を実行しているサーバ側のメモリが使用されることになります。その為、サーバがGETでとりにいくのか、PUTで渡すのかで変わってくると思います。この考え方はシステムのサイジングにも関係してきます。

 

Anker PowerCore Essential 20000 (モバイルバッテリー 超大容量 20000mAh) 【USB-C入力ポート/PSE認証済/PowerIQ/低電流モード搭載】iPhone & Android 各種対応 (ブラック)