2016-10-18 14 views
5

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?

+0

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? –

+2

... 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

+0

@ 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

Trả lời

3

Theo https://unix.stackexchange.com/questions/55212/how-can-i-monitor-disk-io giải pháp hữu dụng nhất bao gồm sysstat công cụ hoặc iostat (cùng một gói). Tuy nhiên, nghiêm túc, vì bạn có quyền sudo trên máy chủ lưu trữ, bạn có thể tự kiểm tra xem liệu có bất kỳ nhiệm vụ chuyên sâu nào của IO đang diễn ra bằng bất kỳ công cụ giám sát hệ thống phổ biến nào hay không. Bạn không thể tiêu diệt tất cả IO một cách hiệu quả mà không có phép đo của bạn cũng đi hạt. Trong một thời gian dài, các phép đo sẽ cho bạn kết quả hợp lý, vì các độ lệch hội tụ theo tiếng ồn nền ổn định.

Bên cạnh đó bạn cần đo lường nhân tạo để làm gì? Nếu bạn chỉ muốn thử nghiệm các khả năng phần cứng mà không có bất kỳ ngữ cảnh RL nào, thì không gắn kết đĩa và kiểm tra nó ở chế độ nhị phân. Đo lường trong khi lưu lượng truy cập thực đang diễn ra thường cho bạn kết quả gần với những gì bạn thực sự có thể mong đợi ở thời gian tải.

+0

Cảm ơn bạn đã trả lời. Sau khi thực hiện một vài bài kiểm tra với 'sar' và' iostats' tôi không nghĩ rằng đây là những gì tôi đang tìm kiếm. Hoặc ít nhất nó không tốt hơn 'hdparm', bởi vì' hdparm' cho đầu ra giá trị mà tôi sẽ phải tính toán từ đầu ra của 'sar' hoặc' iostats'. Ý tôi là MB/giây là giá trị đúng. Nhưng tôi muốn nó càng không thiên vị càng tốt. Phép đo nhân tạo là cần thiết bởi vì tôi cần phải có một cơ sở "lý thuyết" để tính toán thêm. – RichArt

Các vấn đề liên quan