Trong chương trình Python, tôi cần có tốc độ đọc/ghi tích lũy của tất cả các đĩa trên máy chủ. Tôi đã làm việc đó với subprocess.check_output()
để gọi lệnh shell Linux sau:Làm thế nào để có được tốc độ đọc/ghi đĩa bằng Python?
$ sudo hdparm -t /dev/sda
này cho kết quả là:
/dev/sda:
Timing buffered disk reads: 1488 MB in 3.00 seconds = 495.55 MB/sec
sau đó tôi có thể phân tích 495,55. OK, cho đến nay rất tốt.
Nhưng trên trang người đàn ông của hdparm
tôi tìm thấy lời giải thích này cho cờ -t
rằng về cơ bản nói rằng khi thực hiện phép đo không có quá trình khác nên đọc/ghi vào đĩa cùng lúc:
Thực hiện timings của thiết bị đọc cho mục tiêu chuẩn và so sánh. Để có kết quả có ý nghĩa, thao tác này nên được lặp lại 2-3 lần trên một hệ thống không hoạt động khác (không có các quá trình hoạt động khác) với ít nhất một vài megabyte bộ nhớ trống. Điều này sẽ hiển thị tốc độ đọc thông qua bộ nhớ cache đệm vào đĩa mà không có bất kỳ bộ nhớ đệm trước nào của dữ liệu. Đo lường này là một dấu hiệu cho thấy tốc độ của ổ đĩa có thể duy trì dữ liệu tuần tự đọc dưới Linux, mà không cần bất kỳ chi phí hệ thống tập tin nào. Để đảm bảo các phép đo chính xác, bộ đệm đệm được xả trong quá trình xử lý -t bằng cách sử dụng BLKFLSBUF ioctl.
Câu hỏi đặt ra là:
Làm thế nào tôi có thể đảm bảo rằng không có quá trình khác là truy cập vào đĩa cùng một lúc khi đo được thực hiện?
Có sử dụng min/median/avg của một số lần chạy 'hdparm' một tùy chọn không? –
... bạn không thể? Nếu người dùng đang chạy các quy trình khác, bạn không thể chỉ giết chúng. Ngoài ra: mọi hệ điều hành có * luôn luôn * một số quy trình deamon định kỳ làm điều gì đó, mặc dù điều này có thể không yêu cầu truy cập đĩa ... – Bakuriu
@ M.T: đường nối này là một lựa chọn tốt. Tôi nghĩ về nó, nhưng tôi đã hy vọng một cách khác để có được giá trị. – RichArt