1. 程式人生 > >iocp效能分析

iocp效能分析

網路上找iocp效能分析的文章很少,因工作關係,花了點時間特意從客觀資料和理論角度分析了下iocp的效能


環境 CPU i7 4核8執行緒 1G網絡卡,echo方式測試(一個客戶機模擬多個客戶端模式,模擬100連線),TCP無延遲模式,網絡卡理論上雙向在125M,單向發包為每秒8萬到9萬個


1.連線效能 ,連線速度和發包速度幾乎一致,大概在每秒8-9萬個,但是由於TCP原因,連線方主動斷開連線的話,連線數會被TIME_OUT的生命期限制,以及最大埠數量限制,服務端則會受到控制代碼系統拖累,到12萬連線時幾乎不能工作了。


2. 資料傳輸效能測試,如果資料傳送方提交的緩衝尺寸小於服務端接收緩衝時,效率會非常低,iops一般都在1萬以下,並且CPU佔用率極高,網絡卡使用率也會很低,當傳送方提交資料快取尺寸大於服務端接收快取時iops才可以提高網路利用率,並降低CPU佔用率,1G網絡卡環境中,傳送方提交快取在64k,服務端接收方在512位元組時,或者傳送方32k,接收方256位元組時才可佔滿網絡卡,客戶端iops在10萬到15萬左右,服務端iops在60萬左右,60萬應該是API的呼叫頻率的極限了


3.理論分析,在資料傳送方和接收方提交快取相近時,效率非常低,TCP無延遲選項作用有限,最多提升20%的效能,原因應該在於提交的io極有可能被提交到了NDIS網絡卡層去做單包收發動作,這樣硬體延遲系統延遲會讓發包收包效率大大降低,當傳送提交的快取遠遠大於接受方提交的快取時,在硬體延遲系統延遲的時間內,NDIS完成了批量包的傳送,接收方則經常性的讀取socket接收快取中的資料,這樣延遲的影響就被降低了,簡單說就是快取換IO效能的方式,如果走硬體IO,100客戶端1萬iops,則單個客戶端最多能提供100iops的效能。


4. 一些影響效能的引數,SO_RCVBUF,大的SO_RCVBUF可以提高網路效能的穩定性,但是win7環境下,設定一個大的SO_RCVBUF有可能會降低效能。

在收發雙方提交的快取相近時,TCP_NODELAY能提高20%的實時效能,但會降低頻寬利用率。