รวบรวมข้อมูลประสิทธิภาพ

บริการดั้งเดิมของ Watchdog จะบันทึกข้อมูลประสิทธิภาพ I/O ตั้งแต่เริ่มต้นในระหว่างการบูตระบบ บริการเนทีฟทิ้งข้อมูลประสิทธิภาพที่รวบรวมไว้ในรายงานข้อบกพร่อง ผู้จำหน่ายสามารถสอบถามบริการเนทิฟผ่าน dumpsys เพื่อดัมพ์ข้อมูลที่รวบรวมไว้หรือเริ่มเซสชันการรวบรวมแบบกำหนดเองสำหรับการดีบัก

ความถี่ในการรวบรวมข้อมูล

ความถี่ของการรวบรวมข้อมูลประสิทธิภาพจะแตกต่างกันไปตามประเภทบิลด์

  • บน userdebug หรือ eng build Watchdog จะรวบรวมข้อมูลประสิทธิภาพทุกๆ หนึ่ง (1) วินาทีระหว่างการบูตระบบ และทุกๆ หนึ่ง (1) นาทีหลังการบูตเสร็จสมบูรณ์
  • ในการสร้างผู้ใช้ Watchdog จะรวบรวมข้อมูลประสิทธิภาพทุกๆ 20 วินาทีระหว่างการบูตระบบ และทุกๆ สอง (2) นาทีหลังจากการบูตเสร็จสิ้น

ดัมพ์ข้อมูลประสิทธิภาพ

เมื่อมีการบันทึกรายงานจุดบกพร่อง บริการดั้งเดิมของ Watchdog จะทิ้งข้อมูลประสิทธิภาพที่รวบรวมไว้ในรายงานจุดบกพร่อง ผู้จำหน่ายสามารถสอบถามบริการเนทิฟผ่านคำสั่ง dumpsys ด้านล่างเพื่อดัมพ์ข้อมูลประสิทธิภาพที่รวบรวมไว้ ดูส่วนการ ทำความเข้าใจรายงานข้อมูลประสิทธิภาพ สำหรับรายละเอียดเกี่ยวกับรายงาน

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

รวบรวมข้อมูลประสิทธิภาพสำหรับการดีบัก

ผู้จำหน่ายสามารถใช้บริการดั้งเดิมของ Watchdog เพื่อรวบรวมข้อมูลประสิทธิภาพแบบกำหนดเองเพื่อวัตถุประสงค์ในการแก้ไขจุดบกพร่อง ตัวอย่างเช่น เพื่อทำความเข้าใจการใช้งาน I/O ของแอปหรือบริการ ผู้จำหน่ายสามารถดำเนินการรวบรวมข้อมูลประสิทธิภาพแบบกำหนดเองที่สร้างโปรไฟล์การใช้งาน I/O ของรายการแพ็คเกจเฉพาะหรือทั้งระบบ

เริ่มเซสชันคอลเลกชันแบบกำหนดเอง

ด้านล่างนี้คือคำสั่งเพื่อเริ่มเซสชันการรวบรวมข้อมูลประสิทธิภาพแบบกำหนดเอง:

$ 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>,... ระบุรายการชื่อแพ็กเกจที่คั่นด้วยเครื่องหมายจุลภาคให้กับโปรไฟล์ เมื่อระบุไว้ การรวบรวมข้อมูลประสิทธิภาพจะจำกัดอยู่ที่แพ็คเกจเหล่านี้ มิฉะนั้น การรวบรวมข้อมูลประสิทธิภาพจะถูกดำเนินการสำหรับแพ็คเกจทั้งหมดในระบบ

ตัวอย่างเช่น คำสั่งด้านล่างเริ่มการรวบรวมข้อมูลประสิทธิภาพที่กำหนดเองโดยมีช่วงเวลาการทำโปรไฟล์ 10 seconds ระยะเวลาการรวบรวมสูงสุด 1 hour และจำกัดการทำโปรไฟล์ไว้ที่ com.google.android.car.kitchensink และ com.google.android.apps.maps แพ็คเกจ 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

หยุดและดัมพ์เซสชันคอลเลกชันแบบกำหนดเอง

