linux e1000e收包流程解析

2021-08-14 01:29:19 字數 1135 閱讀 5206

收到報文

e1000e_poll

skb變數pfmemalloc的含義

ret = pci_register_driver(&e1000_driver);

pci_driver e1000_driver.probe = e1000_probe

e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

e1000_sw_init(adapter);

e1000e_read_mac_addr(&adapter->hw)

memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);

register_netdev(netdev);

err = e1000_request_irq(adapter);

napi_enable(&adapter->napi);

e1000_irq_enable(adapter);

__napi_schedule(&adapter->napi) 注意napi代表乙個device

local_irq_restore(flags);

軟中斷net_rx_softirq handlernet_rx_action

local_irq_disable();

list_splice_init(&sd->poll_list, &list);

local_irq_enable();

關注對ethernet的gro

gro之後就把報文上傳給網路介面層 netif_receive_skb_internal

gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)

netif_receive_skb_internal會考慮rps

receive packet steering把報文負載均衡到其他cpu softnetdata 的input_pkt_queue 中

對應 skb->pfmemalloc = 1; 參見 __napi_alloc_skb(struct napi_struct *napi,

Linux e1000e網絡卡驅動

目錄 這樣減少了系統中斷的負載並能降低cpu利用率,但是會增加處理報文的延遲。驅動預設是假定interruptthrottlerate的值是8000,綜合來看,這對所有流量型別的報文都是很好的,但是缺乏對小報文的效能和延遲。硬體每秒能處理更多的小報文,由此乙個自適應的中斷調節演算法就應運而生了。驅動...

isis receive 收包流程

如下 int isis receive struct thread thread 主要流程 1 收包 rx,呼叫註冊的處理函式,例如isis receive bcast p2p 2 處理報文 handle 3 處理下乙個 read on 處理報文的邏輯如下,static int isis handl...

軟中斷和收包流程

open softirq建立型別與handler的對應關係。void open softirq int nr,void action struct softirq action void data netif rx將收到的包放到softnet data的input pkt queue中,之後呼叫ne...