핀(컴퓨터 프로그램)

Pin (computer program)
개발자인텔
안정적 해제
3.18 / 2021년 2월 10일(2021-02-10)
운영 체제Linux, Windows, MacOS
플랫폼IA-32, x86-64, Intel Xeon Phi
유형계측 프레임워크, 프로파일러
면허증독점적, Pin은 Intel® 소프트웨어 개발 제품에 대한 최종 사용자 라이센스 계약, 섹션 2.2 비상업적 라이센스 유형에 따라 비상업적 사용을 위해 무료로 제공된다.
웹사이트www.intel.com/software/pintool

은 분석 도구를 만드는 플랫폼이다.핀 도구는 계측, 분석 및 콜백 루틴으로 구성된다.계측 루틴은 아직 컴파일되지 않은 코드가 실행되려고 할 때 호출되며, 분석 루틴의 삽입을 활성화한다.분석 루틴은 관련 코드가 실행될 때 호출된다.콜백 루틴은 특정 조건이 충족되거나 특정 이벤트가 발생한 경우에만 호출된다.핀은 하나의 명령에서 전체 이진 모듈에 이르기까지 다양한 추상화 수준에서 계측을 위한 광범위한 응용 프로그램 프로그래밍 인터페이스(API)를 제공한다.또한 라이브러리 로드, 시스템 호출, 신호/예외 및 스레드 생성 이벤트와 같은 많은 이벤트에 대한 콜백을 지원한다.

2020년에는 ACM SIGPLAN으로부터 프로그래밍 언어 소프트웨어상을 받았다.[1]

핀은 메모리에 로드된 직후 프로그램을 제어하여 계측을 수행한다.그런 다음 JIT(Just-in-Time) 실행 직전에 핀을 사용하여 바이너리 코드의 작은 섹션을 다시 컴파일한다.재컴파일된 코드에 분석을 수행하기 위한 새로운 지침이 추가된다.이 새로운 지침은 핀툴에서 나온 것이다.다양한 최적화 기법이 가능한 최저 작동 시간과 메모리 사용 오버헤드를 얻기 위해 사용된다.2010년 6월 현재 핀의 평균 베이스 오버헤드는 30%(핀툴을 가동하지 않음)이다.[2]

특징들

계측 모드

핀은 JIT 모드와 Probe 모드라는 두 가지 계측 모드를 지원한다.JIT 모드는 Pin의 모든 기능을 지원하는 반면 Probe 모드는 제한된 기능 세트를 지원하지만 훨씬 빨라 프로그램 실행 시간에 오버헤드가 거의 추가되지 않는다.JIT 모드는 Just-in-Time 컴파일러를 사용하여 모든 프로그램 코드를 다시 컴파일하고 계측기를 삽입하는 반면 Probe 모드는 계측을 위해 코드 트램폴린을 사용한다.

플랫폼 독립성

핀은 툴 휴대성을 위해 설계되었으며, J에도 불구하고IT는 하나의 ISA에서 동일한 ISA로 컴파일(그리고 모든 코드에 대해 하나의 중간표현을 사용하지 않음)하여 API의 대부분은 아키텍처와 운영체제 독립적이다.또한 휴대성 그 자체로 설계되어 플랫폼별 코드를 일반 코드에서 조심스럽게 격리시켜 핀을 새로운 플랫폼에 빠르게 적응시킬 수 있었다.코드의 약 절반은 일반적이며 나머지는 아키텍처 또는 OS에 의존한다.[3]

최적화

핀은 인라이닝, 리빙 분석, 스마트 레지스터 흘림과 같은 기법을 사용하여 계측 및 분석 코드를 최적화하기 위해 많은 기법을 사용한다.핀은 사용자가 인라이닝을 허용하기 위해 추가 코드를 삽입할 필요 없이 가능할 때마다 자동으로 이러한 최적화를 수행한다.당연히 일부 최적화에는 여전히 사용자 힌트가 필요하며, 일부 코드 구조는 다른 코드보다 인라인 작업이 쉽다.지트 코드 섹션의 직접 연결, 트레이스 링크(추적 링크)라는 기법, 레지스터의 흘림과 리맵핑을 최소화하는 레지스터 바인딩 조정 등도 사용된다.

