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

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

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

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

  • در ساخت‌های userdebug یا eng،‏ Watchdog داده‌های عملکرد را یک بار در هر یک (۱) ثانیه درطول راه‌اندازی سیستم و یک بار در هر یک (۱) دقیقه پس‌از تکمیل راه‌اندازی جمع‌آوری می‌کند.
  • در نسخه‌های کاربر، Watchdog داده‌های عملکرد را هر ۲۰ ثانیه یک‌بار درطول راه‌اندازی سیستم و هر دو (۲) دقیقه یک‌بار پس‌از تکمیل راه‌اندازی جمع‌آوری می‌کند.

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

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

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

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

وقتی گزارش اشکال ضبط می‌شود، سرویس بومی 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> فاصله زمانی نمایه‌سازی را مشخص می‌کند. به‌طور پیش‌فرض، این فاصله ۳۰ ثانیه است.
  • --max_duration <seconds> حداکثر مدت زمان جلسه جمع‌آوری داده‌های عملکرد سفارشی را مشخص می‌کند. اگر جلسه به‌صورت دستی متوقف نشود، جلسه متوقف می‌شود و داده‌های جمع‌آوری‌شده پس‌از این مدت دور ریخته می‌شود. به‌طور پیش‌فرض، حداکثر مدت‌زمان ۳۰ دقیقه است.
  • --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

برای دریافت راهنمایی dumpsys:

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

روبرداری به قالب proto

به‌صورت اختیاری، داده‌های 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%

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

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

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

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

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

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

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

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

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

Top N Storage I/O Writes N بسته برتر که از آخرین مجموعه بیشترین داده را در دیسک نوشته‌اند. هر خط حاوی فیلدهایی مشابه فیلدهای «N خواندن برتر» است.
شناسه‌های کاربری برتر در انتظار ورودی/خروجی

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

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