트레이스 수집 및 보기

이 페이지에서는 Wattson과 함께 사용할 Perfetto 트레이스를 수집하고 Perfetto UI에서 결과 전력 데이터를 분석하는 방법에 관한 자세한 안내를 제공합니다.

Perfetto 트레이스를 수집하는 방법은 다양하지만 이 페이지의 방법에는 Wattson과 호환되는 트레이스를 생성하기 위한 특정 요구사항과 워크플로가 포함되어 있습니다.

최소 빌드 요구사항

Wattson이 올바르게 작동하는 데 필요한 메타데이터가 있는지 확인하려면 최신 빌드를 실행하는 기기에서 트레이스를 수집해야 합니다. CPU 및 GPU 전력 추정의 최소 빌드 버전은 기기마다 다릅니다.

기기 최소 빌드 요구사항: CPU 추정 최소 빌드 요구사항: GPU 추정
Pixel Watch 2 최소 빌드 요구사항 없음 지원되지 않음
Pixel Watch 3 25Q2 지원되지 않음
Pixel 6 최소 빌드 요구사항 없음 25Q2
Pixel 9 25Q2 지원되지 않음

명령줄에서 Perfetto 트레이스 수집

이 섹션에서는 Wattson과 함께 사용할 Perfetto 트레이스를 수집하는 워크플로의 예를 보여줍니다. 다음 단계에 나열된 모든 명령어는 Android 디버그 브리지 (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 트레이스 수집

Perfetto UI를 사용하여 트레이스를 수집하려면 Wattson의 특정 설정을 사용 설정해야 합니다. Perfetto UI에서 새 트레이스를 기록할 때 일정 세부정보CPU 주파수 및 유휴 상태 전환 버튼을 사용 설정합니다.

일정 세부정보 및 CPU 빈도와 유휴 상태 전환 버튼

그림 1. 일정 세부정보 및 CPU 주파수와 유휴 상태 전환 버튼

Pixel 9 기기의 경우 Ftrace 설정에서 devfreq 체크박스를 선택하여 기기 주파수 수집을 사용 설정합니다.

기기 게재빈도 사용 설정

그림 2. 기기 게재빈도를 사용 설정합니다.

Wattson UI 사용

Perfetto를 사용하면 시간 범위를 선택하여 레일별 통계를 확인하거나 특정 트레이스 구성을 사용 설정하여 스레드, 프로세스 또는 패키지 수준에서 전력 소비를 분석할 수 있습니다.

레일별 분석 보기

Perfetto에서 Wattson과 상호작용하려면 다음 단계를 따르세요.

  1. Perfetto에서 트레이스를 엽니다.

    기기가 Wattson에서 지원되는 경우 Wattson 트레이스가 자동으로 나열됩니다.

    Perfetto에서 Wattson 트레이스 보기

    그림 3. Perfetto에서 Wattson 트레이스를 확인합니다.

  2. Wattson을 클릭하여 가상 레일별 분석을 펼치고 확인합니다.

    • 모든 레일 그래프는 레일 간의 비율을 표시하기 위해 동일한 값으로 자동 조정됩니다.

    • 사용자가 선택하거나 표시한 지역에 대한 통계가 생성됩니다.

    • 열 이름을 클릭하여 통계 표를 정렬할 수 있습니다.

    • 예상 총계는 열 제목 바로 아래에 표시됩니다.

    철도 예상치

    그림 4. 레일 추정치입니다.

스레드, 프로세스 또는 패키지 기여도별로 트레이스 보기

스케줄러 추적을 사용 설정하고 Perfetto에서 스레드 슬라이스를 볼 수 있는 경우 스레드 수준 또는 프로세스 수준 전력 또는 에너지 기여도를 확인할 수도 있습니다.

  1. Perfetto에서 스레드 슬라이스 영역을 선택합니다.
  2. 스레드, 프로세스 또는 패키지의 세부정보를 확인합니다.

레일별 트랙 통계와 마찬가지로 열 이름을 클릭하여 해당 열을 기준으로 정렬할 수 있습니다.

스레드 수준 분석

기본 전력 추정의 최소 요구사항 외에도 스레드 수준 전력 기여도 분석을 위해 wattson.cfglinux.ftrace 섹션에 다음 구성을 추가해야 합니다.

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

스레드 수준 분류

그림 5. 대화목록 수준 분류입니다.

프로세스 수준 분류

프로세스 수준 기여 분석을 사용하려면 Perfetto 트레이스에서 수집된 데이터에 process_states가 사용 설정되어 있어야 합니다. wattson.cfg 구성 파일에서 다음 데이터 소스를 사용 설정합니다.

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

프로세스 분석

그림 6. 프로세스별 분류

패키지 수준 분류

패키지 수준 기여 분석에는 Perfetto 트레이스에서 수집된 데이터에 android.packages_list가 사용 설정되어 있어야 합니다. wattson.cfg 구성 파일에서 다음 데이터 소스를 사용 설정합니다.

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

스레드 수준 및 프로세스 수준 기여도 분석과 마찬가지로 스레드 슬라이스 범위를 선택할 때 패키지 수준 분석을 검토합니다.

스레드 수준 분류

그림 7. 대화목록 수준 분류

FAQ

다음은 왓슨에 대해 자주 묻는 질문입니다.

Wattsons가 실험실 전력 측정 하드웨어 출력과 일치해야 하나요?

대부분의 워크로드에서 Wattson 추정치는 실험실 전력 하드웨어 측정값과 일치합니다. 하지만 항상 그런 것은 아니며 Wattson의 의도도 아닙니다.

Wattson은 환경 요인 (온도), 칩 누출의 단위 간 변동 (동일한 SoC가 단위별로 누출이 다를 수 있음), 실험실 전력 측정 하드웨어 간 교정 차이로 인한 노이즈 없이 전력 개선을 검증하거나 전력 회귀를 포착하기 위한 것입니다.

Wattson은 CPU 시간이나 CPU 사이클을 살펴보는 것보다 어떻게 더 유용한가요?

CPU 시간과 사이클은 CPU 주파수와 CPU 유형(little과 mid, big의 차이) 간의 전력 또는 에너지 소비 차이를 고려하지 않습니다.

CPU 주파수가 두 배로 늘어난다고 해서 CPU 성능이 두 배로 늘어나는 것은 아닙니다.

Wattson은 하드웨어 솔루션과 비교했을 때 정확한가요?

Google에서는 여러 팀에서 제공한 다양한 사용 사례에서 Wattson을 실험실 전력 측정 하드웨어와 비교했습니다. Wattson의 평균 오차는 1% 포인트이고 표준 편차는 1.5% 포인트입니다. 이 수준의 상관관계는 10초 동안 실행되는 테스트부터 4시간 동안 실행되는 테스트까지 유지됩니다. 따라서 시간의 영향을 받는 오류 누적이나 오류 마스킹이 없습니다.

Pixel 6 커널 구성 실험

다음은 Pixel 6를 사용한 일반적인 Wattson 분석의 기준 실험입니다.

Wattson.cfg

이 섹션에서는 Perfetto에서 Wattson을 사용 설정하는 일반적인 구성을 제공합니다.

  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"
          }
      }
  }