Tôi đã xem xét iowait
tài sản được hiển thị trong đầu ra tiện ích hàng đầu như dưới đây.
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
iowait
thường được định nghĩa như sau:
"Đó là thời gian mà CPU không hoạt động và có một số IO đang chờ xử lý."
Theo hiểu biết của tôi rằng một quá trình được chạy trên một CPU. Sau khi nó được hủy theo lịch trình vì nó đã sử dụng hết khe thời gian hoặc sau khi bị chặn, cuối cùng nó có thể được lên lịch lại trên bất kỳ một CPU nào.
Trong trường hợp yêu cầu IO, CPU đặt quá trình trong chế độ ngủ không bị gián đoạn có trách nhiệm theo dõi iowait
thời gian. Các CPU khác sẽ báo cáo cùng lúc với thời gian nhàn rỗi ở cuối vì chúng thực sự không hoạt động. Giả định này có đúng không?
Hơn nữa, giả sử có một yêu cầu IO dài (có nghĩa là quá trình này có một số cơ hội để được lên lịch nhưng không được lên lịch vì IO chưa hoàn thành), làm thế nào để CPU biết có "IO đang chờ xử lý"? Loại thông tin đó được lấy từ đâu? Làm thế nào CPU có thể đơn giản phát hiện ra rằng một số quá trình đã được đưa vào trạng thái ngủ một thời gian để IO hoàn thành vì bất kỳ CPU nào cũng có thể khiến quá trình đó ngủ. Tình trạng "IO đang chờ xử lý" được xác nhận như thế nào?