2009-08-28 2 views
2

Windows CLR 기반 응용 프로그램 (.NET)에서 LDMA 또는 RDMA를 사용할 수 있기를 원합니다. C++로 개발 된 대기 시간이 짧은 응용 프로그램은 LDMA 또는 RDMA를 사용하여 데이터를 수신합니다. CLR 응용 프로그램이 성능에 영향을 줄 것이라는 이해와 함께 동일한 API를 사용하고 싶습니다.Windows CLR 기반 플랫폼에서 LDMA 또는 RDMA를 사용할 수있는 메커니즘이 있습니까?

Windows에는 Windows Direct가 있지만 .NET 응용 프로그램에서 사용할 수있는 것을 보지 못했습니다. Windows 용 SDP (소켓 직접 프로토콜) 구현을 본 적이 없습니다. 어떤 일이 일어날 수있는 방법을 아는 사람이 있습니까?

답변

2

관리되는 코드와 관리되지 않는 코드를 함께 사용하면 RDMA 구현이 자체 메모리 관리를 수행하는 라이브러리 (선호하는 C++)가됩니다.

P/Invoke 또는 C++/CLI를 통해 해당 라이브러리를 래핑하십시오. 귀하의 API가 수다스럽고 처분 의미론이있는 상태 유지 C++ 객체를 가지고 있다면 C++/CLI에서 훨씬 쉽고 빠를 것입니다.

낮은 수준에서 전체 RDMA 성능을 얻고 관리되지 않는 계층의 데이터를 관리되는 계층으로 복사 할 때 (즉, 조작하기 쉽도록) .Net 관련 비용이 발생합니다.

관리되지 않는 메모리의 기본 데이터에 충분히 풍부한 API를 제공하여 원하는 경우조차 피할 수 있습니다. 이것은 약간의 관리되는/관리되지 않는 전환 비용을 초래할 것이므로 매우 혼잡 한 인터페이스에는 부적절 할 수 있습니다. 그러나 이것을 피하는 실제적인 이유는 구현하는 데 상당한 번거 로움이 될 수 있으므로 데이터를 가져 오는 것보다 확실히 첫 번째 선택이 아닐 것입니다. 관리 세계로 넘어 가고 싶다.

순수한 관리 솔루션이 위험한 해킹없이 RDMA와 함께 작동한다고 생각하지 않았습니다. 예를 들어 압축되지 않은 LOH를 사용합니다.

관련 문제