תרשימי להבות (flame graphs)
נתוני הפרופילים מוצגים ב-Cloud Profiler באמצעות תרשימי להבה. בניגוד לתרשימים ולעצי החלטה, תרשימי להבה עושים שימוש יעיל בשטח המסך, כי הם מייצגים כמות גדולה של מידע בפורמט קומפקטי וקריא.
כדי להציג את תרשימי הלהבות, בדף הזה מוסבר איך להמיר עץ לתרשים להבות, ומוצג סיכום של התכונות העיקריות של תרשימי הלהבות.
יצירת תרשים להבות
כדי ליצור תרשים להבות (flame graph) מעץ, מבצעים את השלבים שמוצגים בדיאגרמה הבאה:
מסירים מהעץ את החצים שמציינים קריאות לפונקציות.
מחליפים כל צומת בעץ במסגרת.
המסגרות הן מלבניות וכולן באותו הגובה. בדוגמה שבדף הזה, רוחב הפריים נקבע לפי סה"כ זמן המעבד שבו נעשה שימוש בפונקציה שנקראת בשם הפריים.
בטבלה הבאה מתואר פסאודו-קוד לכל אחת מהפונקציות. העבודה שדורשת הרבה משאבים מהמעבד (CPU) שמתבצעת במהלך ההפעלה של פונקציה מגדירה את זמן המעבד העצמי:
פסאודו קוד של פונקציה זמן CPU עצמי
(שניות)זמן כולל של CPU (יחידת עיבוד מרכזית)
(בשניות)func main(): foo1() foo2() // CPU intensive work // for 2 seconds2 4 + 3 + 2 = 9 func foo1(): bar() // CPU intensive work // for 1.5 seconds1.5 2.5 + 1.5 = 4 func foo2(): bar() // CPU intensive work // for 0.5 seconds0.5 2.5 + 0.5 = 3 func bar(): // CPU intensive work // for 2.5 seconds2.5 2.5 השלב הבא הוא להסיר את המרווח האנכי בין המסגרות ולהשאיר את המסגרות מיושרות לימין, תוך שמירה על רצף השיחות. אפשר גם להגדיר ערכת צבעים ולצבוע את המסגרות בהתאם להגדרה. לדוגמה, אפשר לצבוע מסגרות לפי החבילה שלהן, לפי זמן המעבד הכולל, לפי זמן המעבד העצמי או לפי מדד אחר.
אחרי שמסירים רווחים מיותרים וצובעים את הפריימים לפי זמן ה-CPU העצמי, תרשים הלהבות נראה כך:
שימו לב שסטאק הביצוע של
foo1ו-foo2נשמרו, למרות שסטאק הביצוע שמתחיל ב-foo2נמצא עכשיו ליד הפריים שלfoo1.
סיכום
הדוגמה הפשוטה הזו ממחישה את הנקודות הבאות:
- תרשימי להבה הם ייצוג קומפקטי של עץ, ואפשר ליצור מחדש סטאק ביצוע על ידי מעקב אחר מסגרות מלמעלה למטה.
- השם של פריים הוא שם של פונקציה, והרוחב של הפריים הוא המידה היחסית של הזמן הכולל של הפונקציה ב-CPU.
בדוגמה הזו, הזמן הכולל של המעבד
foo2הוא שליש מהזמן הכולל של המעבדmain, ולכן רוחב הפריים שלfoo2הוא שליש מרוחב הפריים שלmain. - הרוחב של השטח הריק מתחת לפריים הוא המידה היחסית של זמן השימוש במעבד (CPU) של הפונקציה שמופיעה בפריים.
לדוגמה, מתחת למסגרת
foo1, יש 1.5 יחידות ריקות ו-2.5 יחידות תפוסות על ידיbar. לכן, זמן ה-CPU העצמי שלfoo1הוא 37.5% מזמן ה-CPU הכולל שלו, כלומר 1.5 שניות. כשעוקבים אחרי מחסנית קריאות, רוחב המסגרות קטן כי זמן ה-CPU הכולל של הפונקציה שנקראת אף פעם לא יכול להיות גדול מזמן ה-CPU הכולל של הפונקציה שקוראת. ההתנהגות הזו היא מה שיוצר את הצורה של הלהבה.
בדוגמה,
foo1callsbarוזמן ה-CPU הכולל שלfoo1מוגדרים כזמן ה-CPU הכולל שלbarבתוספת זמן ה-CPU שלfoo1. לכן, זמן המעבד הכולל שלbarלא יכול להיות גדול מזמן המעבד הכולל שלfoo1.
המאמרים הבאים
- בחירת הפרופילים לניתוח
- איך משתמשים בתרשים להבות
- סינון תרשים הלהבות
- התמקדות בתרשים להבות
- השוואה בין פרופילים