- 论坛徽章:
- 0
|
谢谢你
我追踪代码的执行,发现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的能力应该不至于让万兆网卡发不过来?CPU更可能先成为瓶颈?
你的意思是CPU enqueue的速度 < 网卡dequeue的速度? 我一直call dev_queue_xmit应该没关系?
按照这个逻辑, 正常情况下 Qsic queue 应该永远不会full啊,除非发生如你所说的这个逻辑链条:
网卡队列full -> netif_stop_queue关闭Qdisc,Qdisc队列只进不->Qdisc队列长度增加,直至Qdisc队列full
所以这里逻辑的起点网卡队列FULL 和 逻辑的终点Qdisc队列FULL有什么区别吗,我一直网卡队列就是Qdisc队列啊
因为我是多线程发送,在call dev_queue_xmit时加了个mutex,现在倒也不会出现这种情况了
regard
回复 2# nswcfd
|
|