Tại sao CPU dành thời gian cho IO (wa)?


18

Tôi biết wa(trong top) đo thời gian CPU chờ I / O. Nhiều bài báo nói rằng.

Nhưng tôi bối rối rằng, dựa trên 2 điểm kiến ​​thức:

  1. nếu một quy trình sử dụng lệnh gọi hệ thống để đọc đĩa, quy trình sẽ bị chặn.
  2. Nếu một quá trình bị chặn, nó không thể được lên lịch chạy trên CPU.

Đúng?

Dường như không có thời gian cho CPU chờ vào I / O ... Chuyện gì xảy ra?

Nếu giới thiệu một số sách hoặc bài viết để tôi đọc thêm, thì càng nhiều càng tốt.


Tôi bước vào và viết một câu trả lời thích hợp. Xin lỗi tôi đã không ở đó khi bạn cần tôi ;-)
Alec Teal

Câu trả lời:


22

Trạng thái không hoạt động của CPU được chia thành hai phần "phụ" khác nhau: iowaitidle.

Nếu CPU không hoạt động, thì nhân sẽ xác định xem có ít nhất một I / O hiện đang tiến hành với một đĩa cục bộ hay một đĩa được gắn từ xa (NFS) đã được khởi tạo từ CPU đó hay không. Nếu có, thì CPU ở trạng thái iowait. Nếu không có I / O trong tiến trình được khởi tạo từ CPU đó, CPU sẽ ở idletrạng thái.

Vì vậy, iowaitlà phần trăm thời gian CPU không hoạt động có ít nhất một I / O trong tiến trình được bắt đầu từ CPU đó.

Bộ iowaitđếm nói rằng hệ thống có thể xử lý công việc tính toán nhiều hơn. Chỉ vì CPU ở iowaittrạng thái không có nghĩa là nó không thể chạy các luồng hoặc tiến trình khác trên CPU đó.

Vì vậy, iowaitchỉ đơn giản là một hình thức của thời gian nhàn rỗi.


Điều này thực sự sai. Ngoài ra NFS - CPU thậm chí không có khái niệm về điều đó. Về cơ bản, đó là thời gian CPU dành để không thể làm gì khác vì nó đang xử lý một số công cụ IO cấp thấp - theo nghĩa là truy cập vào thứ gì đó được kết nối với nó KHÔNG xử lý I / O thường đọc tệp và không có gì. Ví dụ, trên Raspberry Pi không có bộ điều khiển DMA, vì vậy CPU không thể "hey Bo mạch chủ đọc cho tôi nhiều byte này bắt đầu từ thẻ này và đặt chúng vào ram bắt đầu từ đây", nó phải làm thủ công->
Alec Teal

vì vậy nó dành RẤT NHIỀU thời gian chờ đợi io như để hoàn thành một thẻ đọc. Bạn làm cho âm thanh giống như lỗi bộ nhớ cache có thể được đo bằng "io Wait" này (tất nhiên là không được tính), chờ đợi IO được định nghĩa như sau: Thời gian kernel đã sử dụng trong một thói quen I / O của thiết bị cấp thấp - ví dụ: RPi, theo nghĩa đen nó phải thực hiện thủ tục đọc từ thẻ và CPU (là một khối không có DMA) phải chờ dữ liệu trên bus IO. Với bộ điều khiển DMA, nó nói chuyện với bộ điều khiển và nói "hãy nói cho tôi biết khi nào bạn hoàn thành" - để nó làm những việc khác trong khi bộ điều khiển DMA thực hiện thiết bị IO
Alec Teal

Sử dụng dstat để xem IOwaiting BTW, iowait và thời gian dành cho việc thực hiện công cụ kernel thực sự không thể đo được trên mỗi quy trình. Giống như nói có hai quá trình "ghi" vào "tệp", quá trình đầu tiên hoàn thành nhanh chóng, FS chọn cách ghi bộ đệm vì bất kỳ lý do gì, quá trình thứ hai khiến bộ đệm bị xóa, không công bằng khi đếm thời gian lâu hơn để trả về từ viết đến quá trình gây ra viết. Tương tự với chờ I / O, đó là lý do tại sao chúng không được đo theo quy trình.
Alec Teal

