亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1432 | 回復(fù): 4
打印 上一主題 下一主題

[網(wǎng)絡(luò)子系統(tǒng)] dev_queue_xmit 失敗的避免和處理方法(求助) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-07-22 14:53 |只看該作者 |倒序?yàn)g覽
大家好:
我最近用兩張10GE-NIC(Intel 82599ES)通過光纖把兩臺PC直連起來,注冊了一個(gè)L2協(xié)議來建立兩臺PC的溝通,
call dev_queue_xmit發(fā)送packet, 發(fā)現(xiàn)當(dāng)發(fā)送端如果非常頻繁的call dev_queue_xmit時(shí),會(huì)出現(xiàn) return=1的
case, 而且用ifconfig去查看網(wǎng)卡的一些統(tǒng)計(jì)值時(shí), 的確也能發(fā)現(xiàn)NIC的TX dropp的統(tǒng)計(jì)值在增加,我查了下Kernel。
#define NET_XMIT_DROP 1, 貌似說網(wǎng)卡的tx queue 滿了, skb_enqueue 失敗,不知道理解的對不對
1)我怎么能get到網(wǎng)卡的tx queue是否滿
2)或者call dev_queue_xmit這個(gè)函數(shù)之前,有沒有其他的condition以供參考好讓我決定是馬上發(fā)送 or delay發(fā)送

anyway, 我想避免出現(xiàn)dev_queue_xmit=1的case

Thanks

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
2 [報(bào)告]
發(fā)表于 2015-07-22 20:26 |只看該作者
dev_queue_xmit返回的是enque的返回值。
當(dāng)然,在dev_queue_xmit返回之前,qdisc_run可能已經(jīng)發(fā)送了N多個(gè)packet了(由于qdisc的存在,未必就是傳入的skb)。

首先是因?yàn)榫W(wǎng)卡的隊(duì)列full,driver調(diào)用netif_stop_queue關(guān)閉qdisc;
進(jìn)而導(dǎo)致qdisc只進(jìn)不出,隊(duì)列長度逐漸增加(可以查看tc的計(jì)數(shù)),
最終超過qdisc的隊(duì)列上限,從而enque失敗,體現(xiàn)為dev_queue_xmit失敗。

感覺PC的能力應(yīng)該不至于讓萬兆網(wǎng)卡發(fā)不過來?CPU更可能先成為瓶頸?

另外一種可能性是,網(wǎng)卡driver clean tx中斷處理不及時(shí)?
可能的話,把tx發(fā)送邏輯跟tx-interrupt分配到不同的CPU上。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2015-07-23 10:14 |只看該作者
謝謝你
我追蹤代碼的執(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


   

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
4 [報(bào)告]
發(fā)表于 2015-07-24 12:23 |只看該作者
“PC的能力應(yīng)該不至于讓萬兆網(wǎng)卡發(fā)不過來”的言外之意是,
萬兆網(wǎng)卡的pps高達(dá)14M(64小包,每秒一千四百萬),除非CPU能以這么快的速度把packet送給網(wǎng)卡(可以自己做一個(gè)計(jì)數(shù)器測試一下),否則瓶頸一定在cpu上。

2樓說的網(wǎng)卡隊(duì)列是指網(wǎng)卡的DMA隊(duì)列,82599缺省是64還是256來著。ethtool -g查看。
如果這個(gè)隊(duì)full,driver就會(huì)關(guān)閉qdisc,進(jìn)而發(fā)生一些列的鏈?zhǔn)椒磻?yīng)(負(fù)反饋)。
而這個(gè)隊(duì)列滿,通常不是由于網(wǎng)卡處理不過來,而是由于cpu忙不過來,driver不能及時(shí)回收skb導(dǎo)致。

在qdisc關(guān)閉期間,stack產(chǎn)生的報(bào)文只能緩存在qdisc隊(duì)列上(協(xié)議棧認(rèn)為發(fā)送成功),如果連qdisc都滿了,stack的tx就會(huì)返回失敗了。

假設(shè)隊(duì)列長度64,stack一下子送過來100個(gè)報(bào)文,則前64個(gè)可以提交給網(wǎng)卡DMA隊(duì)列,后面36緩存在qdisc上。
網(wǎng)卡可以很快的完成64個(gè)報(bào)文的發(fā)送(DMA操作),但是什么時(shí)候繼續(xù)發(fā)送剩下的36個(gè)報(bào)文,取決于cpu能以多快的速度影響網(wǎng)卡的TxComplete中斷,以及多快的速度釋放掉前64個(gè)報(bào)文,以及多快的速度把剩下的36個(gè)報(bào)文提交給網(wǎng)卡DMA隊(duì)列。

多core機(jī)器上,可以結(jié)合多ring、中斷綁定、rx/tx中斷分離等手段,來緩解cpu的瓶頸。

論壇徽章:
20
程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2015-08-17 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-18 06:20:00每日論壇發(fā)貼之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16賽季CBA聯(lián)賽之江蘇
日期:2017-06-26 11:05:5615-16賽季CBA聯(lián)賽之上海
日期:2017-07-21 18:12:5015-16賽季CBA聯(lián)賽之青島
日期:2017-09-04 17:32:0515-16賽季CBA聯(lián)賽之吉林
日期:2018-03-26 10:02:16程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-07-15 06:20:0015-16賽季CBA聯(lián)賽之江蘇
日期:2016-07-07 18:37:512015亞冠之薩濟(jì)拖拉機(jī)
日期:2015-08-17 12:21:08
5 [報(bào)告]
發(fā)表于 2015-07-30 10:58 |只看該作者
關(guān)于隊(duì)列,推薦一篇文章:http://www.coverfire.com/article ... inux-network-stack/
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP