テキストファイルをダウンロードしてtmpfsに書き込むのは、ディスクに書き込むよりも遅いです。なぜですか?

テキストファイルをダウンロードしてtmpfsに書き込むのは、ディスクに書き込むよりも遅いです。なぜですか?

/rtmp/Ubuntu OSに1 GBのRAMが割り当てられているtmpfsというファイルがあります。

私は小さなテキストファイルをハードドライブに書き込む方が速いか、またはこのRAMドライブに書き込む方が速いかどうかをテストするためにbashスクリプトを使用しています/rtmp/

Bashスクリプトはハードドライブに書き込みます。

#!/bin/bash

URL="http://some.website/some.txt"

wget -O ~/current/axis_tmp ${URL}

cat ~/current/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > ~/current/tmp.txt

sed -i 's/^/X,/' ~/current/tmp.txt
sed -i 's/$/,Y/' ~/current/tmp.txt

exit 0

tmpfsに書き込むためのBashスクリプト

#!/bin/bash

URL="http://some.website/some.txt"

wget -O /rtmp/axis_tmp ${URL}

cat /rtmp/axis_tmp | grep "^pattern" | tail -n 1 | awk -F',' '{printf("%.0f\n", $3)}' | sed 's/ //g' > /rtmp/tmp.txt

sed -i 's/^/X,/' /rtmp/tmp.txt
sed -i 's/$/,Y/' /rtmp/tmp.txt

exit 0

コマンドを実行しtimeた後、次のような結果が得られます。

ディスクへの書き込み

real    0m0.554s
user    0m0.022s
sys     0m0.003s

tmpfsに書き込む

real    0m0.614s
user    0m0.023s
sys     0m0.002s

テキストファイルの書き込みがtmpfsディスクにファイルを書き込むよりも遅いのはなぜですか?処理時間は次のとおりです。急いでに書きますかtmpfs

答え1

あなたのスクリプトはI / Oをテストする正しい方法ではありません。 〜のようにハディルブそのうちのいくつかを教えてください。もっとたくさんあります。そのため、これを達成するための特別なツールがあります。 IMHOの最高のツールはおそらくfio。これを試してみることができます

fio --name=fio-rand-write --rw=randwrite --bs=4k --direct=0 --numjobs=4 \
--size=512M --ioengine=libaio --iodepth=16

cdたとえば、テストしたいパーティションのフォルダに移動してコマンド/rtmpを実行します。詳細については、その文書や他のスレッドを自由に読んでください。

答え2

スクリプトは、要求されたタスク(ここで作成されたデータの一部)を実行する前後に多くのタスクを実行します。シェルプログラムを起動し(おそらくすでにメモリにあるため、あまり問題ではありません)、データ領域を初期化、検索、読み取り、解釈する必要があります。起動ファイル(.bashrc.bash_profile自宅のシステム全体のファイル、...)、その中に提供されたコマンドを読み、解釈し、スクリプトのコマンドを読んで解釈し、呼び出されたプログラムを順番に実行し、すべてを分解した後。測定は主に作業自体ではなく間接費です。

シェルは直接ユーザー対話に使用され、いくつかの基本的なプログラミング機能(複数のファイルを同時に処理するなど、1行のコードを書くことが多い)を備えており(パフォーマンスがあまり良くない限り)、より実用的なプログラムを書くこともできます。あります。重要)。しかし、深刻なスクリプトの場合は、Python、Perl、Rakuなど、そのタスク用に特別に設計された言語を使用することをお勧めします。どちらのスクリプトの選択肢も、厳しいベンチマークに適したツールではありません。少なくとも多くの注意がなければそうではありません。

関連情報