我有一个 bash 脚本来进行计算。此计算会生成高达 12 GB 的大暂存文件,暂存文件夹的磁盘使用量约为 30 GB。我想知道在此过程中总共有多少数据写入磁盘以及总共读取了多少数据。这将帮助我了解磁盘 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