it-swarm-vi.tech

Bất cứ ai có thể giải thích chính xác IOWait là gì?

Nhiều như tôi đã đọc về iowait, nó vẫn còn là bí ẩn đối với tôi.

Tôi biết rằng đó là thời gian mà CPU chờ đợi cho một hoạt động IO hoàn thành, nhưng loại IO hoạt động chính xác là gì? Tôi cũng không chắc chắn, Tại sao nó lại quan trọng đến vậy? CPU không thể làm gì khác trong khi thao tác IO hoàn thành và sau đó quay lại xử lý dữ liệu?

Ngoài ra các công cụ phù hợp để chẩn đoán quá trình (es) đã làm chính xác chờ đợi IO.

Và các cách để giảm thiểu IO thời gian chờ là gì?

207
Peter Krumins

Tôi biết đó là thời gian mà CPU chờ đợi cho một hoạt động IO hoàn thành, nhưng loại IO hoạt động chính xác là gì? Tôi cũng không chắc chắn, Tại sao nó lại quan trọng đến vậy? CPU không thể làm gì khác trong khi thao tác IO hoàn thành và sau đó quay lại xử lý dữ liệu?

Có, hệ điều hành sẽ lên lịch các tiến trình khác để chạy trong khi một quá trình bị chặn trên IO. Tuy nhiên, bên trong quá trình đó, trừ khi nó sử dụng IO không đồng bộ, nó sẽ không tiến triển cho đến khi mọi thứ IO hoạt động hoàn tất.

Ngoài ra các công cụ phù hợp để chẩn đoán quá trình (es) đã làm chính xác chờ đợi IO.

Một số công cụ bạn có thể thấy hữu ích

  • iostat, để theo dõi thời gian phục vụ của các đĩa của bạn
  • iotop (nếu kernel của bạn hỗ trợ nó), để theo dõi sự cố của IO yêu cầu cho mỗi quy trình
  • strace, để xem xét các hoạt động thực tế do một quy trình ban hành

Và các cách để giảm thiểu IO thời gian chờ là gì?

  • đảm bảo bạn có bộ nhớ vật lý miễn phí để HĐH có thể lưu trữ các khối đĩa trong bộ nhớ
  • giữ mức sử dụng đĩa hệ thống tập tin của bạn dưới 80% để tránh phân mảnh quá mức
  • điều chỉnh hệ thống tập tin của bạn
  • sử dụng bộ điều khiển mảng được hỗ trợ bằng pin
  • chọn kích thước bộ đệm tốt khi thực hiện các thao tác io
103
Dave Cheney

Câu hỏi cũ, gần đây bị trả lời, nhưng cảm thấy câu trả lời hiện tại là không đủ.

Định nghĩa và tính chất của IOWait

IOWait (thường được dán nhãn %wa ở trên cùng) là một danh mục con của không hoạt động (%idle thường được biểu thị là tất cả không hoạt động trừ các danh mục con được xác định), có nghĩa là CPU không làm gì cả. Do đó, miễn là có một quy trình khác mà CPU có thể xử lý, nó sẽ làm như vậy. Ngoài ra, nhàn rỗi, người dùng, hệ thống, iowait, vv là một phép đo liên quan đến CPU. Nói cách khác, bạn có thể nghĩ về iowait là sự nhàn rỗi do chờ đợi io.

Chính xác, iowait là thời gian dành cho việc nhận và xử lý các ngắt phần cứng dưới dạng phần trăm của bộ xử lý. Các ngắt phần mềm thường được thử nghiệm riêng biệt như %si.

Tầm quan trọng & quan niệm sai lầm tiềm năng

IOWait rất quan trọng vì nó thường là một số liệu chính để biết bạn có bị tắc nghẽn trên IO hay không. Nhưng sự vắng mặt của iowait không có nghĩa là ứng dụng của bạn là không bị tắc nghẽn trên IO. Hãy xem xét hai ứng dụng đang chạy trên một hệ thống. Nếu chương trình 1 bị tắc nghẽn nặng nề và chương trình 2 là người dùng CPU nặng, thì %user + %system của CPU có thể vẫn giống như ~ 100% và tương ứng, iowait sẽ hiển thị 0. Nhưng đó chỉ là do chương trình 2 chuyên sâu và dường như không nói gì về chương trình 1 vì tất cả điều này là từ quan điểm của CPU.

Công cụ phát hiện IOWait

Xem bài viết của Dave Cheney và Xerxes

Nhưng cũng đơn giản top sẽ hiển thị trong %wa.

Giảm IOWait

Ngoài ra, như chúng ta sắp bước vào năm 2013, ngoài những gì người khác nói, tùy chọn đơn giản là awesome IO thiết bị lưu trữ có giá cả phải chăng, cụ thể là SSD. SSD rất tuyệt vời !!!

48
Grumpy

iowait

iowait là thời gian mà bộ xử lý/bộ xử lý đang chờ (tức là ở trạng thái nhàn rỗi và hiện không có gì ), trong đó trên thực tế các yêu cầu I/O đĩa nổi bật.

Điều này thường có nghĩa là các thiết bị khối (tức là đĩa vật lý, không phải bộ nhớ) quá chậm hoặc đơn giản là bão hòa.

