שאלה האם מישהו יכול להסביר בדיוק מה Iowait הוא?


עד כמה שקראתי על זה, זה עדיין מסתורי.

אני יודע שזה הזמן המושקע על ידי המעבד מחכה פעולות IO כדי להשלים, אבל איזה סוג של פעולות IO דווקא? מה אני גם לא בטוח, למה זה כל כך חשוב? האם ה- CPU לא יכול לעשות משהו אחר בזמן שהפעולה IO משלימה, ואז לחזור לעיבוד נתונים?

גם מה הם הכלים הנכונים לאבחן מה תהליך (עשה) בדיוק לחכות IO.

ומה הן הדרכים למזער IO לחכות זמן?


171
2018-05-27 09:52




וגם, מה זה גבוה? - Muhamed Huseinbašić


תשובות:


אני יודע שזה הזמן המושקע על ידי המעבד   מחכה פעולות IO ל   שלם, אבל איזה סוג של IO   פעולות בדיוק? גם אני   לא בטוח, למה זה כל כך חשוב?   האם ה- CPU אינו יכול לעשות משהו אחר   בעוד המבצע IO משלים, ו   ואז לחזור עיבוד נתונים?

כן, מערכת ההפעלה תזמן תהליכים אחרים לפעול כאשר אחד חסום ב- IO. אולם בתוך התהליך, אלא אם כן הוא משתמש IO אסינכרוני, זה לא יהיה התקדמות עד מה IO מבצע שלם.

גם מה הם הכלים הנכונים   לאבחן מה התהליך עשה בדיוק   לחכות IO.

כמה כלים אתה עשוי למצוא שימושי

  • iostat, כדי לפקח על זמני השירות של הדיסקים שלך
  • iotop (אם הקרנל שלך תומך בו), כדי לפקח על פירוט של בקשות IO לכל תהליך
  • strace, להסתכל על פעולות בפועל שהונפקו על ידי תהליך

ומה הן הדרכים למזער IO   זמן המתנה?

  • ודא שיש לך זיכרון פיזי חינם אז מערכת ההפעלה יכולה מטמון קוביות הדיסק בזיכרון
  • לשמור על השימוש בדיסק מערכת הקבצים שלך מתחת 80%, כדי למנוע פיצול מוגזם
  • לכוונן את מערכת הקבצים
  • השתמש בבקר מערך מגובה בסוללה
  • לבחור גודל טוב מאגר בעת ביצוע פעולות io

90
2018-05-27 10:28



אל תשכח "ודא אחסון backend שלך הוא מהיר מספיק כדי לשמור על קשר עם עומס I / O שלך." - jgoldschrafe
@Dave צ 'ייני, וכאשר התהליך שלי הוא בטל כי הוא מחכה על IO. אז מה ההבדל בין IOWait לבין סרק? - ctrl-alt-delor
כאשר ב IOwait, התהליך הוא "שינה ללא הפסקה" כלומר זה לא ניתן להרוג, כדי למנוע את הסיכונים של נתונים משחיתים על הדיסקים. תהליך סרק רגיל הוא באמת עושה כלום, אז יש פחות סיכונים להרוג את זה. - mveroone
על גבי זה בעצם אומר IO שלך הוא איטי מדי. "הפוך את השרת מהר יותר" שונה אם אתה CPU מוגבל או מעבד שלך הוא רעב כי מישהו החליט את הדיסק המחברת איטי מספיק כדי להפעיל שרת מסד הנתונים ואת העומס IO עושה מעבד רק להשתמש 2% מה זה יכול, מחכה כמו מטורף עבור IO לסיים. - TomTom
OMG אני לא מאמין את התשובות 3 העליון כאן הם כל כך שגוי. התשובה להלן על ידי haridsv נכונה. לא CPU הוא "מחכה" כדי io כדי להשלים. כן, כמה io יכול להיות חוסם - לעתים קרובות יש סיבה טובה לכך, ובנסיבות מסוימות כל io יכול להיות חוסם. אבל אתה יכול גם לראות iowait מתרחשת עבור פעולות אסינכרוני לחלוטין. - symcbean


שאלה ישנה, ​​לאחרונה נתקל, אבל הרגשתי את התשובות הקיימות לא מספיק.

הגדרת IOWait & נכסים

