- 論壇徽章:
- 0
|
謝謝你
我追蹤代碼的執(zhí)行,發(fā)現(xiàn)dev-queue_xmit return 1 的確是queue滿了exceed tx_queue_len所以沒法enqueue
static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
{
if (skb_queue_len(qdisc->q) < qdisc->dev->tx_queue_len) {
qdisc->q.qlen++;
return __qdisc_enqueue_tail(skb, qdisc, list);
}
return qdisc_drop(skb, qdisc); // return 1
}
感覺PC的能力應(yīng)該不至于讓萬兆網(wǎng)卡發(fā)不過來?CPU更可能先成為瓶頸?
你的意思是CPU enqueue的速度 < 網(wǎng)卡dequeue的速度? 我一直call dev_queue_xmit應(yīng)該沒關(guān)系?
按照這個(gè)邏輯, 正常情況下 Qsic queue 應(yīng)該永遠(yuǎn)不會(huì)full啊,除非發(fā)生如你所說的這個(gè)邏輯鏈條:
網(wǎng)卡隊(duì)列full -> netif_stop_queue關(guān)閉Qdisc,Qdisc隊(duì)列只進(jìn)不->Qdisc隊(duì)列長度增加,直至Qdisc隊(duì)列full
所以這里邏輯的起點(diǎn)網(wǎng)卡隊(duì)列FULL 和 邏輯的終點(diǎn)Qdisc隊(duì)列FULL有什么區(qū)別嗎,我一直網(wǎng)卡隊(duì)列就是Qdisc隊(duì)列啊
因?yàn)槲沂嵌嗑程發(fā)送,在call dev_queue_xmit時(shí)加了個(gè)mutex,現(xiàn)在倒也不會(huì)出現(xiàn)這種情況了
regard
回復(fù) 2# nswcfd
|
|