TL;DR

  • Crap은 Linux의 perf_event_open과 macOS의 kperf를 사용해 여러 명령어의 성능을 비교하는 명령줄 도구임.
  • 컬러 터미널 인터페이스에서 실행 시간과 최대 메모리 사용량, 하드웨어 성능 카운터를 비교함.
  • 측정 시간, 색상 출력 방식, 셸 실행 여부, 워밍업 횟수와 실패 허용 여부를 설정할 수 있음.
  • Linux와 macOS에서는 실행 시간과 최대 상주 메모리 사용량을 측정하며, Windows에서는 두 항목만 지원함.
  • Hyperfine보다 새롭고 설정과 다듬어진 정도는 적지만, 최대 메모리 사용량과 추가 하드웨어 카운터를 제공함.

개요

  • Crap은 Linux의 perf_event_open과 macOS의 kperf 기능을 사용해 여러 명령어의 성능을 비교하는 도구임.
  • 컬러 터미널 사용자 인터페이스(TUI)를 제공함.

사용법

  • 사용 형식은 crap [options] <command1> ... <commandN>이며, 지정한 명령어들의 성능을 비교함.
  • -d, --duration <ms>는 각 명령어를 반복 샘플링하는 시간을 설정하며 기본값은 5000밀리초임.
  • --color <when>은 색상 출력 모드를 설정하며 기본값은 auto임. 사용 가능한 값은 auto, never, ansi임.
  • -s, --shell <shell>은 명령어를 실행할 셸을 지정하며 기본값은 없음임.
  • -w, --warmup <count>는 각 명령어 실행 전 워밍업 횟수를 지정하며 기본값은 0임.
  • -f, --allow-failures는 종료 코드가 0이 아닌 경우에도 성능 비교를 허용하며 기본값은 false임.

지원 플랫폼 및 카운터

  • wall_time: Linux, macOS, Windows에서 지원됨.
  • peak_rss: Linux, macOS, Windows에서 지원됨.
  • cpu_cycles: Linux에서 지원되며, macOS에서는 sudo가 필요하고 Windows에서는 지원되지 않음.
  • instructions: Linux에서 지원되며, macOS에서는 sudo가 필요하고 Windows에서는 지원되지 않음.
  • cache_references: Linux에서만 지원됨.
  • cache_misses: Linux에서 지원되며, macOS에서는 sudo가 필요하고 Windows에서는 지원되지 않음.
  • branch_misses: Linux에서 지원되며, macOS에서는 sudo가 필요하고 Windows에서는 지원되지 않음.

소스 빌드 및 설치

  • Zig 0.16.0으로 테스트됨.
  • 설치 경로를 ~/.local로 지정하면 ~/.local/bin에 설치할 수 있음.
  • 최적화 수준을 ReleaseSafe로 설정해 설치 경로에 빌드하는 명령은 zig build -Doptimize=ReleaseSafe -p <install_path>임.

Hyperfine과 비교

  • Crap은 아직 새 프로젝트인 반면, Hyperfine은 성숙한 프로젝트로 설정 옵션이 더 많고 전반적으로 더 다듬어져 있음.
  • Crap은 최대 메모리 사용량과 그 밖의 하드웨어 카운터 5개도 보고함.
  • 기본 설정에서 Crap은 명령어를 셸에서 실행하지 않음. -s/--shell zsh를 지정하면 셸에서 실행함.
  • 셸을 실행하지 않으면 측정 데이터에 셸 생성 과정의 잡음이 포함되지 않음.
  • 대신 명령어 안의 문자열을 지원하지 않음.
  • Hyperfine은 기본적으로 셸에서 명령어를 실행하며, 명령줄 옵션으로 셸 실행을 끌 수 있음.
  • Crap은 첫 번째 명령어를 기준으로 삼고 나머지 명령어를 이에 상대적으로 비교함. 사용자는 차이값 색상이 나타내는 의미를 선택할 수 있음.
  • Hyperfine은 기본적으로 실제 경과 시간이 가장 짧은 명령어를 먼저 표시하며, 명령줄 옵션으로 다른 기준 명령어를 명시할 수 있음.
  • macOS에서 일부 추가 성능 카운터를 사용하려면 sudo 권한이 필요함.

크레딧

  • andrewrk: Poop의 원작자이며, 플러시를 옹호한 것으로도 알려져 있음.
  • tensorush: macOS 지원을 가능하게 한 원본 PR의 기여자임.