รวบรวมและดูการติดตาม

หน้านี้มีวิธีการโดยละเอียดสำหรับการรวบรวม Perfetto traces เพื่อใช้กับ Wattson และสำหรับการ วิเคราะห์ข้อมูลพลังงานที่ได้ใน UI ของ Perfetto

แม้ว่าจะมีหลายวิธีในการรวบรวมการติดตาม Perfetto แต่วิธีการในหน้านี้มีข้อกำหนดและเวิร์กโฟลว์ที่เฉพาะเจาะจงสำหรับ การสร้างการติดตามที่เข้ากันได้กับ Wattson

ข้อกำหนดขั้นต่ำของบิลด์

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

อุปกรณ์ ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ CPU ข้อกำหนดขั้นต่ำของบิลด์: การประมาณ GPU
Pixel Watch 2 ไม่มีข้อกำหนดขั้นต่ำในการสร้าง ไม่รองรับ
Pixel Watch 3 25Q2 ไม่รองรับ
Pixel 6 ไม่มีข้อกำหนดขั้นต่ำในการสร้าง 25Q2
Pixel 9 25Q2 ไม่รองรับ

รวบรวมการติดตาม Perfetto จากบรรทัดคำสั่ง

ส่วนนี้จะแสดงตัวอย่างเวิร์กโฟลว์สำหรับการรวบรวม ร่องรอย Perfetto เพื่อใช้กับ Wattson คำสั่งทั้งหมดที่แสดงในขั้นตอนต่อไปนี้ มีไว้เพื่อออกคำสั่งจากโฮสต์ Android Debug Bridge (adb)

  1. กำหนดค่าและเริ่มการติดตามโดยสร้างไฟล์การกำหนดค่า Perfetto ในอุปกรณ์ ดูตัวอย่างการกำหนดค่าได้ที่ wattson.cfg ในโครงสร้างแหล่งที่มา

    การกำหนดค่าต้องมีเหตุการณ์การติดตามต่อไปนี้

    # Polls CPU freq/idle state at the start of trace
    data_sources: {
       config {
          name: "linux.sys_stats"
          sys_stats_config {
             # Large period so polling doesn't happen continuously
             # Intent is just to poll once upfront
             cpufreq_period_ms: 100000000
             cpuidle_period_ms: 100000000
          }
       }
    }
    data_sources: {
       config {
          name: "linux.ftrace"
          ftrace_config {
             ftrace_events: "devfreq/devfreq_frequency"
             ftrace_events: "cpuhp/cpuhp_enter"
             ftrace_events: "cpuhp/cpuhp_exit"
             ftrace_events: "cpuhp/cpuhp_multi_enter"
             ftrace_events: "power/cpu_frequency"
             ftrace_events: "power/cpu_idle"
             ftrace_events: "power/suspend_resume"
          }
       }
    }
    
  2. หากต้องการเปิดใช้การประมาณการใช้พลังงานของแคช L3 ให้เปิดใช้เหตุการณ์ fttrace/print

    adb shell perfetto --txt -c /data/misc/perfetto-configs/wattson.cfg --background-wait -o /data/misc/perfetto-traces/trace
    
    # Optional
    adb shell simpleperf stat -a -e arm_dsu_0/l3d_cache/,arm_dsu_0/bus_access/ --interval 10
    
  3. (ไม่บังคับ) ตั้งค่าจุดเริ่มต้นของหน้าต่าง Wattson ซึ่งเป็นเครื่องหมายที่ฝังอยู่ใน การติดตาม Perfetto ซึ่งระบุจุดเริ่มต้นของการบันทึก เครื่องหมายนี้จะเพิ่ม ความแม่นยำในการวัดของ Wattson

    # Optional
    adb shell "echo 'I|0|wattson_start' >/sys/kernel/tracing/trace_marker"
    
  4. เรียกใช้เวิร์กโหลดที่สนใจ

  5. (ไม่บังคับ) เปิดใช้ftrace/printเหตุการณ์การติดตามเพื่อตั้งค่า จุดสิ้นสุดของช่วงเวลาของ Wattson:

    # Optional
    adb shell "echo 'I|0|wattson_stop' >/sys/kernel/tracing/trace_marker"
    
  6. ล้างบัฟเฟอร์การติดตามและดึงไฟล์การติดตาม Perfetto โดยทำดังนี้

    adb shell killall -w perfetto
    adb pull /data/misc/perfetto-traces/trace my_perfetto_trace.pb
    

รวบรวมการติดตาม Perfetto โดยใช้ UI ของ Perfetto

หากต้องการรวบรวมการติดตามโดยใช้ UI ของ Perfetto คุณต้องเปิดใช้การตั้งค่าที่เฉพาะเจาะจงสำหรับ Wattson เมื่อบันทึกการติดตามใหม่ใน UI ของ Perfetto ให้เปิดใช้ปุ่มสลับรายละเอียดการจัดกำหนดการและความถี่ของ CPU และสถานะว่าง