Do đó, bạn nên lưu ý rằng nếu bạn thấy mức trung bình tải cao trên hệ thống của mình và trên thông báo kiểm tra rằng hầu hết điều này thực sự là do chờ đợi I/O, điều đó không nhất thiết có nghĩa là hệ thống của bạn gặp sự cố - và điều này xảy ra khi bạn máy đơn giản là không có gì để làm, ngoài các quy trình ràng buộc I/O (tức là các quy trình thực hiện nhiều I/O hơn bất kỳ điều gì khác (các cuộc gọi hệ thống không liên kết I/O)). Điều đó cũng rõ ràng từ thực tế là bất cứ điều gì bạn làm trên hệ thống vẫn rất nhạy.

công cụ

  • sar (từ gói sysstat, có sẵn trên hầu hết các máy * nix)
  • iostat
  • sarface (mặt trước thành sar)
36
Xerxes

Tôi thấy lời giải thích và ví dụ từ liên kết này rất hữu ích: Chính xác thì "iowait" là gì? . BTW, để hoàn thiện, I/O ở đây đề cập đến I/O của đĩa, nhưng cũng có thể bao gồm I/O trên một đĩa được gắn mạng (như nfs), như được giải thích trong bài đăng khác này =.

Tôi sẽ trích dẫn một vài phần quan trọng (trong trường hợp liên kết bị chết), một số trong đó sẽ là sự lặp lại của những gì người khác đã nói, nhưng với tôi ít nhất những điều này đã rõ ràng hơn:

Để tóm tắt nó trong một câu, 'iowait' là phần trăm thời gian CPU không hoạt động VÀ có ít nhất một I/O đang diễn ra.

Mỗi CPU có thể ở một trong bốn trạng thái: user, sys, idle, iowait.

Tôi đã tự hỏi điều gì xảy ra khi hệ thống có các quy trình khác sẵn sàng để chạy trong khi một quy trình đang chờ I/O. Dưới đây giải thích nó:

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ì bộ đếm 'iowait' được tăng thêm một. Nếu không có I/O trong tiến trình được khởi tạo từ CPU đó, bộ đếm 'nhàn rỗi' được tăng thêm một.

Và đây là một ví dụ:

Hãy nói rằng có hai chương trình chạy trên CPU. Một là chương trình 'dd' đọc từ đĩa. Chương trình kia là một chương trình không có I/O nhưng đang dành 100% thời gian để làm công việc tính toán. Bây giờ giả sử rằng có một vấn đề với hệ thống con I/O và rằng I/O vật lý đang chiếm một giây để hoàn thành. Bất cứ khi nào chương trình 'dd' ngủ trong khi chờ I/O hoàn thành, chương trình kia có thể chạy trên CPU đó. Khi ngắt đồng hồ xảy ra, sẽ luôn có một chương trình chạy ở chế độ người dùng hoặc chế độ hệ thống. Do đó, giá trị% idle và% iowait sẽ là 0. Mặc dù hiện tại iowait là 0, nhưng điều đó không có nghĩa là KHÔNG có vấn đề I/O vì rõ ràng có một vấn đề nếu I/O vật lý đang chiếm lấy một giây để hoàn thành.

Toàn văn là đáng đọc. Đây là một gương của trang này , trong trường hợp nó bị hỏng.

34
haridsv

Đối với Solaris, tôi sử dụng DTrace để xem các quy trình đang làm gì nếu tôi cần xem các hoạt động I/O đang chạy. Đối với Linux, có một chương trình tương tự có tên systemtap cung cấp mức độ tiếp xúc tương tự với kernel và xử lý các cuộc gọi.

Một ví dụ tôi đã sử dụng khi học DTrace là so sánh lệnh cp với lệnh dd. Bạn có thể thấy rằng dd không đọc nhiều hơn cho ghi, trong khi cp thì không, chủ yếu là do kích thước bộ đệm dd sử dụng theo mặc định (nếu tôi nhớ chính xác).

1
Milner

Loại hoạt động IO sẽ phụ thuộc vào ứng dụng và thiết lập của bạn.

Điều quan trọng là trong một số trường hợp, CPU không thể nhận được dữ liệu hoặc hướng dẫn mà nó cần tiếp tục. Trong một số trường hợp, nó có thể tiếp tục, nhưng nó sẽ phụ thuộc vào ứng dụng nào đang chạy như những gì nó có thể làm. Nếu bạn có một ứng dụng luồng đơn có nhiều quyền truy cập đĩa thì bạn sẽ phải chờ.

Để giảm thiểu thời gian IO, hãy mua bộ nhớ nhiều hơn và nhanh hơn, lấy đĩa nhanh hơn, chống phân mảnh các đĩa bạn có.

Nếu đó là một ứng dụng nội bộ, đó là nút cổ chai xem liệu nó có thể được tối ưu hóa để đọc trong các khối lớn hơn hay để làm IO không đồng bộ.

0
Jeremy French

sử dụng ps phụ có thể in quá trình STAT
[.__.] nếu stat là D hoặc Ds, quá trình này ở chế độ ngủ không bị gián đoạn (thường là IO)
[.___.]

vmstat cũng cho thấy có bao nhiêu khối quy trình
[.__.] r: Số lượng tiến trình đang chờ thời gian chạy.
[.___.] b: Số lượng quá trình trong giấc ngủ không bị gián đoạn.

http://bencane.com/2012/08/06/troubledhoot-high-io-wait-in-linux/

0
Singo