Bashスクリプトのフォルダから書き込んだデータの総追跡

Bashスクリプトのフォルダから書き込んだデータの総追跡

計算を実行するbashスクリプトがあります。この計算により、最大12GBの大きなスクラッチファイルが作成され、スクラッチフォルダのディスク使用量は約30GBになります。この過程で、合計でどれだけのデータがディスクに書き込まれ、合計でどれだけのデータが読み取られるかを知りたいと思います。これは、ディスクIOボトルネックを理解し、より良いスクラッチディスクタイプを選択するのに役立ちます。

質問:特定の時間間隔の間にフォルダに書き込まれたデータ(MBまたはGB)を追跡します。また、フォルダからデータを読み取るまでの時間間隔を追跡します。

私のスクリプトの現在のバージョンは次のとおりです。

#!/bin/bash
# Running QM-JOB: helix HPC
    d="$1"  # .dal file
    m="$2"  # .mol file
    n="$3"  # number of CPU cores to be used for this calculation.
dir=$(pwd)
dt=$(date  +%Y-%m-%d:%H:%M:%S )
echo -e 'Job started @ '$dt'' >> /home/vayu/dalton/runlog.log
echo "-----------------------------------------------"
df -h /dev/md0
echo "-----------------------------------------------"

folder="<path/to/the/folder>" #Scratch folder

# start IO log on "scratch folder" (no idea how to implement this)
echo "-----------------------------------------------"

export OMP_NUM_THREADS=$n
source /opt/intel/parallel_studio_xe_2017.0.035/compilers_and_libraries_2017/linux/bin/compilervars.sh intel64
source /opt/intel/parallel_studio_xe_2017.0.035/compilers_and_libraries_2017/linux/mkl/bin/mklvars.sh intel64
source /opt/intel/parallel_studio_xe_2017.0.035/compilers_and_libraries_2017/linux/mpi/bin64/mpivars.sh intel64

./application_script "$d" "$m" "$n" "$folder"

    dt2=$(date '+%d/%m/%Y %H:%M:%S');

#stop "scratch folder" IO log
#print total data written in "scratch folder"
#print total data read from "scratch folder"

ベストアンサー1

ジョブの前後に/proc/self/ioからI / O統計を読み、「write_bytes」および「read_bytes」行から値を引くことができます。詳細については、「man proc」を参照してください。ただし、デバイスやフォルダによっては区別されません。

例は次のとおりです。

#!/bin/bash
cat /proc/$$/io
dd if=/dev/zero of=/tmp/iotest bs=1M count=5
sync
cat /proc/$$/io
rm /tmp/iotest

おすすめ記事