メモリからS3にアップロードしてベンチマークする

メモリからS3にアップロードしてベンチマークする

S3 の読み取り/書き込みで、非常に基本的な時間コマンドをいくつか実行しています。問題は、システム IO の影響を受けないようにし、メモリからベンチマークを実行したいことです。友人はパイプとして /dev/null を使用することを提案しましたが、約 1 GB のサイズの 1000 個のファイルを含むフォルダーがあります。

私の bash コマンドは現在次のようになっています:

time aws s3 cp folder s3://mybucket/folder

メモリからの書き込みのみの時間を計測する方法を提案してください。

どうもありがとう

答え1

ディレクトリを RAM ディスクにコピーし、そこからアップロード (およびテスト) します。

どのような RAM ディスクですか? いくつかのオプションがあります:

  1. おそらく、OS にはすでに が存在し、そのサイズは十分大きいでしょう。タイプのファイルシステムについては、の出力df(より便利なのは、サポートされている場合) を確認してください。 である可能性があります。は誰でも書き込み可能であると予想されるため、RAM ディスクで小さすぎない場合は使用できます。df -htmpfs/dev/shm/dev/shm

  2. ユーザー専用の別のRAMディスクが存在する場合があります。このフォルダは何ですか/run/user/1000私の Debian または Kubuntu では、df -h "$XDG_RUNTIME_DIR"tmpfs を確認し、そのサイズとマウントポイントを知ることができます。

  3. この答えオンデマンドで tmpfs を作成する例を示します (サイズは 16 GiB ですが、ニーズとリソースに合わせて調整してください)。

    mount -o size=16G -t tmpfs none /mnt/tmpfs
    

    これを行うにはルートアクセスが必要です。

次のような質問があります。tmpfs のサイズを設定するものは何ですか? いっぱいになるとどうなりますか?興味深いと思うかもしれません。


代わりに、vmtouchディレクトリ内のすべてのファイルを読み取り、仮想メモリにマップします。私なら、RAM ディスクを使用します。それでも、何らかの理由で RAM ディスクを使用できない場合は、何がvmtouchできるかを知っておくとよいでしょう。

通常ユーザーとして使用できるのは、次のとおりですvmtouch -t

-t
仮想メモリ ページにアクセスします。ファイルの各ページから 1 バイトを読み取ります。ページがメモリ内に存在しない場合は、ページ フォールトが生成され、ページはディスクからファイル システムのメモリ キャッシュに読み込まれます。

-t十分ではないかもしれません:

注: 各ページがメモリに取り込まれることは保証されていますが、vmtouchコマンドが完了するまでにページがメモリから削除される可能性があります。

ルートとして以下を使用できますvmtouch -l:

-l
-tページを物理メモリにロックします。このオプションは、すべてのメモリ マッピングを呼び出し、終了時に記述子を閉じないことを除いて、 と同じように機能しますmlock(2)。クロールの終了時に成功した場合、vmtouch は無期限にブロックします。ファイルは、プロセスが強制終了されるまで物理メモリにロックされますvmtouch

関連情報