Barriers

배리어 종류

  • General(Compiler) Barrier
  • Mandatory Barrier
  • SMP conditional Barrier
  • Implicit barriers and Etc…

General(Compiler) Barrier

  • C 함수: barrier()
  • 컴파일러의 optimization을 제한하기 위해 __volatile__을 사용
  • 컴파일러가 속도 향상을 위해 관련 기억장치(변수 또는 주소)를 레지스터에 배치하기도 하는데 이러한 최적화를 하지 못하게 한다. 따라서 항상 해당 변수는 항상 메모리에서 로드한다. (물론 캐시 히트 시 캐시를 access)

Mandatory Barrier

  • C 함수: mb(), rmb(), wmb(), dma_rmb(), dma_wmb()
  • mb() – 읽고 쓰는 연산들 사이의 Ordering을 보장
  • rmb() – 읽기 연산들 사이에서 Ordering을 보장
  • wmb() – 쓰기 연산들 사이에서 Ordering을 보장
  • 데이터뿐 아니라 캐시, 분기예측, TLB 명령 등 모두 완료되는 것을 보장 (AMBA 4 이상에선 outer shareable domain에 외부 장치까지도 연결될수 있어 I/O 요청까지도 캐시 일관성을 지원할 수 있다.)

SMP conditional Barrier

  • C 함수: smp_mb(), smp_rmb(), smp_wmb()
  • 캐시 일관성을 지키는 SMP 시스템내에서 서로 다른 코어들 사이의 메모리 정합성을 보장하기 위해 사용

Implicit barriers and Etc…

  • 커널내의 Locking 구조, pthread 동기화 연산들도 implicit 배리어로 동작한다. 하지만 이 자원들을 외부로 공유시에는 명시적인 배리어가 필요할 수 있다.

배리어 C 함수 명령 vs ARM 아키텍처 배리어

barriers

  • rpi2: CONFIG_ARCH_HAS_BARRIERS 커널 옵션이 설정되어 barrier 명령을 arch/arm/mach-bcm2709/include/mach에서 설정한다.
    • mb(), rmb() 및 wmb() 명령 모두 -> dsb()

 

참고

답글 남기기

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