Barriers of ARMv7

Barriers of ARMv7

  • DMB, DSB, ISB의 세 명령
  • ARMv6까지는 CP15 레지스터를 이용하여 명령을 수행하지만 ARMv7부터는 전용 명령을 사용한다.

DMB(Data Memory Barrier)

  • 데이터 메모리 배리어로 DMB 명령 전과 명령 후의 메모리 접근을 분리하게 만드는데 인수로 shareablity domain과 access types을 사용한다.
  • 모든 명시적인 메모리 액세스를 완료. 결국 메모리 접근 순서 문제를 지시.
  • load/store buffer를 모두 사용 완료할때까지 대기. (물론 cache cohereant 연동)
  • R,W,R,W,R,W → 효율을 위해 R,R,R,W,W,W 순으로 바꿀 수 있는데 이를 방지하기 위함.
  • 참고: volatile(C 함수)을 사용하면 컴파일러가 속도 향상을 위해 관련 변수를 레지스터에 배치하지 못하게(optimization off) 한다.

barriers2

DSB(Data Synchronization Barrier, called DWB)

  • 특별한 메모리 배리어로 execution stream과 메모리 access를 동기화하는데 인수로 shareability domain과 access type이 사용된다. (Drain Write Buffer로도 불려짐)
  • 모든 캐시, Branch predictor, TLB 조작 명령이 진행중이면 완료할 때까지 기다림.

ISB(Instruction Synchronization Barrier)

  • ISB 명령이 동작하는 순간 파이프라인으로 인해 다음 명령이 뒤 따라 들어오게 되는데 이를 모두 버리게한다.(파이프라인 Flush) Out of order execution 기능으로 인해 뒤 따라 Fetch된 명령이 먼저 동작이 될 가능성이 있는데 이럴 경우 문제가 벌어질 가능성이 있다. 특별히 두 명령의 우선 순위를 확실히 구분해야 하는 루틴에서는 두 명령 사이에 ISB를 실행시켜 두 명령어의 실행 순서를 명확히 보장한다.
  • ARMv7에서는 ISB를 지원하지만 다른 아키텍처에서 ISB를 지원하지 않는 경우가 있다. 이럴때 파이프 라인을 비우는 것과 비슷한 효과를 내려면 nop 또는 mov a0, a0등의 명령 사용을 사용하여 명령어 수행이 바뀌는 순간에도 문제가 없도록 할 수 있다. 또한 메모리 참조의 순서를 dependency하게 유도하여 일정 루틴을 in order로 수행될 수 밖에 없도록 만들기도 한다.
  • 실시간 코드 변경: 만일 코드부분이 바뀐 후 케시된 명령이 재실행되면 문제가 발생되므로 이 때 ISB를 사용하여야 한다. (JIT가 명령을 바꾸면서 동작)
  • MMU on/off 시점에도 ISB 명령을 사용함.
  • Out of Order Execution: CPU가 Out of Order Execution(ARMv6 아키텍처 부터 지원하지만 대부분 ARMv7부터 제품이 있음)을 지원하는 병렬 Pipeline을 사용하는 경우 캐시 사용이 바뀌는 시점에 이전 명령이 다음 이어지는 명령과 연관성이 없는 경우 다음 명령이 먼저 실행되면서 MMU 상태가 바뀌기 전후로 주소 참조에 문제가 될 수 있다.

Barrier Options

barriers3

배리어 사용처

  • SIMPLE ORDERING AND BARRIER CASES
    • Simple Weakly Consistent Ordering Example
    • Weakly-Ordered Message Passing problem
    • Address Dependency with object construction
    • Causal consistency issues with Multiple observers
    • Multiple observers of writes to multiple locations
    • Posting a Store before polling for acknowledgement
    • WFE and WFI and Barriers
  • LOAD EXCLUSIVE/STORE EXCLUSIVE AND BARRIERS
    • Acquiring a Lock
    • Releasing a Lock
    • Use of Wait For Event (WFE) and Send Event (SEV) with
  • SENDING INTERRUPTS AND BARRIERS
    • Using a Mailbox to send an interrupt
  • CACHE & TLB MAINTENANCE OPERATIONS AND BARRIERS
    • Data Cache maintenance operations
    • Instruction Cache Maintenance operations
    • TLB Maintenance operations and Barriers

 

참고

 

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.