作家程序發送幾個MB(幾乎沒有延遲)使用多個寫入固定緩衝區。處理程序註冊了EPOLLOUT | EPOLLET
標誌。EPOLLOUT | EPOLLET,虛假wakups和MTU
- MTU = 16KB,寫入緩衝器= 4KB或更多。從調用
write(...)
(寫入在下一個事件中重新啓動)和〜30僞EPOLLOUT(在所有寫入完成並認爲數據被髮送後)返回幾個〜3 EAGAIN。 - MTU = 16KB,寫入緩衝器= 2KB。幾個~5 EAGAIN和一些(2-5)假EPOLLOUT事件 - 日誌表明作者和讀者在這種情況下同時進行。
- MTU = 16KB,寫入緩衝器< 1KB。幾〜5 EAGAIN和一個沒有僞造的EPOLLOUT事件。
- MTU = 1-5KB,寫入緩衝器= 4KB。幾個〜5 EAGAIN和沒有僞EPOLLOUT事件。
- MTU = 50KB(回送) - 99%的事件是僞EPOLLOUT。
看起來很簡單,當緩衝區從完全進入「可用空間」時,EPOLLOUT生成爲 。與MTU大小的相關性很有趣。 問題:
1)使EPOLLOUT禁用,除非最後一次寫入以EAGAIN代碼結束 - 是正確的模式?
2)較大的緩衝區或MTU建議傳輸較大的數據塊,產生較少的TCP/IP緩衝區更新和較少的事件。實踐顯示相反。任何人都可以對此有所瞭解嗎?
您爲什麼認爲EPOLLOUT是虛假的? –
好吧,1)只是我正在學習的一個澄清的epoll接口?怎麼樣2)較大的寫/數據包應該在緩衝區中產生較少的變化,減少EPOLLOUT事件。 – aak