사용의 용이성

핀의 API와 구현은 쓰기 쉬운 핀 도구를 만드는 데 초점이 맞춰져 있다.핀은 핀 도구의 계측 코드가 응용 프로그램 상태에 영향을 미치지 않는지 확인하는 모든 책임을 진다.또한 API를 통해 계측 코드는 Pin에게 많은 정보를 요청할 수 있다.예를 들어 핀 도구의 계측 코드는 핀 API를 사용하여 지시사항을 자세히 검토할 필요 없이 지시로 메모리 주소에 접근할 수 있다.

도구들

다양한 작업에 사용되는 핀툴이 많다.

  • Intel Parallel Studio의 구성요소는 메모리 디버깅, 성능 분석, 멀티스레딩 정확도 분석 및 병렬화 준비를 위해 핀툴을 많이 사용한다.
  • 인텔 소프트웨어 개발 에뮬레이터(Intel Software Development Emulator)는 현재 하드웨어에서 구현되지 않은 명령 집합 확장을 이용한 애플리케이션 개발을 가능하게 하는 핀툴이다.
  • CMP$IM은 핀을 사용하여 구축된 캐시 프로파일러입니다.[4]
  • PinPlay는 핀 아래에서 멀티스레드 프로그램 실행을 캡처하고 결정론적으로 재생할 수 있도록 한다.프로그램 실행을 캡처하면 개발자가 멀티스레딩에 내재된 비결정성을 극복하는 데 도움이 된다.[5]
  • 핀은 그 자체로 그 능력을 이용하는 많은 예시 도구들이 있다.이 도구는 BSD와 같은 면허에 따라 면허가 있다.

핀 도구에 대한 대안

Bell Lab의 스트랩온 툴, Dyninst 툴 등 시스템에서 실행 중인 프로그램의 자원 사용량을 수집할 수 있는 툴이 많이 있다.Bell Lab의 도구는 프로그램과 동시에 자원을 수집하는 도구를 실행하는 기술을 사용하지만, 이 도구는 다른 프로그램들과 동시에 실행할 수 있는 프로그램들과만 호환된다.[6]게다가 Dyninst 도구는 프로그램 내에서 프로그램의 실행 가능하고 실행 가능한 명령의 바이너리 재작성을 사용하여 리소스 사용을 확인하고 매우 효율적이다.하지만 상대적으로 새로운 도구인 데다 대규모 프로그램에서도 추락해 매우 불안정하다.[7]마지막으로 Intel Pin 도구는 정적 이진 계측기를 사용하여 모든 리소스를 추적하면서 프로그램을 자체로 실행한다.[8]이 접근방식은 바이러스 백신 자체에서 모든 프로세스를 쉽게 실행할 수 있고 프로그램이 바이러스 백신에서 정의한 최대 할당 한계에 도달하면 프로그램을 제거할 수 있기 때문에 바이러스 백신에는 더 적합하다.

참고 항목

메모들

  1. ^ "Programming Languages Software Award". www.sigplan.org.
  2. ^ PIN을 사용하여 병렬 프로그램 분석
  3. ^ 핀: 동적 계측을 사용한 맞춤형 프로그램 분석 도구 구축
  4. ^ CMP$im: Pin-Based On-The-Fly Multi-Core Cache 시뮬레이터
  5. ^ PinPlay: 병렬 프로그램의 결정론적 재생과 재현 가능한 분석을 위한 프레임워크
  6. ^ Gupta, Chandrashekhar (2007). "Building secure products and solutions. Bell Labs Technical Journal". doi:10.1002/bltj.20247. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  7. ^ Lee, Schulz (2007). "Dynamic binary instrumentation and data aggregation on large scale systems". International Journal of Parallel Programming.
  8. ^ Bach, M.; Charney, M.; Cohn, R.; Demikhovsky, E.; Devor, T.; Hazelwood, K.; Jaleel, A.; Luk, Chi-Keung; Lyons, G. (March 2010). "Analyzing Parallel Programs with PIN". Computer. 43 (3): 34–41. doi:10.1109/MC.2010.60. ISSN 0018-9162.

참조

외부 링크