0

나는 프로그램이 동기화 된 부분에서 얼마나 많은 시간을 소비하는지 측정하려고합니다. 잠금 (또는 다른 형태의 동시성 제어)으로 보호되는 중요 섹션.내 LLVM 통과 프로그램에서 스레드 동기화를 감지하는 방법?

필자는이를 수행하는 방법과 llvm pass를 통해 실행중인 프로그램에서 동시성 제어 방법을 감지하는 방법에 대해 혼란스러워합니다.

답변

2

Contech는 동기화 정보 (다른 데이터는 물론)를 수집하기 위해 LLVM IR에 계측기로 tool을 작성했습니다. 유사한 정보를 측정하기 위해 LLVM IR에 도구 인 Harmony도 있습니다.

고유 한 LLVM Pass를 작성하는 데 필요한 세 가지 구성 요소를 요약 해 보겠습니다.

첫 번째로 대부분의 동기화 제어는 원자 적 연산에 의존하지만 이러한 연산은 어셈블리에 있고 종종 다른 라이브러리 내에 있습니다. 각 어셈블리 명령어의 실행을 추적하지 않으므로 대신 pthread_mutex_lock 또는 sem_wait과 같은 함수 이름으로 되돌아 가야합니다.

둘째로, 동기화 제어 동작을 식별 한 LLVM 패스는 식별자 (즉, 주소) 및 타임 스탬프와 같은 동기화 동작에 대한 중요한 정보를 기록하는 데 필요한 계측을 삽입해야합니다.

셋째, 두 번째 구성 요소의 계측이 중요 섹션 내에 있으므로 시스템에서 동기화 레코드를 처리하는 데 추가 코드가 필요합니다. 이 구성 요소가 없으면 계측에 의해 결과가 왜곡됩니다. 계측기에는 여전히 영향이 있습니다.