SAN에서 작업에 대한 메모리 등록
Windows 소켓 스위치는 SAN 서비스 공급자의 확장 함수를 호출하여 메시지를 보내고 받기 위한 모든 데이터 버퍼와 시스템 영역 네트워크에서 RDMA 작업을 위한 모든 데이터 버퍼를 등록합니다. 이러한 확장 함수는 원격 피어에 연결된 특정 SAN 소켓에서 사용하기 위해 물리적 메모리 영역에 버퍼를 등록합니다. 이러한 확장 함수에 대한 설명은 WINDOWS 소켓 SPI 확장(SAN용)을 참조하세요.
데이터 버퍼 등록
스위치는 로컬 프로세스에서 실행되는 애플리케이션을 대신하여 SAN 서비스 공급자의 WSPRegisterMemory 확장 함수를 호출하여 해당 프로세스에서만 액세스할 수 있는 데이터 버퍼를 등록합니다. WSPRegisterMemory가 반환하는 버퍼 핸들은 등록을 수행한 로컬 프로세스의 컨텍스트에서만 유효합니다. 스위치는 WSPRegisterMemory 를 호출하여 WSPRecv 함수에 대한 호출에서 메시지 수신 버퍼 역할을 하는 버퍼 또는 WSPSend 함수에 대한 호출에서 버퍼를 보내는 메시지를 등록합니다. 또한 스위치는 WSPRegisterMemory 를 호출하여 WSPRdmaRead 확장 함수 호출에서 로컬 수신 RDMA 버퍼 역할을 하는 버퍼를 등록하거나 WSPRdmaWrite 확장 함수에 대한 호출에서 로컬 RDMA 원본을 등록합니다. WSPRegisterMemory에 등록된 버퍼를 사용하여 로컬 프로세스가 완료되면 스위치는 WSPDeregisterMemory 확장 함수를 호출하여 해당 버퍼를 해제합니다.
스위치는 로컬 프로세스에서 실행되는 애플리케이션을 대신하여 SAN 서비스 공급자의 WSPRegisterRdmaMemory 확장 함수를 호출하여 로컬 및 원격 프로세스에서 모두 액세스할 수 있는 RDMA 버퍼를 등록합니다. WSPRegisterRdmaMemory가 반환하는 버퍼 설명자는 등록이 수행된 SAN 소켓에 대한 피어 연결 컨텍스트에서 원격 피어가 시작하는 RDMA 데이터 전송 작업에만 유효합니다. 원격 피어 연결의 스위치는 이러한 RDMA 버퍼를 WSPRdmaWrite 확장 함수 호출의 대상 또는 WSPRdmaRead 확장 함수 호출의 원본으로 사용합니다. WSPRegisterRdmaMemory에 등록된 버퍼를 사용하여 로컬 및 원격 프로세스가 완료되면 스위치는 WSPDeregisterRdmaMemory 확장 함수를 호출하여 해당 버퍼를 해제합니다.
메모리 액세스 관리
SAN 서비스 공급자는 등록된 메모리에 대한 무단 액세스를 방지해야 합니다.
다음과 같이 메모리를 등록하고 액세스할 수 있어야 합니다.
로컬 액세스를 위해 등록된 메모리는 WSPRegisterMemory라는 스위치가 있는 프로세스에서만 사용할 수 있어야 합니다.
로컬 및 원격 액세스를 위해 등록된 메모리는 WSPRegisterRdmaMemory 라는 스위치가 메모리를 등록하는 프로세스 또는 메모리가 등록된 SAN 소켓에 연결된 원격 피어를 통해 액세스할 수 있습니다.
메모리는 등록된 동안 및 연결이 설정된 동안에만 액세스할 수 있어야 합니다. SAN 서비스 공급자는 동일한 컴퓨터 또는 SAN의 다른 컴퓨터에서 실행되는 다른 프로세스에서 이러한 메모리에 실수로 액세스할 수 없도록 해야 합니다.
읽기 액세스에만 등록된 메모리는 쓰기 액세스에 사용할 수 없어야 합니다. 쓰기 액세스에만 등록된 메모리는 읽기 액세스에 사용할 수 없어야 합니다.
등록된 메모리 사용
스위치는 데이터 전송 세션 협상에 사용할 연결된 각 TCP 소켓에 대해 두 개의 가상 연속 메모리 영역을 등록합니다. 스위치는 하나의 메모리 영역을 사용하여 SAN 서비스 공급자의 WSPSend 함수를 호출할 때 전송 데이터를 포함하는 메시지 버퍼를 제공합니다. 스위치는 다른 메모리 영역을 사용하여 SAN 서비스 공급자의 WSPRecv 함수를 호출할 때 메시지 버퍼를 게시하여 데이터를 수신합니다.
스위치는 일반적으로 RDMA 작업에서 애플리케이션 데이터를 전송하는 경우에만 RDMA 버퍼를 등록합니다.
스위치가 소켓을 닫기 전에 스위치는 SAN 서비스 공급자의 WSPDeregisterMemory 또는 WSPDeregisterRdmaMemory 함수를 호출하여 보류 중인 데이터 전송 작업이 현재 사용하지 않는 메모리를 해제합니다. SAN 서비스 공급자는 또한 미해결 데이터 전송 작업과 관련된 메모리를 해제해야 합니다.