داده های عملکرد را جمع آوری کنید

سرویس بومی Watchdog داده‌های عملکرد ورودی/خروجی را از زمان شروع اولیه در طول بوت شدن سیستم ثبت می‌کند. سرویس بومی داده‌های عملکرد جمع‌آوری‌شده را در گزارش اشکال ارائه می‌دهد. فروشندگان می‌توانند از طریق dumpsys از سرویس بومی درخواست کنند تا داده‌های جمع‌آوری‌شده را ارائه دهد یا یک جلسه جمع‌آوری سفارشی برای اشکال‌زدایی آغاز کند.

فراوانی جمع‌آوری داده‌ها

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

  • در نسخه‌های userdebug یا eng، ابزار Watchdog داده‌های عملکرد را هر (1) ثانیه یک بار در طول بوت شدن سیستم و هر (1) دقیقه یک بار پس از اتمام بوت جمع‌آوری می‌کند.
  • در نسخه‌های ساخته‌شده توسط کاربر، Watchdog داده‌های عملکرد را هر 20 ثانیه یک بار در طول بوت شدن سیستم و هر دو (2) دقیقه یک بار پس از اتمام بوت جمع‌آوری می‌کند.

رویدادهای جمع‌آوری داده‌ها

پروفایل‌سازی مبتنی بر نمونه در طول رویدادهای مختلف سیستم (مانند بوت شدن سیستم، بیدار شدن سیستم و تغییر کاربر) و در طول پنجره N دقیقه آخر انجام می‌شود.

  • رویدادهای N دقیقه آخر قبل از تولید گزارش اشکال: در یک بازه زمانی ۳۰ دقیقه‌ای ایجاد می‌شود.
  • رویدادهای زمان بوت: پس از بوت شدن سیستم ایجاد می‌شوند.
  • رویدادهای تغییر کاربر: پس از شروع تغییر کاربر ایجاد می‌شود.
  • رویدادهای جمع‌آوری سفارشی: می‌تواند دوره جمع‌آوری، حداکثر مدت زمان را مشخص کند و بر اساس بسته‌ها فیلتر کند.

داده‌های عملکرد را تخلیه کنید

وقتی یک گزارش اشکال (bugreport) دریافت می‌شود، سرویس بومی Watchdog داده‌های عملکرد جمع‌آوری‌شده را در گزارش اشکال ذخیره می‌کند. فروشندگان می‌توانند از طریق دستور dumpsys زیر از سرویس بومی درخواست کنند تا داده‌های عملکرد جمع‌آوری‌شده را ذخیره کند. برای جزئیات بیشتر در مورد گزارش، به بخش « درک گزارش داده‌های عملکرد» مراجعه کنید.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default > /tmp/carwatchdog_dump.txt

جمع‌آوری داده‌های عملکرد برای اشکال‌زدایی

فروشندگان می‌توانند از سرویس بومی Watchdog برای جمع‌آوری سفارشی داده‌های عملکرد جهت اشکال‌زدایی استفاده کنند. به عنوان مثال، برای درک میزان استفاده از ورودی/خروجی یک برنامه یا سرویس، فروشندگان می‌توانند یک جمع‌آوری داده‌های عملکرد سفارشی انجام دهند که میزان استفاده از ورودی/خروجی را یا برای لیست خاصی از بسته‌ها یا برای کل سیستم نمایش می‌دهد.

شروع جلسه جمع‌آوری سفارشی

در زیر دستور شروع یک جلسه جمع‌آوری داده‌های عملکرد سفارشی نشان داده شده است:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf [--interval <seconds>] [--max_duration <seconds>] [--filter_packages <package_name>,<package_name>,...]
  • --start_perf یک جلسه جمع‌آوری داده‌های عملکرد سفارشی را آغاز می‌کند.
  • --interval <seconds> فاصله زمانی پروفایلینگ را مشخص می‌کند. به طور پیش‌فرض، فاصله زمانی 30 ثانیه است.
  • --max_duration <seconds> حداکثر مدت زمان جلسه جمع‌آوری داده‌های عملکرد سفارشی را مشخص می‌کند. اگر جلسه به صورت دستی متوقف نشود، جلسه متوقف شده و داده‌های جمع‌آوری‌شده پس از این مدت زمان حذف می‌شوند. به طور پیش‌فرض، حداکثر مدت زمان 30 دقیقه است.
  • --filter_packages <package_name>,<package_name>... فهرستی از نام‌های بسته‌ها را که با کاما از هم جدا شده‌اند، برای نمایه‌سازی مشخص می‌کند. در صورت ارائه، جمع‌آوری داده‌های عملکرد به این بسته‌ها محدود می‌شود. در غیر این صورت، جمع‌آوری داده‌های عملکرد برای همه بسته‌های موجود در سیستم انجام می‌شود.

