kosslab-kr / linux-perf

:rocket: perf contribution (mirrored from git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git)
Other
16 stars 8 forks source link

[하남봉] KOSS HACKATHON 2016 개인 최종 보고서 #164

Open NB3025 opened 8 years ago

NB3025 commented 8 years ago

Goal

2016 Koss Hackathon 을 진행하며 많은 것을 배웠습니다. 먼저 오픈소스를 관리하기 쉽고 협업에 많은 도움이 되는 Github 저장소를 다루는 것에 대해 배우게 되었다. Github의 사용법을 학습하고 Hackathon 프로젝트 뿐만 아니라 개인적으로 진행하던 프로젝트도 Github로 관리할 수 있게 되었다. 또한 linux kernel 내부에 구현되어있는 perf 라는 유용한 툴에 대해 알게 되었으며 소스를 살펴보며 어떠한 흐름으로 perf가 실행되는지 학습하였다. perf의 기본적인 동작들을 알아보며 아이디어를 생각하게 되었고 프로그램의 성능을 단순히 출력해주는 기존의 것에 비교 성능을 출력 할 수 있는 아이디어도 추가하여 구현을 시도해보았다. 구현의 완성은 하지 못하였지만 좋은 경험이 되었다. 마지막으로 perf를 사용하는데 있어 Tip을 만들어 메인테이너에게 PATCH Mail를 보내고 답변을 받기도 하였다. 오픈소스를 다루는데 있어 가장 중요한 Github의 처음부터 고급수준까지 학습하였다는 것에 가장 큰 의미를 두고 싶다. 혼자 시도하였다면 막막하고 무엇을 해야 할지 몰랐을 것이다. 오픈소스의 진입장벽을 부수는데 많은 도움을 주신 멘토님과 함께 협동하여 좋은 결과를 만들어낸 팀원들에게 감사하다.

매일 미션 진행

git-training

진행 중 프로젝트를 Github에 올려 관리 (NB3025/openflow)

  1. NB3025/openflow git_openflow
  2. Branch git_openflow2
  3. Commit git_openflow3

    Perf 소스 리딩

    tools/perf/perf.c

main

tools/perf/builtin-stat.c

perf_session__new()
perf_session__process_events()
  __perf_session__process_events()
    perf_session__process_event()
      perf_session__process_user_event()
        case PERF_RECORD_STAT:
          return tool->stat_round()
static struct perf_stat perf_stat = {
    .tool = {
        .attr       = perf_event__process_attr,
        .event_update   = perf_event__process_event_update,
        .thread_map = process_thread_map_event,
        .cpu_map    = process_cpu_map_event,
        .stat_config    = process_stat_config_event,
        .stat       = perf_event__process_stat_event,
        .stat_round = process_stat_round_event,
    },
    .aggr_mode = AGGR_UNSET,
};

tools/perf/builtin-diff.c

struct data__file {
    struct perf_session *session;
    struct perf_data_file   file;
    int          idx;
    struct hists        *hists;
    struct diff_hpp_fmt  fmt[PERF_HPP_DIFF__MAX_INDEX];
};

활동결과

제안 아이디어

perf stat 의 결과를 비교하고 싶을 때 subcommand diff를 추가하여 두 개의 결과를 비교하기 쉽도록 출력

perf_diff1

-perf stat diff 출력 내용

perf_diff2

PATCH