รายละเอียดการกำหนดเวลาและการสลับความถี่ CPU และสถานะว่าง

รูปที่ 1 รายละเอียดการกำหนดเวลาและสวิตช์ความถี่ CPU และสถานะว่าง

สำหรับอุปกรณ์ Pixel 9 ให้เลือกช่องทำเครื่องหมาย devfreq ในการตั้งค่า Ftrace เพื่อเปิดใช้การรวบรวมความถี่ของอุปกรณ์

เปิดใช้ความถี่ของอุปกรณ์

รูปที่ 2 เปิดใช้ความถี่ของอุปกรณ์

ใช้ UI ของ Wattson

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

ดูรายละเอียดต่อราง

วิธีโต้ตอบกับ Wattson ใน Perfetto

  1. เปิดการติดตามใน Perfetto

    หากอุปกรณ์ของคุณรองรับ Wattson ระบบจะแสดงรายการการติดตามของ Wattson โดยอัตโนมัติ

    ดูการติดตามของ Wattson ใน Perfetto

    รูปที่ 3 ดูการติดตามของ Wattson ใน Perfetto

  2. คลิก Wattson เพื่อขยายและดูรายละเอียดต่อรางเสมือน

    • กราฟรางรถไฟทั้งหมดจะปรับขนาดเป็นค่าเดียวกันโดยอัตโนมัติเพื่อแสดงสัดส่วนระหว่างรางรถไฟ

    • ระบบจะสร้างสถิติสำหรับภูมิภาคที่ผู้ใช้เลือก (หรือทำเครื่องหมาย)

    • คุณจัดเรียงตารางสถิติได้โดยคลิกชื่อคอลัมน์ใดก็ได้

    • ยอดรวมโดยประมาณจะแสดงอยู่ใต้ชื่อคอลัมน์โดยตรง

    ค่าประมาณการเดินทางด้วยรถไฟ

    รูปที่ 4 การประมาณการรถไฟ

ดูการติดตามต่อเธรด กระบวนการ หรือการระบุแหล่งที่มาของแพ็กเกจ

หากเปิดใช้การติดตามตัวจัดกำหนดการและเห็นชิ้นส่วนของเธรดใน Perfetto คุณจะได้รับการระบุแหล่งที่มาของพลังงานหรือการใช้พลังงานระดับเธรดหรือระดับกระบวนการด้วย

  1. ใน Perfetto ให้เลือกภูมิภาคของสไลซ์เธรด
  2. ดูรายละเอียดของเธรด กระบวนการ หรือแพ็กเกจ

เช่นเดียวกับสถิติการติดตามต่อเส้นทาง คุณสามารถคลิกชื่อคอลัมน์ใดก็ได้ เพื่อจัดเรียงตามคอลัมน์นั้น

วิเคราะห์รายละเอียดระดับเธรด

นอกเหนือจากข้อกำหนดขั้นต่ำ สำหรับการประมาณการใช้พลังงานขั้นพื้นฐานแล้ว คุณต้องเพิ่มการกำหนดค่าต่อไปนี้ลงใน ส่วน linux.ftrace ใน wattson.cfg เพื่อการระบุแหล่งที่มาของการใช้พลังงานระดับต่อเธรด

data_sources: {
    config {
        name: "linux.ftrace"
        ftrace_config {
            ftrace_events: "sched/sched_switch"
        }
    }
}

รายละเอียดระดับชุดข้อความ

รูปที่ 5 รายละเอียดระดับชุดข้อความ

รายละเอียดระดับกระบวนการ

การระบุแหล่งที่มาที่ระดับกระบวนการต้องprocess_statesเปิดใช้ ในข้อมูลที่รวบรวมใน Perfetto Trace เปิดใช้แหล่งข้อมูลต่อไปนี้ ในไฟล์การกำหนดค่า wattson.cfg

data_sources: {
    config {
        name: "linux.process_stats"
        target_buffer: 1
        process_stats_config {
            scan_all_processes_on_start: true
        }
    }
}

ตามการแบ่งกระบวนการ

รูปที่ 6 โดยการแบ่งกระบวนการ

รายละเอียดระดับแพ็กเกจ

การระบุแหล่งที่มาระดับแพ็กเกจต้องandroid.packages_listเปิดใช้ในข้อมูล ที่รวบรวมในการติดตาม Perfetto เปิดใช้แหล่งข้อมูลต่อไปนี้ในไฟล์การกำหนดค่า wattson.cfg

data_sources {
  config {
    name: "android.packages_list"
    target_buffer: 1
  }
}

เช่นเดียวกับการระบุแหล่งที่มาระดับเธรดและระดับกระบวนการ เมื่อเลือกช่วงของสไลซ์เธรด ให้ตรวจสอบรายละเอียดระดับแพ็กเกจ

รายละเอียดระดับเธรด

รูปที่ 7 รายละเอียดระดับเธรด

