afd 的全稱是 Ancillary Function Driver for WinSock,是 windows 系統網絡部分的核心工具。同 Linux 類似,windows 的 socket 最終也是被映射為一個文件,而 windows 中所有 socket 文件的操作,如創建、銷毀、讀寫等,都是通過 afd 來完成的。windows 系統從 xp 到 win10,網絡部分的實現架構已經有了很多的改進,但是,其中 afd 的地位始終沒有改變 。
從這個操作系統的功能分層上看,在 afd.sys 之上的,都是一個個的系統庫實現(dll)。
afd 創建新的 socket 后,分配給每個 socket 一個緩存區域,可以通過更改下面的注冊表項,來改變收發緩存區域的大小:
[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet\Services\Afd\Parameters] DefaultReceiveWindow = 16384 DefaultSendWindow = 16384
從實驗結果來看,修改后,windows 下 UDP 的 burst 性能提升顯著(突發大量報文時,因為緩存被塞滿,以后到來的 UDP datagram 都被扔掉)。說明,通過這種方法,來改變 winsock 網絡接收緩存大小是有效的。
參考:
http://mista.nu/blog/?p=655
http://smallvoid.com/article/winnt-winsock-buffer.html