برای مثال، دستور زیر یک جمع‌آوری داده‌های عملکرد سفارشی را با فاصله پروفایلینگ ۱۰ ثانیه ، حداکثر مدت زمان جمع‌آوری ۱ ساعت ، آغاز می‌کند و پروفایلینگ را به بسته‌های com.google.android.car.kitchensink و com.google.android.apps.maps محدود می‌کند.

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --start_perf --interval 10 --max_duration 3600 --filter_packages com.google.android.car.kitchensink,com.google.android.apps.maps

جلسه جمع‌آوری سفارشی را متوقف و تخلیه کنید

پس از ثبت میزان مصرف ورودی/خروجی یک برنامه یا سرویس مورد نظر، فروشندگان باید جلسه جمع‌آوری داده‌های عملکرد سفارشی را متوقف کنند تا داده‌های جمع‌آوری‌شده را تخلیه کنند. این دستور جمع‌آوری داده‌های عملکرد سفارشی را متوقف کرده و داده‌های جمع‌آوری‌شده را در /tmp/carwatchdog_dump.txt تخلیه می‌کند:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --stop-perf > /tmp/carwatchdog_custom_dump.txt

کمک دامپسی

برای دریافت کمک از dumpsys:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --help

به فرمت پروتو کپی کنید

به صورت اختیاری، داده‌های dumpsys را می‌توان با فرمت proto نیز ذخیره کرد:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default --proto

گزارش داده‌های عملکرد را درک کنید

برای کسب اطلاعات بیشتر، به نمونه گزارش داده‌های عملکرد زیر مراجعه کنید:

adb shell dumpsys android.automotive.watchdog.ICarWatchdog/default

---------------------------------
WatchdogPerfService report:
---------------------------------
Boot-time collection information:
=================================
Event polling interval: 1 second

Wake-up collection information:
===============================
Event polling interval: 1 second

User-switch collection information:
===================================
Event polling interval: 1 second

Periodic collection information:
================================
Event polling interval: 60 seconds
---------------------------------------------------------------------------
Boot-time performance report:
=================================
No collection recorded
---------------------------------------------------------------------------
Wake-up performance report:
===========================
No collection recorded
---------------------------------------------------------------------------
User-switch events performance report:
======================================
No collection recorded
---------------------------------------------------------------------------
Last N minutes performance report:
======================================
Collection duration: 10800 seconds
Number of collections: 181

Collection 0: <Mon Oct  2 18:36:06 2023 GMT>
=============================================
Total CPU time (ms): 473210
Total CPU cycles: 39553152000
Total idle CPU time (ms)/percent: 435860 / 92.11%
CPU I/O wait time (ms)/percent: 0 / 0.00%
Number of context switches: 13723415093
Number of I/O blocked processes/percent: 0 / 0.00%

Top N CPU Times:
----------------
Android User ID, Package Name, CPU Time (ms), Percentage of total CPU time, CPU Cycles
    Command, CPU Time (ms), Percentage of UID's CPU Time, CPU Cycles
10, com.google.android.carassistant, 13357, 2.82%, 16409088000
    assistant:interactor, 13360, 100.02%, 16409088000
0, system, 9097, 1.92%, 9640512000
    sensors@1.0-ser, 3790, 41.66%, 3773184000
    system_server, 2760, 30.34%, 3135936000
    com.android.car, 1150, 12.64%, 1099584000
    binder:621_4, 1000, 10.99%, 1281024000
    surfaceflinger, 230, 2.53%, 245376000
0, audioserver, 4383, 0.93%, 4597248000
    Main, 2690, 61.37%, 2980416000
    binder:916_2, 950, 21.67%, 925056000
    audioserver, 720, 16.43%, 691776000
0, root, 4357, 0.92%, 3727872000
    irq/311-iam2068, 2630, 60.36%, 2471616000
    irq/26-90b6400., 370, 8.49%, 561024000
    kworker/u16:4-bwmon_wq, 290, 6.66%, 48960000
    kworker/u16:1-memlat_wq, 270, 6.20%, 0
    ipcdaemon, 220, 5.05%, 218304000
10, com.google.android.apps.geo.automotive.adas, 1509, 0.32%, 1756416000
    adas:publishing, 1490, 98.74%, 1735680000
    as:clientparams, 10, 0.66%, 20736000
0, com.android.vending, 796, 0.17%, 765504000
    android.vending, 790, 99.25%, 765504000
