بررسی ردیابی‌ها

نمای ردیابی در «تحلیل‌گر واحد پردازش مرکزی» چند روش برای مشاهده اطلاعات از ردیابی‌های ضبط‌شده ارائه می‌دهد.

برای ردیابی روش‌ها و ردیابی تابع‌ها، می‌توانید نمودار فراخوانی را مستقیماً در خط زمان رشته‌ها و برگه‌های نمودار شعله‌ای، بالا به پایین، پایین به بالا، و رویدادها از قاب تحلیل مشاهده کنید. برای قاب‌های پشته فراخوانی، می‌توانید بخشی از کد را که اجرا شده است و دلیل فراخوانی آن را مشاهده کنید. برای ردیابی‌های سیستم، می‌توانید رویدادهای ردیابی را مستقیماً در خط زمان رشته‌ها و برگه‌های نمودار شعله‌ای، بالا به پایین، پایین به بالا، و رویدادها را از قاب تجزیه‌وتحلیل مشاهده کنید.

میان‌برهای موشواره و صفحه‌کلید برای پیمایش آسان‌تر نمودارهای فراخوانی یا رویدادهای ردیابی دردسترس هستند.

بازرسی ردگیری‌ها بااستفاده از «نمودار فراخوانی»

نمودار فراخوانی نمایشی گرافیکی از ردیابی روش یا ردیابی تابع ارائه می‌دهد که در آن دوره و زمان‌بندی فراخوانی در محور افقی نشان داده می‌شود و فراخوانده‌های آن در امتداد محور عمودی نمایش داده می‌شوند. فراخوانی‌های میاناهای برنامه‌سازی کاربردی سیستم به رنگ نارنجی، فراخوانی‌های روش‌های خود برنامه به رنگ سبز، و فراخوانی‌های میاناهای برنامه‌سازی کاربردی طرف سوم (ازجمله میاناهای برنامه‌سازی کاربردی زبان Java) به رنگ آبی نشان داده می‌شوند. شکل ۴ نمونه‌ای از نمودار فراخوانی را نشان می‌دهد و مفهوم زمان خود، زمان فرزندان، و زمان کل را برای روش یا تابع معینی نشان می‌دهد. می‌توانید درباره این مفاهیم در بخش مربوط به نحوه بازرسی ردگیری‌ها بااستفاده از «بالا به پایین» و «پایین به بالا» بیشتر بدانید.

نمونه نمودار فراخوانی که زمان خود، زمان فرزندان، و زمان کل را برای روش D نشان می‌دهد
شکل ۱. نمونه نمودار فراخوانی که زمان خود، فرزندان، و زمان کل را برای روش D نشان می‌دهد.

بازرسی ردگیری‌ها بااستفاده از برگه «نمودار شعله‌ای»

برگه نمودار شعله‌ای نمودار فراخوانی معکوسی ارائه می‌دهد که پشته‌های فراخوانی یکسان را جمع‌آوری می‌کند. یعنی، روش‌ها یا توابع یکسانی که توالی فراخوانندگان یکسانی دارند جمع‌آوری می‌شوند و به‌صورت یک نوار بلندتر در نمودار شعله‌ای نمایش داده می‌شوند (به‌جای اینکه به‌صورت چند نوار کوتاه‌تر نمایش داده شوند، همان‌طور که در نمودار فراخوانی نشان داده می‌شود). این کار باعث می‌شود راحت‌تر ببینید کدام روش‌ها یا عملکردها بیشترین زمان را مصرف می‌کنند. اما این همچنین به این معنی است که محور افقی نشان‌دهنده خط زمانی نیست؛ بلکه مقدار نسبی زمانی را نشان می‌دهد که هر روش یا تابع برای اجرا نیاز دارد.

برای کمک به توضیح این مفهوم، نمودار فراخوانی را در «شکل ۲» درنظر بگیرید. توجه داشته باشید که روش D چندین تماس با B برقرار می‌کند (B1،‏ B2، و B3)، و برخی‌از آن تماس‌ها با B تماسی با C برقرار می‌کنند (C1 و C3).