หลังจากบันทึกการใช้งาน I/O ของแอปหรือบริการที่สนใจ ผู้จำหน่ายควรหยุดเซสชันการรวบรวมข้อมูลประสิทธิภาพที่กำหนดเองเพื่อดัมพ์ข้อมูลที่รวบรวม

คำสั่งต่อไปนี้หยุดการรวบรวมข้อมูลประสิทธิภาพที่กำหนดเอง และดัมพ์ข้อมูลที่รวบรวมไปที่ /tmp/carwatchdog_dump.txt :

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

ดัมซิสช่วยด้วย

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

ทำความเข้าใจกับรายงานข้อมูลประสิทธิภาพ

ด้านล่างนี้คือตัวอย่างรายงานข้อมูลประสิทธิภาพ:

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

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

Periodic collection information:
=========================
Event interval: 60 seconds
--------------------------------
Boot-time I/O performance report:
============================
Collection duration: 1637609138 seconds
Number of collections: 12

Collection 0: <Fri Jan  7 19:53:53 2022 GMT>
===================================
CPU I/O wait time/percent: 18 / 0.63%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N 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 Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, root, 53248, 100.00%, 1, 100.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.59%
        kworker/7:2+events, 1, 50.00%
        kworker/4:2+events, 1, 50.00%
0, system, 2, 7.14%
        ais_server, 2, 100.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, system, 48, 53.33%
        ais_server, 13, 27.08%
        audiod, 10, 20.83%
0, root, 41, 45.56%
        init, 39, 95.12%
        ueventd, 1, 2.44%
0, media, 1, 1.11%
        init.qti.media., 1, 100.00%
Number of major page faults since last collection: 90
Percentage of change in major page faults since last collection: 0.00%

Collection 1: <Fri Jan  7 19:53:54 2022 GMT>
===================================
 … Collection data …

Collection 2: <Fri Jan  7 19:53:55 2022 GMT>
===================================
 … Collection data …
 … Repeated collection data until boot-complete …

-----------------------------------------
Last N minutes I/O performance report:
================================
Collection duration: 10797 seconds
Number of collections: 181

Collection 0: <Tue Jan 11 19:43:05 2022 GMT>
====================================
CPU I/O wait time/percent: 18 / 0.04%
Number of I/O blocked processes/percent: 0 / 0.00%

Top N Writes:
-------------
Android User ID, Package Name, Foreground Bytes, Foreground Bytes %, Foreground Fsync, Foreground Fsync %, Background Bytes, Background Bytes %, Background Fsync, Background Fsync %
0, system, 33697792, 92.41%, 0, 0.00%, 0, 0.00%, 0, 0.00%
0, gps, 2420736, 6.64%, 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, 1, 0.19%
        crtc_commit:244, 1, 100.00%

เมื่อจับรายงานจุดบกพร่อง การรันคำสั่ง Watchdog dumpsys โดยไม่มีข้อโต้แย้งใดๆ หรือหยุดเซสชันการรวบรวมแบบกำหนดเอง บริการดั้งเดิมของ Watchdog จะทิ้งรายงานข้อมูลประสิทธิภาพที่คล้ายกับรายงานด้านบน

รายงานประกอบด้วยข้อมูลที่รวบรวมระหว่างการบูตระบบและ N นาทีสุดท้ายก่อนการสร้างรายงาน

  • Boot-time collection information ให้ข้อมูลเกี่ยวกับเซสชันการรวบรวมข้อมูลประสิทธิภาพเวลาบูต
  • Periodic collection information ให้ข้อมูลเกี่ยวกับเซสชันการรวบรวมประสิทธิภาพเป็นระยะที่เริ่มต้นหลังการบูตเสร็จสมบูรณ์
  • Boot-time I/O performance report ประกอบด้วยข้อมูลประสิทธิภาพที่รวบรวมระหว่างการบูตระบบ ข้อมูลนี้จะคงอยู่ในหน่วยความจำจนกระทั่งระบบปิด ดังนั้นข้อมูลจึงถูกทิ้งลงในรายงานทั้งหมด
  • Last N minutes I/O performance report ประกอบด้วยข้อมูลประสิทธิภาพที่รวบรวม (ตามเซสชันการรวบรวมตามระยะเวลา) ในช่วง N นาทีสุดท้ายก่อนการสร้างรายงาน
  • Collection duration ระยะเวลารวมของการรวบรวมข้อมูลประสิทธิภาพ
  • Number of collections จำนวนคอลเลกชันทั้งหมดที่รายงานในรายงานเดียว

