Đo sử dụng đĩa I / O của chương trình


12

time là một lệnh tuyệt vời nếu bạn muốn tìm ra thời gian CPU cho một lệnh đã cho.

Tôi đang tìm kiếm một cái gì đó tương tự có thể đo I / O đĩa của chương trình và bất kỳ đứa trẻ nào. Tốt nhất là nên phân biệt giữa I / O đã được lưu trong bộ nhớ cache (và do đó không làm cho đĩa quay) và I / O không được lưu trong bộ nhớ cache.

Vì vậy, tôi muốn làm:

iomeassure my_program my_args

và nhận đầu ra tương tự như:

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

Tôi đã xem xét vmstat, iostatsar, nhưng không ai trong số này đang xem xét một quá trình duy nhất. Thay vào đó họ nhìn vào toàn bộ hệ thống.

Tôi đã xem xét iotop, nhưng điều đó chỉ cho tôi một cái nhìn ngay lập tức.

--- biên tập ---

câu trả lời của snap có vẻ gần.

'Đầu vào hệ thống tệp:' là các lần đọc không được lưu trong bộ đệm 512 byte.

'Đầu ra hệ thống tệp:' là ghi được lưu trong bộ nhớ cache trong các khối 512 byte.

Bạn có thể buộc bộ đệm trống với:

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

Tôi đã thử nghiệm với:

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

Câu trả lời:


9

Bạn đã không chỉ định hệ điều hành nào bạn sử dụng.

Linux

Thay vì sử dụng time foo(thường là) một shell được tích hợp sẵn, bạn có thể thử lệnh bên ngoài /usr/bin/time foo. Nó cung cấp một số thông tin bổ sung như số lượng đầu vào và đầu ra của hệ thống tệp (nhưng không có thông tin nào về các lần truy cập bộ đệm hoặc số lượng byte). Xem man timeman getrusage để được hướng dẫn thêm.

Lưu ý rằng tính năng này yêu cầu Linux kernel phiên bản 2.6.22 trở lên.

FreeBSD

Sử dụng /usr/bin/time -l foo. Nó cho số lượng đầu vào và đầu ra. Xem man timeman getrusageđể được hướng dẫn thêm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.