نمودار فراخوانی که چندین فراخوانی روش را نشان می‌دهد که توالی مشترکی از فراخوانندگان دارند
شکل ۲. نمودار فراخوانی با چندین فراخوانی روش که دنباله مشترکی از فراخوانندگان را هم‌رسانی می‌کنند.

چون B۱،‏ B۲، و B۳ توالی یکسانی از فراخوان‌ها (A ← D ← B) را هم‌رسانی می‌کنند، همان‌طور که در شکل ۳ نشان داده شده است، تجمیع می‌شوند. به‌طور مشابه، C1 و C3 باهم تجمیع می‌شوند زیرا توالی تماس‌گیرندگان آن‌ها یکسان است (A ← D ← B ← C)؛ توجه داشته باشید که C2 لحاظ نمی‌شود زیرا توالی تماس‌گیرندگان آن متفاوت است (A ← D ← C).

انبوهش روش‌های یکسان که پشته فراخوانی یکسانی دارند
شکل ۳.‏ درحال جمع‌آوری روش‌های یکسانی که پشته فراخوانی یکسانی دارند.

از فراخوانی‌های انبوهشی برای ایجاد نمودار شعله‌ای استفاده می‌شود، همان‌طور که در شکل ۴ نشان داده شده است. توجه داشته باشید که برای هر فراخوانی در نمودار شعله‌ای، فراخوانده‌هایی که بیشترین زمان واحد پردازش مرکزی را مصرف می‌کنند، ابتدا ظاهر می‌شوند.

نمایش نمودار شعله‌ای از نمودار فراخوانی انبوهشی
شکل ۴. نمایش نمودار شعله‌ای از نمودار فراخوانی نشان‌داده‌شده در شکل ۵.

بازرسی ردگیری‌ها بااستفاده از «بالا به پایین» و «پایین به بالا»

برگه بالا به پایین فهرستی از فراخوانی‌ها را نمایش می‌دهد که در آن، ازهم باز کردن گره تابع یا روش، فراخوانده‌های آن را نمایش می‌دهد. شکل ۵ نمودار بالا به پایین را برای نمودار فراخوانی در شکل ۱ نشان می‌دهد. هر پیکان در نمودار از تماس‌گیرنده به تماس‌گیرنده اشاره می‌کند.

همان‌طور که در شکل ۵ نشان داده شده است، گسترش گره برای روش A در برگه بالا به پایین فراخوانده‌های آن، روش‌های B و D را نمایش می‌دهد. پس‌از آن، گسترش گره برای روش D، فراخوانده‌های آن، روش‌های B و C را نشان می‌دهد. مشابه برگه نمودار شعله‌ای، درخت بالا به پایین اطلاعات ردیابی را برای روش‌های یکسانی که پشته فراخوانی یکسانی دارند، جمع‌آوری می‌کند. یعنی برگه نمودار شعله‌ای نمایشی گرافیکی از برگه بالا به پایین ارائه می‌دهد.

برگه بالا به پایین اطلاعات زیر را برای کمک به توصیف زمان واحد پردازش مرکزی صرف‌شده برای هر تماس ارائه می‌دهد (زمان‌ها همچنین به‌عنوان درصدی از کل زمان رشته در محدوده انتخاب‌شده نشان داده می‌شوند):

  • خود: زمانی که فراخوانی تابع یا روش صرف اجرای کد خودش کرده است و نه فراخوانده‌هایش، همان‌طور که در شکل ۱ برای روش D نشان داده شده است.
  • فرزندان: زمانی که فراخوانی تابع یا روش صرف اجرای فراخوانده‌های خود کرده است و نه کد خودش، همان‌طور که در شکل ۱ برای روش D نشان داده شده است.
  • مجموع: مجموع زمان خود و فرزندان روش. این نشان‌دهنده کل زمانی است که برنامه صرف اجرای فراخوانی کرده است، همان‌طور که در شکل ۱ برای روش D نشان داده شده است.

