Skip to main content
QUICK REVIEW

[논문 리뷰] Exposing Non-Atomic Methods of Concurrent Objects

Michael Emmi, Constantin Enea|arXiv (Cornell University)|2017. 06. 28.
Distributed systems and fault tolerance참고 문헌 2인용 수 5
한 줄 요약

이 논문은 자바 개발 키트(JDK)의 동시 객체에서 원자성 위반을 자동으로 탐지하기 위한 방법을 제시한다. 이 방법은 최소한의 테스트 허브를 생성하고 사전에 계산된 원자적 반환값 조합 집합과 결과를 검증함으로써 작동한다. 이 접근법은 코어당 초당 수백만 번의 실행을 지원하는 고속 테스팅을 가능하게 하여 ConcurrentSkipListMap와 ConcurrentHashMap과 같은 널리 사용되는 동시 데이터 구조에서 희귀한 원자성 위반을 발견한다.

ABSTRACT

Multithreaded software is typically built with specialized concurrent objects like atomic integers, queues, and maps. These objects' methods are designed to behave according to certain consistency criteria like atomicity, despite being optimized to avoid blocking and exploit parallelism, e.g., by using atomic machine instructions like compare and exchange (cmpxchg). Exposing atomicity violations is important since they generally lead to elusive bugs that are difficult to identify, reproduce, and ultimately repair. In this work we expose atomicity violations in concurrent object implementations from the most widely-used software development kit: The Java Development Kit (JDK). We witness atomicity violations via simple test harnesses containing few concurrent method invocations. While stress testing is effective at exposing violations given catalytic test harnesses and lightweight means of falsifying atomicity, divining effectual catalysts can be difficult, and atomicity checks are generally cumbersome. We overcome these problems by automating test-harness search, and establishing atomicity via membership in precomputed sets of acceptable return-value outcomes. Our approach enables testing millions of executions of each harness each second (per processor core). This scale is important since atomicity violations are observed in very few executions (tens to hundreds out of millions) of very few harnesses (one out of hundreds to thousands). Our implementation is open source and publicly available.

연구 동기 및 목표

  • 널리 사용되는 자바 개발 키트(JDK)의 동시 데이터 구조에서 원자성 위반을 식별하고 노출하는 것.
  • 스트레스 테스팅의 과제, 예를 들어 효과적인 테스트 촉매를 찾기 어려운 점과 수동 원자성 검사의 높은 비용을 해결하는 것.
  • 동시 객체 메서드에서 원자성 위반을 드러내는 최소한이면서 효과적인 테스트 허브를 자동으로 탐색하는 것.
  • 선형화 가능성 검증을 비용이 높은 선형화 순서 열거 대신 빠른 결과 집합 조회로 대체하여 스케일링 가능한 고성능 동시 실행 테스팅을 가능하게 하는 것.
  • 구현 코드에 접근할 필요 없이 언어에 종속되지 않고 오픈소스로 제공되는 동시 라이브러리에서 원자성 위반을 탐지하기 위한 프레임워크를 제공하는 것.

제안 방법

  • 원자성 위반의 촉매가 되는 하나의 비핵심 메서드와 다수의 핵심 메서드 호출을 포함한 작고 최소한의 테스트 허브를 자동으로 생성한다.
  • 메서드 호출을 정적 인덱싱하여 각 실행에 대해 빠르고 결정적인 결과 벡터 계산을 가능하게 한다.
  • 각 허브에 대해 원자적 동작(선형화 가능성)과 일관된 모든 가능한 반환값 결과 벡터를 사전에 계산한다.
  • 실행 결과를 사전에 계산된 원자적 결과 집합에 속해 있는지 검증하여 고비용의 선형화 순서 열거를 대체한다.
  • 초당 코어당 수백만 번의 동시 실행을 수행할 수 있는 고성능 테스트 자동화 프레임워크를 사용한다.
  • 메서드 반환값을 기록하고 검증을 위한 결정적인 결과 기록을 보장하기 위해 경량 인스트루멘테이션을 활용한다.

실험 결과

연구 질문

  • RQ1자동 테스트 허브 생성이 JDK의 동시 객체에서 희귀한 원자성 위반을 효과적으로 드러내는가?
  • RQ2사전에 계산된 원자적 결과 벡터 집합이 고비용의 선형화 순서 열거를 대체하여 확장 가능한 원자성 검사가 가능한가?
  • RQ3이 방법은 ConcurrentSkipListMap와 ConcurrentHashMap과 같은 실제 세계의 동시 데이터 구조에서 원자성 위반을 얼마나 효과적으로 탐지하는가?
  • RQ4발견된 위반은 구현 버그 때문이냐, 명세가 모호하여 의도적으로 허용된 행동 때문인가?
  • RQ5이 방법은 다른 동시 라이브러리와 프로그래밍 언어로 얼마나 일반화될 수 있는가?

주요 결과

  • 이 방법은 java.util.concurrent 패키지 내 10개의 클래스에서 원자성 위반을 성공적으로 탐지했으며, ConcurrentSkipListMap과 ConcurrentHashMap을 포함한다.
  • 원자성 위반은 수백만 번의 실행 중 수십~수백 번 이내로 발생하는 경우가 있었으며, 이는 고속 테스팅의 필요성을 강조한다.
  • 기존 방법 대비 허브 실행 속도에서 31.5배의 성능 향상을 달성하여 코어당 초당 수백만 번의 실행을 가능하게 했다.
  • ConcurrentSkipListMap의 clear 메서드에서 심각한 버그를 발견했는데, 동일한 키에 대해 이전에 put이 수행된 후에도 concurrent put이 발생하면 containsKey가 false를 반환하는 문제가 있었다.
  • 저자들은 많은 위반들이 명세가 모호하기 때문에 버그로 간주되지 않을 수 있지만, 원자성에 의존하는 클라이언트에게는 여전히 문제적인 행동임을 밝혀냈다.
  • 이 방법은 구현 소스 코드에 접근하지 않아도 효과적이며, 관찰 가능한 메서드 반환값과 결과 검증에만 의존한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.