מדידת ביצועים עם usr/bin/time/
-
@nigun אמר במדידת ביצועים עם usr/bin/time/:
מישהו יודע להסביר מה זה כל הפרמטרים שרואים כשמוסיפים time או usr/bin/time -v
לפני פקודה בshell ?בבאש,
time
הוא פקודה מובנית של ה-shell, לעמות /usr/bin/time
שהוא פקודה חיצוניתהפלט בברירת מחדל הוא:
real
= זמן שעבר מתחילת הרצה עד סוף ההרצה (מוכר גם כ: wall clock time, כלומר כמה זמן עבר על שעון הקיר)user
= זמן שהוקצה עבור התהליך (ותהליכי צאצא) ב-user mode.sys
= זמן שהוקצה עבור התהליך (ותהליכי צאצא) ב-kernel mode.
שני האחרונים מסמנים את הזמן המעבד היה עסוק בתהליך בפועל, זה לא כולל זמן שתהליכים אחרים היו מתוזמנים על המעבד או שהמעבד היה idle (מחכה ל-I/O וכדומה)
שני האחרונים הם סה"כ של כל הליבות ביחד. ז. א. שאם ליבה אחת עסקה בתהליך לפרק זמן של 17ms והשנייה לזמן של 45ms, יהיה כתוב 62ms. זה יכול לצאת לפי"ז ש-
user
יהיה יותר מ-real
או לפחות להפנות לדוקומנטציה מסודרת
https://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1
והאם זה אינדיקציה למהירות בזמן אמת?
לא הבנתי את השאלה, מדובר במהירות בזמן אמת. (אומנם זה לא אומר בכל הרצה יהיה אותו מהירות)
או usr/bin/time -v
man time
צריך שיעור ארוך בנושא מערכות הפעלה כדי להסביר כל דבר. איזה מהם מעניין אותך? (רובם לא מדברים ישירות על הזמן אלא על פרמטרים אחרים שיכולים להשפיע על זמן הריצה, כמו זכרון, I/O, וכו')
-
@nigun שתבין יותר-
העיקר שאתה מעוניין הוא שלוש האלהreal
,user
, ו-sys
- אם ה-
real
הוא יותר גדול מה-sys+user
בהרבה, זה מצביע על זה שהתהליך לא קיבלה הרבה זמן CPU. זה יכול להיות או משום שיש תהליכים אחרים פעילים (אז תריץtime
על המערכת בזמן שאין פעילות אחרת), או משום שאתה משתמש בקריאות I/O איטיות והתהליך מעביר הרבה זמן בהמתנה עבור I/O - אם ה-
user
הוא יותר גדול ממה שרצית/צפית צריך למטב את הקוד (או את הקריאות לספרייות חיצוניות) - אם ה-
sys
הוא יותר גדול ממה שרצית/צפית, צריך למטב את הקריאות לשירותי מערכת ההפעלה (system calls)
- אם ה-
-
@yossiz אמר במדידת ביצועים עם usr/bin/time/:
@nigun אמר במדידת ביצועים עם usr/bin/time/:
Percent of CPU this job got
אם הבנתי נכון זה פשוט
(user+sys)/(real*cpu_cores)
זאת אומרת שאם יש תהליך IO שלוקח הרבה זמן אז ה
Percent of CPU this job got
יותר נמוך -
@nigun האמת שלא מדוייק מה שכתבתי... זה לא פקודה בכלל - לא מובנית ולא חיצונית - אלא keyword...
נגיד שאתה מריץ
cat file | tr ' ' '\n' | sort | uniq
אם תרצה למדוד את הביצוע של כל השרשרת
אם זה לא היה מילת מפתח אלא פקודה (חיצונית או פנימית) לא היה אפשרי להוסיף מילתtime
בראש, כי זה לא היה מתייחס לכל השרשרת אלא לפקודה הראשונה.