คำถามที่พบบ่อย

คำถามที่พบบ่อยเกี่ยวกับวัตสันมีดังนี้

Wattson คาดว่าจะตรงกับเอาต์พุตฮาร์ดแวร์การวัดกำลังในห้องทดลองหรือไม่

สำหรับภาระงานส่วนใหญ่ ค่าประมาณของ Wattson จะตรงกับการวัดค่าฮาร์ดแวร์ด้านพลังงานในห้องทดลอง อย่างไรก็ตาม ไม่ได้เป็นเช่นนี้เสมอไปและไม่ได้เป็นเจตนาของ Wattson

Wattson มีไว้เพื่อตรวจสอบการปรับปรุงด้านพลังงานหรือตรวจจับการถดถอยของพลังงาน โดยไม่มีสัญญาณรบกวนจากปัจจัยด้านสิ่งแวดล้อม (อุณหภูมิ) ความแตกต่างระหว่างหน่วย ในการรั่วไหลของชิป (SoC เดียวกันอาจมีการรั่วไหลที่แตกต่างกันในแต่ละหน่วย ) หรือความแตกต่างในการปรับเทียบระหว่างฮาร์ดแวร์การวัดพลังงานในห้องทดลอง

Wattson มีประโยชน์มากกว่าการดูเวลา CPU หรือรอบ CPU อย่างไร

เวลาและรอบ CPU ไม่ได้คำนึงถึงความแตกต่างของกำลังหรือพลังงาน ที่ใช้ระหว่างความถี่และประเภท CPU (เล็ก กลาง ใหญ่)

ความถี่ CPU ที่เพิ่มขึ้นเป็น 2 เท่าไม่ได้หมายความว่ากำลัง CPU หรือประสิทธิภาพจะเพิ่มขึ้นเป็น 2 เท่าเสมอไป

Wattson มีความแม่นยำเมื่อเทียบกับโซลูชันฮาร์ดแวร์หรือไม่

เราได้เปรียบเทียบ Wattson กับฮาร์ดแวร์วัดกำลังไฟฟ้าในห้องทดลองในกรณีการใช้งานหลายกรณีที่ทีมต่างๆ จัดหาให้ ข้อผิดพลาดโดยเฉลี่ยใน Wattson คือ 1% และค่าเบี่ยงเบนมาตรฐานคือ 1.5% ระดับความสัมพันธ์นี้จะยังคงอยู่ ในการทดสอบที่ใช้เวลา 10 วินาทีไปจนถึงการทดสอบที่ใช้เวลา 4 ชั่วโมง จึงไม่มีการเพิ่มข้อผิดพลาดหรือการปิดบังข้อผิดพลาดที่เกิดจากเวลา

การทดลองการกำหนดค่าเคอร์เนลของ Pixel 6

ต่อไปนี้คือการทดสอบพื้นฐานของการแยกย่อย Wattson ทั่วไปโดยใช้ Pixel 6

Wattson.cfg

ส่วนนี้จะแสดงการกำหนดค่าทั่วไปสำหรับการเปิดใช้ Wattson ใน Perfetto

  write_into_file: true
  flush_period_ms: 30000
  file_write_period_ms: 30000

  buffers: {
      size_kb: 2048
      fill_policy: RING_BUFFER
  }
  buffers: {
      size_kb: 200000
      fill_policy: RING_BUFFER
  }

  # Needed for process level power attribution
  data_sources: {
      config {
          name: "linux.process_stats"
          target_buffer: 0
          process_stats_config {
              scan_all_processes_on_start: true
          }
      }
  }

  # Needed for package level power attribution
  data_sources: {
      config {
          name: "android.packages_list"
          target_buffer: 0
      }
  }

  # Needed for determining CPU freq/idle initial state
  data_sources: {
      config {
          name: "linux.sys_stats"
          sys_stats_config {
              cpufreq_period_ms: 100000000
              cpuidle_period_ms: 100000000
          }
      }
  }

  # Needed for estimating power and thread level power attribution
  data_sources: {
      config {
          name: "linux.ftrace"
          target_buffer: 1
          ftrace_config {
              # Minimum data sources for estimating power
              ftrace_events: "power/cpu_frequency"
              ftrace_events: "power/cpu_idle"
              ftrace_events: "power/suspend_resume"
              ftrace_events: "cpuhp/cpuhp_enter"
              ftrace_events: "cpuhp/cpuhp_exit"
              ftrace_events: "cpuhp/cpuhp_multi_enter"
              ftrace_events: "devfreq/devfreq_frequency"

              # Needed for Wattson start/stop markers
              ftrace_events: "ftrace/print"

              # Needed for thread level power attribution
              ftrace_events: "sched/sched_switch"

              # Needed for process level power attribution
              ftrace_events: "sched/sched_process_free"
              ftrace_events: "task/task_newtask"
              ftrace_events: "task/task_rename"
          }
      }
  }