Mengukur penggunaan I / O disk dari suatu program

12

time adalah perintah yang brilian jika Anda ingin mengetahui berapa banyak waktu CPU yang diberikan perintah.

Saya mencari sesuatu yang serupa yang dapat mengukur I / O disk program dan setiap anak. Lebih disukai itu harus membedakan antara I / O yang di-cache (dan dengan demikian tidak menyebabkan disk berputar) dan I / O yang tidak di-cache.

Jadi saya ingin melakukan:

iomeassure my_program my_args

dan dapatkan output yang mirip dengan:

Cached read: 10233303 Bytes
Cached write: 33303 Bytes  # This was probably a tmp file that was erased before making it to the disk
Non-cached read: 200002020 Bytes
Non-cached write: 202020 Bytes

Saya telah melihat vmstat, iostatdan sar, namun tidak satupun dari ini melihat sebuah proses tunggal. Sebaliknya mereka melihat keseluruhan sistem.

Saya telah melihat iotop, tetapi itu hanya memberi saya pandangan instan ini.

--- sunting ---

jawaban snap sepertinya dekat.

'Input sistem file:' adalah non-cache yang dibaca dalam blok 512-byte.

'Keluaran sistem file:' adalah penulisan cache dalam blok 512-byte.

Anda dapat memaksa cache kosong dengan:

sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null

Saya diuji dengan:

 seq 10000000 > seq
 /usr/bin/time -v bash -c 'perl -e "open(G,\">f\"); print G <>;close G; unlink \"f\";" seq'
Ole Tange
sumber

Jawaban:

9

Anda tidak menentukan sistem operasi yang Anda gunakan.

Linux

Alih-alih menggunakan time fooyang (biasanya) sebuah shell built-in Anda bisa mencoba perintah eksternal /usr/bin/time foo. Ini memberikan beberapa informasi tambahan seperti jumlah input dan output sistem file (tetapi tidak ada informasi tentang hit cache atau jumlah byte). Lihat man timedan man getrusageuntuk instruksi lebih lanjut.

Perhatikan bahwa fitur ini memerlukan kernel Linux versi 2.6.22 atau lebih baru.

FreeBSD

Gunakan /usr/bin/time -l foo. Ini memberi jumlah input dan output. Lihat man timedan man getrusageuntuk instruksi lebih lanjut.

jepret
sumber