Snoop Not Required 학술

DMA를 수행할 때 캐시 일관성을 유지하려면, 가장 간단하게는 (1)DMA로 공유되는 메모리 영역을 캐시하지 않는 방법과 (2)DMA 전송을 시작하기 전에 각 CPU의 캐시를 조사하는 방법 (snoop)이 있다. (1)번 방법은 가장 간단한 방법이지만 공유되는 메모리 영역에 대한 캐시를 포기해야 되기 때문에 곤란하고, (2)번 방법은 빠르게 구현할 수 있다고 하더라도 DMA를 수행할 때마다 "snoop"을 수행해야 하므로 어느 정도의 오버헤드를 감수해야 한다.

만약 캐시 일관성(Cache Coherency)이 필요없는 경우라면, PCI-X나 PCI Express에서는 TLP 헤더의 no-snoop 비트를 켜서 캐시를 뒤지지 않도록 할 수 있다. 인텔 GBE는 아래와 같은 경우 Device Control 레지스터와 GCR 레지스터의 NONSNOOP 비트를 통해 no-snoop 비트를 쓸 수 있도록 지원한다:

  • TXDSCR_NOSNOOP: 전송 디스크립터 읽기
  • TXDSCW_NOSNOOP: 전송 디스크립터 쓰기
  • TXD_NOSNOOP: 전송 데이터 읽기
  • RXDSCR_NOSNOOP: 수신 디스크립터 읽기
  • RXDSCW_NOSNOOP: 수신 디스크립터 쓰기
  • RXD_NOSNOOP: 수신 데이터 쓰기

이유는 잘 모르겠지만 윈도우의 경우 PCI Express 드라이버가 No Snoop나 VC Enable 설정을 변경하지 말 것을 요구하고 있다.

Windows PCI Express Driver Requirement:

B2.7.4.2 Device driver for PCI Express device must not modify No Snoop or VC Enable settings. The device driver must not modify either the "Enable No Snoop" bit (PCI Express Base Specification V1.0a, Section 7.8.4, Device Control Register: bit 11) for the device or the "VC Enable" bit (PCI Express Base Specification V1.0a, Section 7.11.7, VC Resource Control Register: bit 31) for any of the device’s extended (non-VC0) virtual channel or channels.
 
참고 - US Patent 7000078 - System and method for maintaining cache coherency in a shared memory system


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://xeraph.com/tb/4455342 [도움말]

핑백

  • Xeraph beyond the Great Firewall : 2008년 회고록 (작성 중) 2008-12-18 01:42:47 #

    ... 요. NDIS도 직접 구현하면서 이제 하나씩 감이 잡히고 있습니다. 지금까지 정리했던 글들을 아래 붙입니다. PCI 설정 공간과 인터럽트 처리Relaxed OrderingSnoop Not RequiredNDIS 인터럽트 흐름SerDes : Serializer/DeserializerGBIC : Gigabit interface converter 형태소분석 Lucene ... more

덧글

댓글 입력 영역