شکل ۵. درخت بالا به پایین.

شکل ۶. درخت «پایین به بالا» برای روش C از شکل ۵.

برگه پایین به بالا فهرستی از تماس‌ها را نمایش می‌دهد که در آن با گسترش دادن گره تابع یا متد، تماس‌گیرندگان آن نمایش داده می‌شوند. بااستفاده از ردیابی نمونه نشان‌داده‌شده در شکل ۵، شکل ۶ درختی از پایین به بالا برای روش C ارائه می‌دهد. باز کردن گره برای روش C در درخت پایین به بالا، هریک از فراخوانندگان منحصربه‌فرد آن، روش‌های B و D را نمایش می‌دهد. توجه داشته باشید که اگرچه B دو بار C را فراخوانی می‌کند، B فقط یک بار هنگام گسترش گره برای روش C در درخت پایین به بالا ظاهر می‌شود. پس‌از آن، ازهم باز کردن گره B، فراخواننده آن، یعنی روش‌های A و D را نمایش می‌دهد.

برگه پایین به بالا برای مرتب‌سازی روش‌ها یا توابع براساس مواردی که بیشترین (یا کمترین) زمان واحد پردازش مرکزی را مصرف می‌کنند مفید است. می‌توانید هر گره را بررسی کنید تا مشخص کنید کدام فراخوانندگان بیشترین زمان واحد پردازش مرکزی را برای فراخوانی آن روش‌ها یا توابع صرف می‌کنند. درمقایسه با درخت بالا به پایین، اطلاعات زمان‌بندی برای هر روش یا تابع در درخت پایین به بالا به روشی که در بالای هر درخت (گره بالا) قرار دارد ارجاع داده می‌شود. زمان واحد پردازش مرکزی همچنین به‌صورت درصدی از کل زمان رشته درطول آن ضبط نشان داده می‌شود. جدول زیر به توضیح نحوه تفسیر اطلاعات زمان‌بندی برای گره برتر و فراخوانندگان آن (زیرگره‌ها) کمک می‌کند.

خودم کودکان مجموع
روش یا عملکرد در بالای درخت پایین به بالا (گره بالا) نشان‌دهنده کل زمانی است که روش یا تابع صرف اجرای کد خود کرده است و نه کد فراخوانده‌هایش. درمقایسه با درخت بالا به پایین، این اطلاعات زمان‌بندی نشان‌دهنده مجموع همه تماس‌ها با این روش یا تابع درطول مدت ضبط است. نشان‌دهنده کل زمانی است که روش یا تابع صرف اجرای فراخوانده‌هایش کرده است و نه کد خودش. درمقایسه با درخت بالا به پایین، این اطلاعات زمان‌بندی نشان‌دهنده مجموع همه تماس‌ها با این روش یا فراخوانده‌های تابع درطول مدت ضبط است. مجموع زمان خود و زمان فرزندان.
تماس‌گیرندگان (گره‌های فرعی) نشان‌دهنده کل زمان خودِ فراخوانده‌شده هنگام فراخوانی توسط فراخواننده است. بااستفاده از درخت پایین به بالا در شکل ۶ به‌عنوان نمونه، زمان خودی برای روش B برابر با مجموع زمان‌های خودی برای هر اجرای روش C هنگام فراخوانی توسط B خواهد بود. نشان‌دهنده کل زمان فرزند فراخوانده‌شده هنگام فراخوانی توسط فراخواننده است. بااستفاده از درخت پایین به بالا در شکل ۶ به‌عنوان مثال، زمان فرزندان برای روش B برابر با مجموع زمان‌های فرزندان برای هر اجرای روش C هنگام فراخوانی توسط B خواهد بود. مجموع زمان خود و زمان فرزندان.

بازرسی ردگیری‌ها بااستفاده از جدول «رویدادها»

