הערכת זמני העיבוד של פריימים במעבד ובמעבד הגרפי (זמני פריימים) חיונית כדי להבין את ביצועי האפליקציה ולאתר צווארי בקבוק. כשמבצעים פרופיל לאפליקציה באמצעות AGI, הכלי System Profiler מספק נתוני מעקב שאפשר להשתמש בהם כדי להעריך את זמני הפריימים.
זמני CPU
ב-AGI, אפשר לראות את הזמנים הכוללים והפעילים של מסגרות ה-CPU בטראק ה-CPU של פרופיל מערכת.
זמן כולל של CPU (יחידת עיבוד מרכזית)
כדי למדוד את הזמן הכולל של השימוש במעבד, בוחרים את טווח הזמן שכולל את הזמן בין אירועי שליחת פריימים עוקבים. האירועים של שליחת מסגרת הם eglSwapBuffers (ל-OpenGL) ו-vkQueuePresentKHR (ל-Vulkan).
eglSwapBuffer.
vkQueuePresentKHR.המדד הזה הוא הערכה של סך זמן המעבד,אבל הוא לא בהכרח מייצג את זמן המעבד הפעיל. לדוגמה, באפליקציות שמוגבלות על ידי ה-GPU, יכול להיות שה-CPU ימתין עד שה-GPU ישלים את העבודה שלו לפני שישלח פריים חדש. המצב הזה קורה בדרך כלל כשאירוע dequeueBuffer, eglSwapBuffer (עבור OpenGL) או vkQueuePresent (עבור Vulkan) תופס חלק גדול מזמן המעבד.
זמן ההמתנה נכלל בזמן הכולל של מעבד CPU, אבל לא בזמן הפעיל של מעבד CPU.
dequeueBuffer ו-eglSwapBuffer.
זמן פעיל של CPU
זמן השימוש הפעיל במעבד קובע מתי המעבד מריץ את קוד האפליקציה בלי להיות במצב לא פעיל.
כדי למדוד את זמן ה-CPU הפעיל, מעיינים בפרוסות Running שמוצגות ממש מעל אירועי ה-CPU. סופרים את כל החלקים של ה-trace בין שני אירועי השליחה של הפריים שנמצאים במצב Running. חשוב לכלול שרשורים פעילים.
דרך נוספת למדוד את זמן השימוש הפעיל במעבד היא להציג את חלקי האפליקציה בטראקים של המעבד. הפרוסות האלה מציינות מתי המעבד פועל, והן תואמות לפרוסות של Running.
כדי לזהות את חלקי האפליקציה, אפשר להוסיף לאפליקציה סמני ATrace. הסמנים יוצגו בנתוני השימוש במעבד של System Profiler.
הערכת זמני רינדור פריים ב-GPU
כדי להעריך את זמני הפריימים של ה-GPU, אפשר להשתמש בפרוסות GPU או במונים של GPU ב-System Profiler. ההערכה מדויקת יותר כשמשתמשים בפרוסות GPU.
פרוסות GPU
אם יש מידע על חלוקת ה-GPU ב-System Profiler, אפשר לקבל מידע מדויק מאוד על זמן רינדור פריים של ה-GPU על ידי מדידת הזמן הכולל שבו האפליקציה מבצעת משימות שמשויכות לפריים יחיד.
מכשירי מאלי
במכשירי Mali, לפרוסות ה-GPU יש טראקים של fragment, non-fragment ולפעמים supplementary non-fragment. בפריים פחות מורכב, העבודה של הפרגמנט והעבודה שלא קשורה לפרגמנט מתבצעות ברצף, ולכן אפשר להבחין בין העבודה של פריים אחד לבין העבודה של פריים אחר על ידי חיפוש פערים בין פעולות GPU פעילות.
לחלופין, אם אתם מכירים את העבודה שנשלחת אל ה-GPU, זיהוי הדפוס של מעברי הרינדור שנשלחים מספק מידע על מתי מתחיל ומסתיים פריים.
באפליקציות עם תהליך עבודה של GPU שמקביל יותר, אפשר לראות את זמני הפריימים של ה-GPU על ידי חיפוש כל הפריימים עם אותו submissionID בחלונית Selection של כל פרוסה.
באפליקציות שמבוססות על Vulkan, אפשר להשתמש בכמה שליחות כדי ליצור פריים. כדי לעקוב אחרי מזהי השליחה, משתמשים בטראק Vulkan Events, שמכיל פרוסה לכל שליחה. בחירה של פרוסת שליחה תדגיש את כל פרוסות הפעילות של ה-GPU שמתאימות לשליחה.
מכשירי Adreno
במכשירי Adreno, פרוסות ה-GPU מופיעות בטראק GPU Queue 0 ותמיד מיוצגות ברצף, כך שאפשר לראות את כל הפרוסות שמייצגות את שלבי הרינדור של פריים ולהשתמש בהן כדי למדוד את זמני הפריים של ה-GPU.
בדומה לתרחיש של Mali שתואר קודם: אם האפליקציה משתמשת ב-Vulkan, הרצועה Vulkan Events מספקת מידע על העבודה שנשלחת כדי להפעיל את הפריים. כדי להדגיש את שלבי הרינדור, לוחצים על הפרוסות Vulkan Events שמשויכות למסגרת.
יש תרחישים שבהם קשה יותר להבחין בגבולות הפריימים של ה-GPU כי האפליקציה תלויה מאוד ב-GPU. במקרים כאלה, אם אתם מכירים את העבודה שנשלחת ל-GPU, אתם יכולים לזהות את התבנית שבה מבוצעים מעברי הרינדור ולקבוע את גבולות המסגרת על סמך המידע הזה.
מוני GPU
אם פרטי חלוקת ה-GPU לא זמינים במעקב, אפשר להעריך את זמן רינדור הפריים של ה-GPU באמצעות המסלולים של מונה ה-GPU.
מכשירי מאלי
במכשירי Mali, אפשר להשתמש במסלול GPU utilization כדי להעריך את זמן רינדור הפריים של ה-GPU באפליקציה שלא דורשת הרבה משאבי GPU. כשאפליקציות לא צורכות הרבה משאבי GPU, יש להן תקופות רגילות של פעילות גבוהה ונמוכה של GPU, במקום פעילות גבוהה באופן עקבי. כדי להעריך את זמני הפריימים של ה-GPU באמצעות טראק השימוש ב-GPU, מודדים את משך התקופות של פעילות גבוהה בטראק.
אם האפליקציה דורשת יותר משאבי GPU, ניצול ה-GPU יכול להיות גבוה מאוד באופן עקבי. במקרה כזה, אפשר להשתמש במסלולים fragment queue utilization ו-non-fragment queue utilization כדי לעקוב אחרי פעילות ה-GPU ולהעריך את זמני הפריימים של ה-GPU. חיפוש דפוסים ברצועות fragment ו-non-fragment מאפשר לקבל הערכה גסה של מיקום הגבולות של פריים, ולהשתמש בה כדי למדוד את זמן רינדור הפריים של ה-GPU.
מכשירי Adreno
במכשירי Adreno, אם האפליקציה לא דורשת הרבה משאבים מה-GPU, אפשר להעריך את זמני הפריימים של ה-GPU באותה דרך שבה אפשר להעריך אותם במכשירי Mali, כמו שמתואר בקטע הקודם.
אם האפליקציה דורשת יותר משאבים מה-GPU, ואחוז הניצול של ה-GPU באפליקציה גבוה באופן עקבי, אפשר להשתמש בנתונים של הוראות Vertex / שנייה ושל הוראות Fragment / שנייה כדי להעריך את זמני הפריימים של ה-GPU. חיפוש דפוסים ברמות הפעילות של הטראקים האלה מאפשר לקבל הערכה גסה של מיקום הגבולות של פריים, ולהשתמש בה כדי למדוד את זמן רינדור פריים של ה-GPU.
יכול להיות שרצועות אחרות יספקו מידע דומה:
- Vertices Shaded / Second
- Fragments Shaded / Second
- % Time Shading Vertices
- % Time Shading Fragments