แต่ละคอลเลกชันที่รายงานในรายงานอาจประกอบด้วยส่วนด้านล่างทั้งหมดหรือบางส่วน สถิติที่รายงานในแต่ละคอลเลกชั่นเป็นเดลต้าตั้งแต่คอลเลกชั่นล่าสุด ยกเว้นสถิติที่เกิดขึ้นทันที (เช่น ไม่ถูกรวมตั้งแต่การบูตระบบ)

  • CPU I/O wait time/percent เวลา CPU สัมบูรณ์และเปอร์เซ็นต์ของเวลา CPU ทั้งหมดที่ใช้ในการสลับบริบทหรือการรอเนื่องจากการดำเนินการ I/O ตั้งแต่การรวบรวมครั้งล่าสุด
  • Number of I/O blocked processes/percent จำนวนกระบวนการทั้งหมดที่ถูกบล็อกเพื่อรอ I/O และเปอร์เซ็นต์ของกระบวนการที่ถูกบล็อกเพื่อรอ I/O นับตั้งแต่การรวบรวมครั้งล่าสุด
  • Top N Reads แพ็คเกจ N อันดับต้น ๆ ที่อ่านข้อมูลส่วนใหญ่จากดิสก์นับตั้งแต่การรวบรวมครั้งล่าสุด
    • แต่ละบรรทัดประกอบด้วย ID ผู้ใช้ ชื่อแพ็กเกจ จำนวนไบต์ทั้งหมดที่อ่านในโหมดเบื้องหน้าเทียบกับโหมดเบื้องหลัง เปอร์เซ็นต์ของไบต์ในโหมดเบื้องหน้าทั้งหมดเทียบกับโหมดเบื้องหลังที่อ่านในระบบ จำนวนรวมของการเรียก fsync ที่เกิดขึ้นในโหมดเบื้องหน้าเทียบกับโหมดเบื้องหลัง และเปอร์เซ็นต์ของการเรียก fsync ในโหมดเบื้องหน้าทั้งหมด เทียบกับการเรียก fsync ในโหมดพื้นหลังในระบบ
  • Top N Writes แพ็คเกจ N อันดับต้น ๆ ที่เขียนข้อมูลส่วนใหญ่ลงดิสก์ตั้งแต่คอลเลกชันล่าสุด
    • แต่ละบรรทัดประกอบด้วยช่องที่คล้ายกับช่อง Top N Reads
  • Top NI/O waiting UIDs แพ็กเกจ N อันดับสูงสุดที่มีงานรอ I/O มากที่สุด
    • แต่ละบรรทัดระดับบนสุดประกอบด้วย ID ผู้ใช้ ชื่อแพ็กเกจ จำนวน และเปอร์เซ็นต์ของงานที่เป็นของแพ็คเกจที่กำลังรอ I/O
    • บรรทัดระดับภายในประกอบด้วยข้อมูลการรอ I/O สำหรับกระบวนการระดับบนสุดที่เป็นของแพ็คเกจ
  • Top N major page faults แพ็กเกจ N อันดับสูงสุดที่มีข้อบกพร่องของเพจหลักที่สุดนับตั้งแต่คอลเลกชันครั้งล่าสุด
    • แต่ละบรรทัดระดับบนสุดประกอบด้วย ID ผู้ใช้ ชื่อแพ็คเกจ จำนวน และเปอร์เซ็นต์ของข้อบกพร่องของเพจหลักที่เกิดจากแพ็คเกจ
    • บรรทัดระดับภายในประกอบด้วยข้อมูลข้อบกพร่องของเพจหลักสำหรับกระบวนการระดับบนสุดที่เป็นของแพ็คเกจ
  • Number of major page faults since last collection
  • Percentage of change in major page faults since last collection