جدول «رویدادها» همه تماس‌های رشته انتخاب‌شده کنونی را فهرست می‌کند. می‌توانید با کلیک کردن روی سرصفحه ستون‌ها، آن‌ها را مرتب کنید. با انتخاب ردیفی در جدول، می‌توانید در خط زمان به زمان شروع و پایان تماس انتخاب‌شده پیمایش کنید. این کار به شما امکان می‌دهد رویدادها را به‌طور دقیق در خط زمان پیدا کنید.

برگه «رویدادها» در پانل «تحلیل» که فهرستی از تماس‌ها را در رشته انتخاب‌شده نشان می‌دهد
شکل ۷. مشاهده کردن برگه «رویدادها» در قاب «تجزیه‌وتحلیل».

بررسی قاب‌های پشته فراخوانی

پشته‌های فراخوانی برای درک اینکه کدام بخش از کد اجرا شده است و چرا فراخوانی شده است مفید هستند. اگر نمونه ضبط پشته فراخوانی برای برنامه Java یا Kotlin جمع‌آوری شود، پشته فراخوانی معمولاً نه‌تنها شامل کد Java یا Kotlin است، بلکه شامل قاب‌هایی از کد بومی JNI، ماشین مجازی Java (مثلاً android::AndroidRuntime::start)، و هسته سیستم ([kernel.kallsyms]+offset) نیز می‌شود. دلیل این امر این است که برنامه Java یا Kotlin معمولاً ازطریق ماشین مجازی Java اجرا می‌شود. کد بومی برای اجرای خود برنامه و برای اینکه برنامه بتواند با سیستم و سخت‌افزار ارتباط برقرار کند لازم است.

نمایه‌ساز این قاب‌ها را برای دقت ارائه می‌دهد؛ اما بسته به بررسی شما، ممکن است این قاب‌های فراخوانی اضافی را مفید بدانید یا ندانید. نمایه‌ساز روشی برای جمع کردن قاب‌هایی که به آن‌ها علاقه ندارید ارائه می‌دهد تا بتوانید اطلاعاتی را که به بررسی شما مربوط نیست پنهان کنید.

در مثال زیر، ردگیری زیر دارای قاب‌های زیادی با برچسب [kernel.kallsyms]+offset است که درحال‌حاضر برای توسعه مفید نیستند.

نمونه ردیابی تماس که قاب‌های هسته جمع‌نشده را نشان می‌دهد
نمونه ردیابی تماس که قاب‌های هسته جمع‌نشده را نشان می‌دهد.

برای جمع کردن این قاب‌ها در یک قاب، دکمه جمع کردن قاب‌ها را از نوارابزار انتخاب کنید، مسیرهای موردنظر را برای جمع کردن انتخاب کنید، و دکمه اعمال را برای اعمال تغییرات انتخاب کنید. در این مثال، مسیر [kernel.kallsyms] است.

نمونه‌ای از منوی جمع کردن قاب‌های simpleperf
نمونه‌ای از منو جمع کردن قاب‌های simpleperf.

با این کار، قاب‌های مربوط به مسیر انتخاب‌شده در هر دو پانل چپ و راست جمع می‌شوند، همان‌طور که در زیر نشان داده شده است.

نمونه‌ای از فریم‌های جمع‌شده simpleperf
نمونه‌ای از قاب‌های جمع‌شده simpleperf.

بررسی ردیابی‌های سیستم

هنگام بازرسی ردیابی سیستم، می‌توانید رویدادهای ردیابی را در خط زمان رشته‌ها بررسی کنید تا جزئیات رویدادهایی را که در هر رشته رخ می‌دهد مشاهده کنید. اشاره‌گر موشواره را روی رویدادی نگه دارید تا نام رویداد و زمان صرف‌شده در هر وضعیت را ببینید. روی رویدادی کلیک کنید تا اطلاعات بیشتری در قاب تجزیه‌وتحلیل ببینید.

ردیابی‌های سیستم را بازرسی کنید: هسته‌های CPU

علاوه‌بر داده‌های زمان‌بندی واحد پردازش مرکزی، ردیابی‌های سیستم شامل فرکانس واحد پردازش مرکزی براساس هسته نیز می‌شود. این گزینه میزان فعالیت هر هسته را نشان می‌دهد و ممکن است به شما ایده‌ای بدهد که کدام‌یک از آن‌ها «هسته‌های بزرگ» یا «هسته‌های کوچک» در پردازنده‌های مدرن تلفن همراه هستند.

