Существуют ли какие-либо механизмы для использования LDMA или RDMA на платформе Windows CLR? - PullRequest
3 голосов
/ 29 августа 2009

Я хочу иметь возможность использовать LDMA или RDMA в приложении на базе Windows CLR (.NET). У меня есть приложения с низкой задержкой, которые разрабатываются на C ++, и эти приложения будут получать свои данные, используя LDMA или RDMA. Я хотел бы, чтобы наши приложения CLR использовали один и тот же API с пониманием того, что, вероятно, произойдет снижение производительности.

Windows имеет Windows Direct, но я не видел ничего, что позволяло бы приложениям .NET использовать его. Я не видел настоящей реализации SDP (Socket Direct Protocol) для Windows. Кто-нибудь знает, как это можно сделать?

1 Ответ

2 голосов
/ 30 августа 2009

Если вы в порядке, смешивая управляемый и неуправляемый код, сделайте вашу реализацию RDMA библиотекой (предпочтительно на c ++), которая выполняет все свое собственное управление памятью.

Оберните эту библиотеку через P / Invoke или C ++ / CLI. Если ваш API болтлив и имеет объекты C ++ с сохранением состояния с семантикой удаления, это будет намного проще и лучше в C ++ / CLI.

Тогда вы получите полную производительность RDMA на низком уровне, и только затраты, связанные с .Net, будут понесены, когда вы копируете некоторые данные из неуправляемого уровня в управляемый (скажем, для упрощения манипулирования).

Даже этого можно избежать, если вы захотите, предоставив достаточно богатый API-интерфейс для базовых данных в неуправляемой памяти. Это повлечет за собой незначительные затраты на управляемый / неуправляемый переход, поэтому было бы неуместным для чрезвычайно болтливого интерфейса, но реальной причиной избежать этого было бы значительное затруднение при реализации, поэтому это, конечно, не будет моим первым выбором по сравнению с простым извлечением данных, которые вы хочу в управляемый мир.

Я бы не подумал, что чисто управляемое решение будет работать с RDMA без опасных хаков (например, с использованием LOH, не сжатым).

...