다음을 통해 공유


버퍼링 상태 제어

RDBSS는 다양한 네트워크 미니 리다이렉터와 함께 분산 캐시 일관성을 제공하는 메커니즘인 버퍼링 관리자를 제공합니다. 이 서비스는 버퍼링 상태 변경 요청을 처리하는 RDBSS의 버퍼링 관리자에 캡슐화됩니다. RDBSS의 버퍼링 관리자는 다양한 네트워크 미니 리디렉션자 및 RDBSS에서 생성된 모든 변경 버퍼링 상태 요청에 대한 작업을 추적하고 시작합니다.

일반적인 네트워크 미니 리다이렉터에서 캐시 일관성 구현에는 다음과 같은 몇 가지 일반적인 구성 요소가 있습니다.

  • 파일 루틴을 만들고 열기 위한 수정 사항입니다.

    이 경로에서 버퍼링 요청의 유형이 결정되고 서버에 대한 적절한 요청이 수행됩니다. 네트워크 미니 리렉터 및 서버에서 반환될 때 FCB와 연결된 버퍼링 상태는 만들기 또는 열린 호출의 결과에 따라 업데이트됩니다.

  • 서버에서 변경 버퍼링 상태 알림을 처리하기 위한 표시 코드를 수신하도록 수정되었습니다.

    이러한 요청이 감지되면 버퍼링 상태를 조정하는 로컬 메커니즘이 트리거되어야 합니다.

  • RDBSS의 일부로 구현되는 버퍼링 상태를 변경하는 메커니즘입니다. 변경 버퍼링 상태 요청은 요청이 적용되는 SRV_OPEN 구조를 식별해야 합니다.

SRV_OPEN 구조를 식별하는 데 관련된 계산 작업의 양은 네트워크 미니 리렉터의 프로토콜 및 세부 정보에 따라 달라집니다. SMB 프로토콜에서 oplock(기회 잠금)은 캐시 일관성에 필요한 인프라를 제공합니다. Windows의 SMB 프로토콜 구현에서는 RDBSS에서 제공하는 멀티플렉스 ID API가 사용됩니다. 서버는 서버에서 열린 파일을 식별하는 데 사용되는 멀티플렉스 ID를 선택합니다. 멀티플렉스 ID는 열려 있는 NET_ROOT(공유)를 기준으로 합니다. 따라서 모든 변경 버퍼링 상태 요청은 각각 적절한 NET_ROOT 및 SRV_OPEN 구조로 변환해야 하는 NetRootKey 및 SrvOpenKey의 두 키로 식별됩니다. 리소스 획득/릴리스 메커니즘과 더 나은 통합을 제공하고 다양한 네트워크 미니 리다이렉터에서 이러한 노력이 중복되는 것을 방지하기 위해 RDBSS는 이 서비스를 제공합니다.

SRV_OPEN 구조체의 버퍼링 상태 변경을 나타내는 두 가지 루틴이 RDBSS에 제공됩니다.

키 연결은 되돌릴 수 없으며 연결된 SRV_OPEN 구조의 수명 동안 지속됩니다.

멀티플렉스 ID에서 SRV_OPEN 구조로의 매핑을 설정하기 위한 보조 메커니즘이 필요한 네트워크 미니 리디렉터는 RxIndicateChangeOfBufferingState를 사용할 수 있지만, 이 지원이 필요하지 않은 네트워크 미니 리디렉터는 RxIndicateChangeOfBufferingStateForSrvOpen을 사용할 수 있습니다.

RDBSS의 버퍼링 관리자는 서로 다른 단계에서 이러한 요청을 처리합니다. 여러 목록 중 하나에서 다양한 기본 네트워크 미니 리다이렉터로부터 받은 요청을 유지 관리합니다.

  • Dispatcher 목록에는 SRV_OPEN 구조에 대한 적절한 매핑이 설정되지 않은 모든 요청이 포함됩니다.

  • 처리기 목록에는 적절한 매핑이 설정되었지만 아직 처리되지 않은 모든 요청이 포함됩니다.

  • LastChanceHandlerList에는 초기 처리에 실패한 모든 요청이 포함됩니다. 이는 일반적으로 변경 버퍼링 상태 요청을 수신할 때 FCB를 공유 모드로 획득했을 때 발생합니다. 이러한 경우 oplock 중단 요청은 지연된 작업자 스레드에서만 처리할 수 있습니다.

네트워크 미니 리다이렉터 드라이버의 변경 버퍼링 상태 요청 처리는 FCB 획득 및 릴리스 프로토콜과 얽혀 있습니다. 이렇게 하면 소요 시간을 단축할 수 있습니다.

RDBSS는 네트워크 미니 리다이렉터 드라이버에서 사용할 수 있는 버퍼링 상태를 관리하는 다음과 같은 루틴을 제공합니다.

루틴 설명

RxChangeBufferingState

이 루틴은 버퍼링 상태 변경 요청을 처리하기 위해 호출됩니다.

버퍼링 상태 변경 표시(RxIndicateChangeOfBufferingState)

이 루틴은 이후 처리를 위해 버퍼링 상태 변경 요청(예: oplock 중단 표시)을 등록하기 위해 호출됩니다.

서버 열기에 대한 버퍼링 상태 변경을 나타냄

이 루틴은 이후 처리를 위해 버퍼링 상태 변경 요청(예: oplock 중단 표시)을 등록하기 위해 호출됩니다.