Bagaimana saya bisa memonitor disk I / O di direktori tertentu?

10

Saya punya beberapa proses dengan nama yang diketahui yang semuanya ditulis ke file dalam satu direktori. Saya ingin mencatat jumlah blok disk yang dibaca dan ditulis dalam periode tertentu ( bukan hanya akses file) untuk menguji apakah perubahan parameter mengurangi jumlah I / O secara signifikan. Saat ini saya menggunakan iostat -d -p, tetapi itu terbatas pada seluruh partisi.

l0b0
sumber
1
Ini berbeda dari pertanyaan-pertanyaan itu, karena saya tidak tertarik pada file itu sendiri melainkan jumlah I / O.
l0b0

Jawaban:

10

Saya menyadari ini akan terdengar sederhana dan tidak masuk akal, tetapi jika Anda memiliki kendali atas aplikasi yang dimaksud (mungkin di lingkungan pengujian), Anda HANYA me-mount direktori itu pada partisi sendiri, lalu iostat, dll. Akan memberi tahu Anda hanya tentang hal itu, dan tidak ada yang lain di tempat itu.

Jika ada drive fisik yang terlibat, Anda dapat memalsunya dengan loopback mount à la

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

Itu tidak akan sepenuhnya menghapus semua I / O disk yang bersaing, tapi saya cukup yakin iostatoutput akan lebih spesifik untuk kebutuhan Anda.

dianevm
sumber
3

Saya tidak berpikir ada jalan langsung. Salah satu cara untuk mendapatkan data yang Anda inginkan adalah dengan mengakses pohon direktori melalui sistem file virtual yang mengakses log. Loggedfs adalah salah satu sistem file seperti itu, meskipun saya tidak tahu apakah itu dapat menampilkan semua data yang Anda minati. (Jika tidak, mungkin ini akan menjadi upaya pengkodean sederhana untuk data itu.)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2

Anda dapat menggunakan inotifywait -m DIRNAMEdari alat inotify .

Tobias Kienzler
sumber
-dtidak ada di inotifywait 3.13. Apakah yang Anda maksud -m?
l0b0
@ l0b0: oh, saya menggunakan 3,14 dari repo git. Maaf. Tetapi halaman manual menyatakan itu sama -mdengan pengecualian untuk menjalankan di latar belakang dan membutuhkan pengabaian.
Tobias Kienzler
juga -rmungkin berguna
Tobias Kienzler
1
Mengujinya. Saya minta maaf atas kesalahpahaman, tetapi saya tidak tertarik pada file mana (atau bahkan berapa banyak file) yang diakses, tetapi lebih pada jumlah I / O.
l0b0
2
Catatan, ini khusus untuk Linux. BSD memiliki kqueue dan pnotify panggilan sistem, tapi saya tidak tahu apakah mereka melakukan persis apa yang diminta penulis.
Shawn J. Goff