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

หน้านี้มีวิธีการโดยละเอียดสำหรับการรวบรวมร่องรอย 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 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 รายละเอียดระดับเธรด

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

Pixel 6, 6 Pro และ 6a รองรับการประมาณกำลัง GPU หากต้องการเปิดใช้การประมาณกำลัง 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 มีไว้เพื่อตรวจสอบการปรับปรุงด้านพลังงานหรือตรวจจับการถดถอยของพลังงาน โดยไม่มีสัญญาณรบกวนจากปัจจัยด้านสิ่งแวดล้อม (อุณหภูมิ) ความแตกต่างระหว่างยูนิต ในการรั่วไหลของชิป (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"
          }
      }
  }