IOWait (מסומן בדרך כלל %wa בחלק העליון) היא תת קטגוריה של סרק (%idle הוא מתבטא בדרך כלל כמו כל סרק למעט קטגוריות משנה מוגדרים), כלומר המעבד הוא לא עושה שום דבר. לכן, כל עוד יש תהליך נוסף שהמעבד יכול לעבד, הוא יעשה זאת. בנוסף, סרק, המשתמש, המערכת, iowait, וכו 'הם מדידה ביחס ל- CPU. במילים אחרות, אתה יכול לחשוב על iowait כמו בטלה נגרמת על ידי מחכה io.

בדיוק, iowait הוא הזמן בילה קבלת וטיפול interrupts חומרה כאחוז מעבד קרציות. הפרעות תוכנה בדרך כלל הן נפרדות בנפרד %si.

חשיבות & פוטנציאל misconception

IOWait חשוב כי זה לעתים קרובות הוא מדד המפתח כדי לדעת אם אתה צוואר בקבוק ב- IO. אבל היעדרות של יאוויט לא בהכרח אומר את הבקשה שלך לא צווארי בקבוק על IO. שקול שתי אפליקציות שפועלות במערכת. אם תוכנית 1 היא בכבדות io צוואר בקבוק ותוכנית 2 הוא משתמש CPU כבד, %user + %system של מעבד עדיין יכול להיות משהו כמו ~ 100% ו בהתאמה, iowait יראה 0. אבל זה רק בגלל תוכנית 2 הוא אינטנסיבי יחסית נראה לא אומר דבר על תוכנית 1 כי כל זה מנקודת מבט של המעבד.

כלים כדי לזהות IOWait

ראה הודעות על ידי דייב צ'ייני ו Xerxes

אבל גם פשוט top יראה ב %wa.

צמצום Iowait

כמו כן, כפי שאנו עכשיו כמעט נכנס 2013, בנוסף למה שאחרים אמרו, את האפשרות של פשוט מדהים IO התקני אחסון הם סבירים, כלומר SSD. SSDs הם מדהים!


44
2017-12-25 12:45





iowait

iowait הוא הזמן שהמעבד / המעבדים ממתינים (כלומר, במצב סרק ועושה שום דבר), שבמהלכם יש למעשה היה דיסקים מצטיינים I / O בקשות.

זה בדרך כלל אומר כי התקני בלוק (כלומר דיסקים פיזיים, לא זיכרון) הוא איטי מדי, או פשוט רווי.

אתה צריך לשים לב שאם אתה רואה ממוצע עומס גבוה על המערכת שלך, ועל הבדיקה הודעה כי רוב זה הוא למעשה בשל I / O לחכות, זה לא בהכרח אומר כי המערכת שלך בצרות - וזה קורה כאשר המכונה פשוט אין מה לעשות, חוץ מאשר אני / O- קשורה תהליכים (כלומר תהליכים שעושים יותר I / O מכל דבר אחר (שאינם I / O- קשרו שיחות המערכת)). זה צריך להיות ברור גם מן העובדה כי כל דבר שאתה עושה על המערכת עדיין מאוד קשוב.

כלים

  • sar (מ ה sysstat החבילה, זמין על רוב * מכונות nix)
  • iostat
  • sarface (חזית אל sar)

34
2018-05-27 10:32



שים לב שבדיוק, הגדרה זו של זמן ההמתנה I / O תקפה רק במערכות של מעבד יחיד. זה צריך להיות קצת מעודן עבור מערכות מרובות המעבדים: veithen.blogspot.be/2013/11/iowait-linux.html - Andreas Veithen
באיזו מידה iowait משפיע Load Average? תגיד, 100 הנושאים מחכה לרשת, יהיה LA 100? - Ivan Balashov


מצאתי את ההסבר ודוגמאות מקישור זה מאוד שימושי: מה בדיוק הוא "iowait"?. BTW, לשם שלמות, I / O כאן מתייחס דיסק I / O, אבל יכול גם לכלול I / O על דיסק רכוב רשת (כגון nfs), כפי שמוסבר ב פוסט זה.

אני מצטט כמה קטעים חשובים (במקרה שהקישור מת), כמה מהם יהיו חזרות על מה שאחרים כבר אמרו, אבל לי לפחות אלה היו ברורים יותר:

כדי לסכם אותו במשפט אחד, 'iowait' הוא אחוז הזמן   CPU הוא סרק ויש לפחות אחד אני / O בתהליך.

כל מעבד יכול להיות באחת מארבע מדינות: משתמש, sys, סרק, iowait.

