計算を実行する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