4
@AlecTeal: Không, nó đúng và nhận xét của bạn là sai. iowait đếm thời gian bị chặn trên I / O, không phục vụ I / O. Nếu bạn không muốn xác nhận điều này bằng cách đọc nguồn kernel, hãy thử một thử nghiệm: gắn hệ thống tệp mạng, bắt đầu đọc tệp và sau đó tường lửa khỏi máy từ xa. Thời gian iowait vẫn sẽ cao mặc dù bộ xử lý hoàn toàn không hoạt động.
David

1
Tôi đã làm một bài kiểm tra về câu trả lời này. dd if=/dev/sda of=/dev/nullđể thực hiện một cao wa. Sau đó chạy mã while-true, wathay vì us. Cảm ơn sự hỗn loạn.
HUA Di

-2

Tôi không chắc chắn 100% tôi hiểu câu hỏi, nhưng có một số ý tưởng.

Có một câu hỏi khác ở đây đã hỏi điều này, và có một số câu trả lời hay: Có ai có thể giải thích chính xác IOWait là gì không?

Có một bài viết hay ở đây: http://veithen.github.io/2013/11/18/iowait-linux.html


7
Mike, ưu tiên câu trả lời bao gồm nội dung, không chỉ liên kết đến nội dung. Bằng cách cung cấp nội dung tại đây, bạn đảm bảo rằng câu trả lời của bạn vẫn có giá trị khi các liên kết đó biến mất.
EEAA

1
@EEAA thì câu trả lời cần được chỉnh sửa, không bị hạ cấp ba lần? Hoặc nó có thể được chuyển vào một bình luận. Nó vẫn chứa thông tin hữu ích. Downvotes có nghĩa là loại thông tin đó là vô dụng, cũng bằng cách làm cho nó gần như vô hình? Tôi không nói rằng bạn đã downvote, tôi chỉ tự hỏi về cách tiếp cận mọi người ở đây.
Roland Pihlakas

3
@RolandPihlakas Đó là vấn đề về động lực. Downvote + bình luận trong tình huống này tạo động lực cho người dùng sửa câu trả lời của họ. Tôi sẽ vui lòng xóa dv của tôi sau khi câu trả lời được sửa. Chỉnh sửa những thứ này là phản tác dụng, vì nó cho phép hành vi xấu. Chúng tôi đã có một vài người dùng trong những năm qua chỉ đăng các câu trả lời chỉ liên kết, mặc dù được yêu cầu không làm như vậy. Nếu người dùng không thể cố gắng bỏ chút công sức vào câu trả lời của họ, tôi sẽ không giúp họ bằng cách sửa chữa công việc của họ.
EEAA

@EEAA Cảm ơn câu trả lời công phu. Cách tiếp cận của bạn có thể hiểu được và thông qua ý kiến ​​của bạn Bạn cũng cung cấp những động tác thúc đẩy cho tác giả của câu trả lời. Ngược lại, tôi sợ downvote im lặng hầu như không cung cấp bất kỳ động lực thực tế nào vì chúng tối nghĩa. Nhưng tôi có một chút thiếu chính xác - tôi đã tự hỏi chủ yếu là tại sao câu trả lời bị hạ thấp quá nhiều đến nỗi nó bị mờ đi? Nhận xét của bạn với một hoặc hai downvote nên có đủ?
Roland Pihlakas

2
@RolandPihlakas Mọi người nghĩ rằng câu trả lời không hữu ích, vì vậy họ đã từ chối. Họ hạ cấp vì đó là thứ ba. Họ đã từ chối vì hôm nay tuyết rơi ở thành phố Minneapolis (thực sự là vậy và không nên đến cuối mùa xuân). Ai biết.
EEAA
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.