25张图,一万字,拆解Linux网络包发送过程(超级详细~)
25張圖,一萬字
,拆解Linux網(wǎng)絡包發(fā)送過程(超級詳細~)
半年前我以源碼的方式描述了網(wǎng)絡包的接收過程 。之后不斷有粉絲提醒我還沒聊發(fā)送過程呢。好 ,安排!
在開始今天的文章之前,我先來請大家思考幾個小問題。
- 問1:我們在查看內(nèi)核發(fā)送數(shù)據(jù)消耗的 CPU 時 ,是應該看 sy 還是 si ?
- 問2 :為什么你服務器上的 /proc/softirqs 里 NET_RX 要比 NET_TX 大的多的多?
- 問3:發(fā)送網(wǎng)絡數(shù)據(jù)的時候都涉及到哪些內(nèi)存拷貝操作?
這些問題雖然在線上經(jīng)??吹? ,但我們似乎很少去深究。如果真的能透徹地把這些問題理解到位 ,我們對性能的掌控能力將會變得更強 。
帶著這三個問題,我們開始今天對 Linux 內(nèi)核網(wǎng)絡發(fā)送過程的深度剖析