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

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

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

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

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

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

รวบรวมการย้ายข้อมูล 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 เปิดใช้ความถี่ของอุปกรณ์

ดูรายละเอียดการย้ายข้อมูลต่อราง

ด้วย 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 เปิดใช้แหล่งข้อมูลต่อไปนี้ ในไฟล์การกำหนดค่า 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 รายละเอียดระดับเธรด

การประมาณพลังงานของ GPU

การประมาณพลังงานของ GPU รองรับใน Pixel 6, 6 Pro และ 6a หากต้องการเปิดใช้การประมาณพลังงานของ GPU ให้เปิดใช้แหล่งข้อมูลต่อไปนี้ในไฟล์การกำหนดค่าของคุณ wattson.cfg

data_sources: {
  config {
    name: "linux.ftrace"
    ftrace_config {
      ftrace_events: "mali/gpu_power_state"
      ftrace_events: "power/gpu_frequency"

      # [Optional] Enable GPU Work Period (not used by Wattson, but useful for debugging)
      ftrace_events: "power/gpu_work_period"
    }
  }
}

สำหรับรายการที่เลือก ค่าประมาณพลังงานของ GPU ของ Wattson จะปรากฏใน UI ของ Perfetto ในแท็บค่าประมาณของ Wattson

การประมาณกำลัง GPU

รูปที่ 8 การประมาณพลังงานของ GPU

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

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

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

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

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

Wattson มีประโยชน์มากกว่าการดูเวลา CPU หรือรอบ 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"
          }
      }
  }