قاب «هسته‌های CPU» که فعالیت CPU و رویدادهای ردیابی را برای رشته پردازش نشان می‌دهد
شکل ۸. مشاهده فعالیت CPU و رویدادهای ردیابی برای رشته پردازش.

قاب هسته‌های CPU (همان‌طور که در شکل ۸ نشان داده شده است) فعالیت رشته زمان‌بندی‌شده را در هر هسته نشان می‌دهد. اشاره‌گر موشواره را روی فعالیت رشته نگه دارید تا ببینید این هسته در آن زمان خاص روی کدام رشته درحال اجرا است.

برای اطلاعات بیشتر درباره بازرسی اطلاعات ردگیری سیستم، به بخش بررسی مشکلات عملکرد میانای کاربر در systrace مستندات مراجعه کنید.

بازرسی ردگیری‌های سیستم: خط زمان پرداز زدن قاب

می‌توانید بررسی کنید که چقدر طول می‌کشد تا برنامه‌تان هر فریم را در رشته اصلی و RenderThread ارائه کند تا گلوگاه‌هایی را که باعث لرزش میانای کاربر و نرخ فریم پایین می‌شوند بررسی کنید. برای آشنایی با نحوه استفاده از ردیابی‌های سیستم برای بررسی و کمک به کاهش لرزش میانای کاربر، تشخیص لرزش میانای کاربر را ببینید.

بازرسی ردیابی‌های سیستم: حافظه پردازش (RSS)

برای برنامه‌هایی که در دستگاه‌های دارای Android نسخه ۹ یا بالاتر مستقر شده‌اند، بخش حافظه پردازش (RSS) مقدار حافظه فیزیکی را که درحال‌حاضر توسط برنامه استفاده می‌شود نشان می‌دهد.

بخش «حافظه پردازش» (RSS) که استفاده از حافظه فیزیکی را در نمایه‌ساز نشان می‌دهد
شکل ۹. مشاهده حافظه فیزیکی در نمایه‌ساز.

جمع

این مقدار کل حافظه فیزیکی است که درحال‌حاضر توسط پردازش شما استفاده می‌شود. در سیستم‌های مبتنی بر Unix، این مقدار با عنوان «اندازه مجموعه مقیم» شناخته می‌شود و ترکیبی از کل حافظه استفاده‌شده توسط تخصیص‌های ناشناس، نگاشت‌های فایل، و تخصیص‌های حافظه مشترک است.

برای توسعه‌دهندگان Windows، «اندازه مجموعه مقیم» مشابه «اندازه مجموعه کاری» است.

اختصاص‌یافته

این شمارنده میزان حافظه فیزیکی را که درحال‌حاضر توسط تخصیص‌های حافظه عادی فرایند استفاده می‌شود ردیابی می‌کند. این‌ها تخصیص‌هایی هستند که ناشناس (بدون پشتیبانی از فایل خاصی) و خصوصی (هم‌رسانی‌نشده) هستند. در اکثر برنامه‌ها، این‌ها از تخصیص‌های پشته (با malloc یا new) و حافظه پشته تشکیل شده‌اند. وقتی این تخصیص‌ها از حافظه فیزیکی خارج می‌شوند، در فایل مبادله سیستم نوشته می‌شوند.

نگاشت‌های فایل

این شمارنده مقدار حافظه فیزیکی را که فرایند برای نگاشت فایل استفاده می‌کند ردیابی می‌کند – یعنی حافظه‌ای که از فایل‌ها به منطقه‌ای از حافظه توسط مدیر حافظه نگاشت شده است.

هم‌رسانی‌شده

این شمارنده میزان حافظه فیزیکی را که برای هم‌رسانی حافظه بین این فرایند و فرایندهای دیگر در سیستم استفاده می‌شود ردیابی می‌کند.