תהיתי מה קורה כאשר המערכת יש תהליכים אחרים מוכנים לפעול בזמן תהליך אחד מחכה I / O. להלן מסביר את זה:

אם ה- CPU אינו פעיל, הליבה קובעת אם יש לפחות   אחד אני / O כרגע בתהליך לדיסק מקומי או מרחוק   דיסק קשיח (NFS) אשר בוצע מתוך CPU זה. אם שם   הוא, אז הדלפק 'iowait' הוא גדל על ידי אחד. אם אין   I / O בתהליך כי יזמה מן המעבד, הדלפק "סרק"   הוא גדל על ידי אחד.

והנה דוגמה:

נניח שיש שתי תוכניות שפועלות במעבד. אחד הוא 'dd'   תוכנית קריאה מהדיסק. השני הוא תוכנית שאינה עושה אני / O   אבל היא מבלה 100% מהזמן שלה עושה עבודה חישובית. עכשיו נניח   כי יש בעיה עם I / O המשנה כי זה I / פיזית פיזית   הם לוקחים על השני כדי להשלים. בכל פעם תוכנית 'dd' הוא   ישנה בזמן ההמתנה שלה I / O כדי להשלים, התוכנית השנייה היא   מסוגל לרוץ על מעבד זה. כאשר מפסיק את השעון מתרחשת, יהיה   תמיד להיות תוכנית פועל במצב המשתמש או במצב המערכת.   לכן, ערכי% idle ו-% iowait יהיו 0. למרות iowait   הוא 0 עכשיו, זה לא אומר שאין בעיה I / O כי שם   ברור הוא אחד אם פיזית אני / OS הם לוקחים מעל השני   להשלים.

הטקסט המלא שווה קריאה. הנה א המראה של דף זה, למקרה שזה יירד.


27
2018-05-27 12:34





עבור Solaris, אני משתמש ב- DTrace כדי לבדוק מה התהליכים עושים אם אני צריך לראות מה פעולות I / O פועלות. עבור לינוקס, יש תוכנית דומה בשם מערכת אשר מספק רמה דומה של חשיפה הקרינה ואת הקריאות התהליך.

דוגמה אחת השתמשתי כאשר הלמידה DTrace היה להשוות cp הפקודה a dd פקודה. אתה יכול לראות את זה dd עושה הרבה יותר קריאה עבור לכתוב, בעוד cp לא, בעיקר בגלל גודל החוצץ dd משתמש כברירת מחדל (אם אני זוכר נכון).


1
2018-05-27 10:01





איזה סוג של פעולות IO יהיה תלוי ביישומים שלך ההתקנה.

חשוב כי במקרים מסוימים המעבד לא יכול לקבל את הנתונים או ההוראות שהוא צריך להמשיך. במקרים מסוימים זה יכול להמשיך, אבל זה יהיה תלוי במה יישומים פועלים כמו מה זה יכול לעשות. אם יש לך יישום אחד מושחל אשר עושה הרבה גישה לדיסק אז תצטרך לחכות.

כדי למזער את הזמן IO, לקנות זיכרון יותר ויותר מהר, לקבל דיסקים מהירים יותר, defrag את הדיסקים שיש לך.

אם הוא יישום הבית שבו צוואר הבקבוק לראות אם זה יכול להיות מותאם לקרוא בלוקים גדולים או לעשות IO באופן סינכרוני.


0
2018-01-01 15:50



בסדר, אז אני כל הזמן הוא בילה חוסם IO המבצע? - Peter Krumins
אז לדוגמה, אם אני עושה לבחור () או סקר () והוא חוסם, ואז הזמן מחכה עד מתאר יהיה זמין יהווה זמן iowait? - Peter Krumins
אני חושב שזה היה שייך על כך שזה נראה כמו שאלה תכנות. - Jeremy French
פטריס - כן, זו דרך טובה לחשוב על זה. - user2278


באמצעות. יכול להדפיס תהליך
אם סטאט הוא D או Ds, התהליך הוא בשינה ללא הפרעה (בדרך כלל IO)
כאשר תהליך נכנס לשינה ללא הפרעה, nr_iowait של runqueue נוסף, ואם nr_iowait> 0, זמן המתנה של המעבד נספר iowait

vmstat גם מראה כמה בלוקים התהליך
r: מספר התהליכים מחכים לזמן ריצה.
ב: מספר התהליכים בשינה בלתי פוסקת.

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


0