Bash

跟踪在 bash 腳本中寫入和讀取文件夾的總數據

  • June 8, 2017

我有一個 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"

您可以在任務之前和之後從 /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

引用自:https://unix.stackexchange.com/questions/369449