다음을 통해 공유


버퍼링 상태 제어

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는 네트워크 미니 리다이렉터 드라이버에서 사용할 수 있는 버퍼링 상태를 관리하는 다음 루틴을 제공합니다.

루틴에서 반환된 값 Description

RxChangeBufferingState

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

RxIndicateChangeOfBufferingState

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

RxIndicateChangeOfBufferingStateForSrvOpen

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