התמקדות בתרשים הלהבות

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

  1. ניתוח צריכת המשאבים המצטברת של פונקציה מסוימת שמופעלת מכמה מקומות.
  2. ניתוח של שיעור הזמן שמוקדש לפונקציה עבור קוראים שונים של הפונקציה.

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

פונקציית מיון בתרשים להבות.

בקטע הבא נתמקד בגרף של Sort ונענה על השאלה הזו. תרשימי הלהבות בדף הזה נוצרו עם מצב הצבע והשוואה ל שהוגדרו לערכי ברירת המחדל שם וללא בהתאמה.

הסבר על התרשים המודגש

הגרף שנוצר על ידי המסנן Focus יוצר למעשה שני גרפים של להבות עבור הפונקציה שצוינה, ומחבר אותם:

תרשים להבות (flame graph) שמתמקד בפונקציית המיון.

בגרף הקודם, המסגרת שמתאימה לפונקציה Sort היא ברוחב מלא ומודגשת. טקסט המסגרת כולל את שם הפונקציה, אחוז ומספר הפרופילים ששימשו לניתוח. במקרה הזה, המדדים מציינים שהפונקציה Sort צרכה 8.85% מזמן השימוש ביחידת העיבוד המרכזית (CPU) באופן מצטבר.

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

החלק התחתון של תרשימי הלהבות שבו מוצגים הנמענים הממוינים של הקריאות.

החלק העליון של התרשים מציג את המתקשרים של Sort כשהנמענים מוסתרים. אפשר ליצור קירוב של החצי העליון באמצעות סדרה של מסננים. מתחילים בהוספת פילטר הצגת ערימות ל-Sort. אחר כך, לכל פונקציה שמופעלת על ידי Sort, מוסיפים Hide stacks או Hide frames. במצב כזה, מוסיפים Hide stacks ל-quickSort כדי לבטל את הפונקציה הזו ואת הצאצאים שלה, ואז מוסיפים Hide frames ל-Len ול-maxDepth:

החלק העליון של תרשימי הלהבות שמציג את הפונקציות שקוראות לפונקציות אחרות.

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

הגרף הממוקד שונה קצת מגרף שמשלב רק את שני הקירובים:

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

בחירת מסגרת

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

בדוגמה הקודמת, הפונקציה Sort נקראת על ידי (*byFreq).sort ועל ידי (*byLiteral).sort. כדי לראות את סטאק הביצוע של (*byLiteral).sort בפירוט רב יותר, בוחרים את המסגרת הזו. אפשר לבחור פריים אחר ולצמצם עוד יותר את ערימות הקריאות שמוצגות:

תרשים להבות הורחב לגבי מיון.

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

ניתוח הגרף

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

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

  • אם בוחרים מסגרת, תרשים הלהבות (flame graph) יצוירו מחדש עם המסגרת שנבחרה ברוחב מלא. כדי לשחזר תרשים להבת סטנדרטי לצורה המקורית שלו, צריך לבחור את המסגרת העליונה. כדי לשחזר תרשים להבת מיקוד לצורה המקורית שלו, צריך לבחור את המסגרת שבה מוצג הערך של מסנן המיקוד.

למידע על התרשים הממוקד כשמשווים פרופילים, אפשר לעיין במאמר בנושא התמקדות בהשוואה.

הגדרת מסנן הפוקוס

יש כמה שיטות להגדרת מסנן מיקוד, אבל כולן מובילות לאותו תרשים.

באמצעות התרשים

מציבים את הסמן על המסגרת הרצויה ולוחצים על התמקדות בתיאור הכלים של המסגרת. פונקציית המיקוד מחולצת מהפריים. בדוגמה הזו, תרשים הלהבות, שהורחב סביב הפונקציה (*huffmanBitWriter).write, מציג שלוש ערימות שונות של קריאות:

תרשים להבות (flame graph) עם פריים קטן במרכז.

באמצעות רשימת המיקוד

כדי למקד את תרשים הלהבות בפונקציה ספציפית:

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

בוחרים את הטבלה של פונקציית המיקוד.

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

כדי למיין את השורות בטבלה בסדר עולה או בסדר יורד , בוחרים את רכיב כותרת הטבלה. בכל שורה בטבלה מוצג שם של פונקציה ונתונים סטטיסטיים שקשורים להרצה של הפונקציה. מהטבלה הזו אפשר לראות שהפונקציה (*compressor).deflate דורשת 2.78 שניות לביצוע, כאשר 1.8 שניות מושקעות בפונקציה עצמה והזמן שנותר מושקע בסטאק ביצוע שלה. בעמודת האחוזים מדווח ש-57% מזמן הביצוע הכולל מושקע בפונקציה (*compressor).deflate. בעמודה אחרת מדווח ש-89% מהזמן, הפונקציה (*compressor).deflate או פונקציה בסטאק הביצוע שלה, פועלת. לבסוף, בעמודה count מדווח על שלוש רצפים שמפעילים את הפונקציה (*compressor).deflate.

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

באמצעות סרגל המסננים

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

לחלופין, אפשר ללחוץ על מסננים, לבחור באפשרות התמקדות ולהזין את מחרוזת הזיהוי.

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

הסרת מסנן המיקוד

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

המאמרים הבאים