0, shared:com.google.uid.shared, 581, 0.12%, 481152000
    google.android.gms, 340, 58.52%, 237312000
    .gms.persistent, 190, 32.70%, 184512000
    process.gservices, 50, 8.61%, 59328000
0, gps, 507, 0.11%, 659136000
    binder:920_2, 500, 98.62%, 659136000
10, com.android.vending, 489, 0.10%, 372288000
    android.vending, 480, 98.16%, 372288000
0, shared:android.uid.systemui, 438, 0.09%, 449856000
    android.systemui, 440, 100.46%, 449856000

Top N Storage I/O Reads:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 56123392, 81.95%, 1, 100.00%, 0, 0.00%, 0, 0.00%
0, system, 12333056, 18.01%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N Storage I/O Writes:
-------------------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, com.android.vending, 0, 0.00%, 0, 0.00%, 520192, 46.35%, 20, 47.62%
10, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 45056, 4.01%, 0, 0.00%
0, shared:com.google.uid.shared, 0, 0.00%, 0, 0.00%, 36864, 3.28%, 2, 4.76%
0, logd, 24576, 40.00%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, root, 20480, 33.33%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, system, 16384, 26.67%, 0, 0.00%, 0, 0.00%, 0, 0.00%

Top N I/O waiting UIDs:
-----------------------
Android User ID, Package Name, Number of owned tasks waiting for I/O, Percentage of owned tasks waiting for I/O
    Command, Number of I/O waiting tasks, Percentage of UID's tasks waiting for I/O
0, root, 2, 0.39%
    dp_hdcp2p2, 1, 50.00%
    hdcp_2x, 1, 50.00%

Top N major page faults:
------------------------
Android User ID, Package Name, Number of major page faults, Percentage of total major page faults
    Command, Number of major page faults, Percentage of UID's major page faults
0, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
10, com.android.vending, 104, 48.83%
    android.vending, 104, 100.00%
0, shared:com.google.uid.shared, 4, 1.88%
    .gms.persistent, 4, 100.00%
10, shared:com.google.uid.shared, 1, 0.47%
    .gms.persistent, 1, 100.00%
Number of major page faults since last collection: 213
Percentage of change in major page faults since last collection: 0.00%

هنگام گرفتن گزارش اشکال، اجرای دستور Watchdog dumpsys بدون هیچ آرگومانی یا متوقف کردن یک جلسه جمع‌آوری سفارشی، سرویس بومی Watchdog گزارش داده‌های عملکردی مشابه گزارش فوق را ارائه می‌دهد.

این گزارش شامل داده‌های جمع‌آوری‌شده در طول بوت شدن سیستم و N دقیقه آخر قبل از تولید گزارش است.

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

هر مجموعه گزارش‌شده در گزارش ممکن است شامل همه یا برخی از بخش‌های زیر باشد. آمار گزارش‌شده در هر مجموعه، دلتای آخرین مجموعه است، به جز آمارهایی که آنی هستند (برای مثال، از زمان راه‌اندازی سیستم تجمیع نشده‌اند).

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

N بسته برتر که از آخرین مجموعه، بیشترین زمان CPU را مصرف کرده‌اند:

  • هر خط سطح بالا شامل شناسه کاربر، نام بسته، زمان CPU، درصد کل زمان CPU و چرخه‌های CPU است.
  • خطوط سطح داخلی شامل دستور، زمان CPU، درصد زمان CPU مربوط به UID و چرخه‌های CPU هستند.
بالاترین تعداد خواندن ورودی/خروجی ذخیره‌سازی N

N بسته برتر که از آخرین جمع‌آوری، بیشترین داده را از دیسک خوانده‌اند.

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

بالاترین تعداد نوشتن ورودی/خروجی در ذخیره‌سازی N N بسته برتر که از آخرین جمع‌آوری، بیشترین داده‌ها را روی دیسک نوشته‌اند. هر خط شامل فیلدهایی مشابه فیلدهای N بسته برتر خوانده شده است.
برترین شناسه‌های کاربری منتظر NI/O

N بسته برتر با بیشترین وظایف منتظر ورودی/خروجی.

  • هر خط سطح بالا شامل شناسه کاربر، نام بسته‌ها، تعداد و درصد وظایف متعلق به بسته‌ای است که منتظر ورودی/خروجی است.
  • خطوط سطح داخلی شامل اطلاعات انتظار ورودی/خروجی برای فرآیندهای برتر متعلق به بسته هستند.
خطاهای اصلی صفحه N بالا بسته‌های برتر N با بیشترین خطاهای صفحه از آخرین مجموعه تاکنون.