/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など、そのタスク用に特別に設計された言語を使用することをお勧めします。どちらのスクリプトの選択肢も、厳しいベンチマークに適したツールではありません。少なくとも多くの注意がなければそうではありません。