2010-05-31 46 views
1

是否有從普通UDP套接字遷移的教程(Linux操作系統,C99/C++,recv系統調用時)到原始套接字?如何遷移現有UDP應用到原始套接字

根據http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html 原始套接字比udp快得多。

應用是客戶端 - 服務器。客戶端是專有的,並且必須使用與udp服務器完全相同的協議。但服務器可以用原始套接字快一點。我必須在服務器上實現udp的哪些部分?有沒有「快速遷移」庫?

+0

此外,哪些udp工作的一部分將受益於小平臺 - 發送或接收? – osgx 2010-05-31 17:28:00

+0

速度性能來自於丟棄IP層,即路由,過濾,端口管理等。一個好的方向是RDMAoE,即RDMA over Ethernet,與Mellanox交談。 – 2010-08-18 09:34:34

+0

Steve-o,它是一個軟件(RDMAoE)還是硬件?它是否需要兩臺機器都在同一個子網絡中(只有交換機在它們之間)? – osgx 2010-08-18 12:29:36

回答

1

原始套接字允許您與下層協議進行通信,以太網,IP等是的,會降低可以給你一定的優勢,但是你必須平衡與你失去了什麼。

在這種情況下,你提到的服務器寫入使用UDP協議,所以在電線上,通信必須的udp。現在,如果您使用原始套接字,則必須確保將封裝在Udp數據包中的應用程序數據發送出去。您還需要編寫代碼以確保遵守Udp協議和狀態機,以便對於服務器,您的客戶端顯示爲另一個Udp客戶端。做這一切需要編寫大量的代碼,並且有一些缺點增加了維護,增加了使其正常工作的成本等。

我沒有完全閱讀上面鏈接的論文,但問自己的問題是,你是否可以獲得該研究論文中提供的收益並將其複製到您的方案中?

在我看來,你應該首先嚐試弄清楚爲什麼你的客戶是如此緩慢。你有什麼要求?你對什麼構成了一個好的,快速的客戶有什麼指標?如果我是你,我會首先衡量當前的實施情況,同時記住一些對該場景有用的度量標準,例如字節/秒傳輸等。然後,我會對客戶端進行配置以查看它花費的時間太多,並試圖看看我是否可以減少開銷並使其更快。

總之,(即在你的應用程序)下降疊前儲蓄在堆棧的頂部。如果你的應用寫得不好,那麼無論你多低,你都不會看到你期望的性能。

+0

我的appl現在是基準代碼,它在做recvfrom/sendto。 所以在客戶端/服務器上沒有任何優化。 OS udp/ip堆棧是限制速率。 是的,這是乒乓測試和真正的應用程序工作在相同的風格。客戶端和服務器可以在原始套接字中重寫。 – osgx 2010-06-05 22:34:24