סינון תרשים הלהבות
בעזרת Cloud Profiler אפשר להוסיף מסננים כדי לקבוע איך יוצג המידע בפרופילים שנבחרו. לדוגמה, אפשר להוסיף מסנן כדי להסתיר פריימים או מחסניות מסוימות של קריאות לפונקציות. הוספה והסרה של מסננים לא משנות את קבוצת הפרופילים שנבחרו.
כל מסנן מצוין על ידי FILTER-OPTION מוגדר מראש שמשויך לVALUE שהוגדר על ידי המשתמש:
[FILTER-OPTION] : [VALUE]
כל מסנן שמוסיפים מוצג בסרגל המסננים.
בדוגמה הזו יש מסנן אחד שמציג את Metric : Bytes:
כלי הפרופיל יוצר באופן אוטומטי מסנן עם FILTER-OPTION של Metric ועם VALUE על סמך סוג הפרופיל שבחרתם.
אפשר לשנות את VALUE בחלק מסוגי הפרופילים. אי אפשר להסיר את המסנן הזה.
כדי להוסיף מסנן, אפשר להשתמש באחת מהשיטות הבאות:
- לוחצים על מסננים filter_list, בוחרים באפשרות מהרשימה ומזינים את הערך.
- לוחצים על הטקסט האפור הוספת מסנן נתוני פרופיל בסרגל המסננים, ואז מזינים את אפשרות הסינון והערך.
- באפשרויות הסינון Focus, Show from frame ו-Show stacks, אפשר גם להציב את מצביע העכבר על המסגרת ואז לבחור את האפשרות מתיבת הטיפ של המסגרת.
כדי להסיר מסנן, לוחצים על סגירה close במסנן.
במהלך הכנת הנתונים להצגה, הכלי Profiler מחפש התאמות בין פריים לבין מסנן.
כשיש התאמה, הכלי Profiler משתמש ב-FILTER-OPTION כדי לקבוע איזו פעולה לבצע. פריים תואם למסנן אם שם הפונקציה של הפריים או שם הקובץ של המקור של הפונקציה מכילים את VALUE.
מתבצעת השוואה תלוית אותיות רישיות.
לדוגמה, אם המסנן הוא Hide frames : oo, אז פריימים עם פונקציות בשמות foo, foo1 ו-busyloop מוסתרים בתרשים הלהבות.
מדד
כדי להגדיר את מצב הצבירה של סוג הפרופיל, משתמשים במסנן מדד. לדוגמה, אם בוחרים בסוג הפרופיל Heap, אפשר לבחור בין הצגת הנתונים במונחים של Bytes ושל Objects.
האפשרויות שזמינות במסנן מדד תלויות בשפת התכנות ובסוג הפרופיל שנבחר:
- בפרופילים של זמן מעבד, האפשרות היחידה היא זמן מעבד.
בפרופילים של Heap, האפשרויות הן:
- בייטים
- אובייקטים
בפרופילים של Allocated Heap, האפשרויות הן:
- סך הבייטים שהוקצו
- Total alloc objects
בפרופילים של זמן בפועל, האפשרויות הן:
- מספר יחידות
- זמן בפועל
בפרופילים של Threads, האפשרות היחידה היא Goroutine.
בפרופילים של תחרות על רוחב פס, האפשרויות הן:
- עיכוב
- טענות
מידע נוסף על סוגי מדדים של פרופילים זמין במאמר מושגים שקשורים ליצירת פרופילים.
לדוגמה, בצילום המסך הבא מוצג צריכת המעבד של תוכנית:
כאן אפשר לראות שהשגרה busyloop routine calls foo1 והשגרה foo2, ששתיהן קוראות לשגרות אחרות. אפשר להוסיף מסננים כדי לצמצם את הנתונים שמוצגים בתרשים רק לנתונים שמעניינים אתכם.
מצב ריכוז
כשמשתמשים במסנן Focus, בוחרים פונקציה אחת, ובתרשים הלהבות מוצגים נתיבי הקוד שמובילים אל הפונקציה הספציפית הזו וממנה.
לפרטים על אופן המיקוד בתרשים ופירוש התוצאות, אפשר לעיין במאמר בנושא מיקוד בתרשים הלהבות.
הצגת מקבצים
כדי להציג את כל ערימות הקריאות שמכילות מסגרת שתואמת לערך המסנן ולהסתיר את כל שאר ערימות הקריאות, משתמשים במסנן הצגת ערימות. בתרשים מוצגים המתקשרים והנמענים של הפונקציה, כלומר כל מה שקורא לפונקציה התואמת וכל מה שהיא קוראת לו.
המסנן הזה מבצע בדיקה של מחרוזת משנה שתלויה באותיות רישיות. התאמה מתרחשת אם פונקציית המסגרת מכילה את ערך המסנן.
כדי להגביל את תרשים השימוש במעבד מהדוגמה הקודמת כך שיוצגו בו רק מחסניות הקריאות שכוללות את הפונקציה foo1, מגדירים מסנן Show stacks עבור foo1:
הסתרת ערימות
הסתרת כל מחסניות הקריאות שמכילות פריים שתואם לערך המסנן. המסנן הזה שימושי בדרך כלל כשרוצים להסתיר ערימות לא מעניינות. לדוגמה, באפליקציות Java, נהוג להוסיף Hide stacks: unsafe.parkפילטר.
המסנן הזה מבצע בדיקה של מחרוזת משנה שתלויה באותיות רישיות. התאמה מתרחשת אם פונקציית המסגרת מכילה את ערך המסנן.
הצגה מהפריים
כדי להציג את כל מחסניות הקריאות, החל מהמסגרת שתואמת לערך המסנן, ולהסתיר את כל מחסניות הקריאות האחרות, משתמשים במסנן הצגה מהמסגרת. הגרף שמתקבל מציג את מחסניות הקריאות מהפונקציה בעלת השם ומטה. המסנן הזה שימושי אם הפונקציה נקראת ממקומות רבים ואתם רוצים לראות את סך הצריכה שמשויכת לה.
לדוגמה, כדי להציג רק קריאות שמקורן בפונקציה baz, צריך להגדיר מסנן Show from frame עבור baz:
המסנן הזה מבצע בדיקה של מחרוזת משנה שתלויה באותיות רישיות. התאמה מתרחשת אם פונקציית המסגרת מכילה את ערך המסנן.
הסתרת מסגרות
כדי להסתיר את כל המסגרות שתואמות לערך המסנן, משתמשים במסנן הסתרת מסגרות. בתרשים מוצגים המתקשרים של הפונקציה, וכל הנמענים של הפונקציה נאספים יחד. המסנן הזה שימושי להסרת פריימים לא רלוונטיים מהתרשים.
לדוגמה, כדי להסתיר את המסגרות של foo1 ושל foo2, מגדירים מסנן הסתרת מסגרות ל-foo. גם foo1 וגם foo2 תואמים, ולכן שניהם מוסרים מהתרשים. מכיוון ששתי הפונקציות קוראות לפונקציות bar ו-baz, הנתונים של כל אחת מהן מצטברים יחד.
המסנן הזה מבצע בדיקה של מחרוזת משנה שתלויה באותיות רישיות. התאמה מתרחשת אם פונקציית המסגרת מכילה את ערך המסנן.
הדגשה
כדי להדגיש את כל המסגרות ששמות הפונקציות שלהן תואמים לערך המסנן, משתמשים במסנן הדגשה. הפונקציה נשארת במצב צבע רגיל, אבל רצפי הקריאות צבועים בגוונים רכים יותר.
לדוגמה, תרשים ללא הדגשה:
זה אותו גרף עם הדגשה שביקשת עבור הפונקציה baz:
המסנן הזה מבצע בדיקה של מחרוזת משנה שתלויה באותיות רישיות. התאמה מתרחשת אם פונקציית המסגרת מכילה את ערך המסנן.
מצב צבע
כברירת מחדל, צבע המסגרת תואם, במידת האפשר, לחבילה של הפונקציה. אם פרטי החבילה לא זמינים, כמו ב-Node.js, שמות קובצי המקור משמשים לצביעת בלוקי הפונקציות. בהגדרת ברירת המחדל, שינוי בצבע של מסגרת call stack מציין מעבר מחבילה אחת לחבילה אחרת. אפשרות ברירת המחדל מתאימה למסנן מצב צבע עם הערך שם.
כדי לצבוע את המסגרות בתרשים הלהבות לפי הצריכה של פונקציה ושל הרכיבים המשניים שלה, מוסיפים מסנן Color mode (מצב צבע) עם הערך Total (סך הכול). אם פונקציה נקראת דרך כמה מחסניות קריאות, הצבע נקבע לפי צריכת המדד בכל מחסניות הקריאות.
לדוגמה, התווים main ו-busyloop צבועים באדום. שני הפריימים האלה צורכים את רוב הזמן של המעבד. המסגרות עם התוויות foo2 ו-baz הן בצבע כתום כהה,
בעוד שהמסגרת עם התווית foo1 היא בצבע כתום בהיר יותר. הפריימים של bar ושל load הם הכי קלים. תרשים הלהבות הזה ממחיש ש-foo2 צורך יותר זמן CPU מ-foo1 אבל פחות מ-busyloop:
כדי לצבוע את המסגרות בתרשים הלהבות לפי מדד הצריכה של הפונקציה, אבל לא לכלול את מדד הצריכה של רכיבי הצאצא שלה, מוסיפים מסנן Color mode עם הערך Self.
לדוגמה, המסנן הזה מראה שהפונקציה baz צורכת יותר זמן מעבד מכל פונקציה אחרת: