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

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

Chinaunix

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

LINUX網(wǎng)卡驅(qū)動(dòng),使用iperf測試丟包, packet receive errors [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2017-02-16 17:07 |只看該作者 |倒序?yàn)g覽
大神們好,小弟最近做了一個(gè)LINUX網(wǎng)卡驅(qū)動(dòng),用iperf來測試時(shí)候,發(fā)現(xiàn)UDP有丟包。
用iperf測試UDP,一共測試兩次,一次一個(gè)小時(shí),速率為1000M,丟包率大概在0.0001%左右
再繼續(xù)測試時(shí),發(fā)現(xiàn)會(huì)大量丟包,已經(jīng)慘不忍睹了,不知道什么問題,現(xiàn)在把收發(fā)代碼貼出來,請(qǐng)大家指正一下:

/*發(fā)送回調(diào)函數(shù)*/


```
netdev_tx_t net_tx (struct sk_buff *skb, struct net_device *dev)
{
        NET_PRIV *net_priv = netdev_priv(dev);
        unsigned long flags;
        PNET_SKB_DATA  pskb ;

       
        spin_lock_irqsave(&net_priv->send_lock, flags);


        /*list_skbPool pool中取一個(gè)pskb*/
        pskb = (PNET_SKB_DATA)listGetFirstNodeFromList(&net_priv->dev->list_skbPool);
        /*如果沒取到,則返回*/
        if(pskb == NULL)
        {
                spin_unlock_irqrestore(&net_priv->send_lock, flags);
                return NETDEV_TX_BUSY;

        }
       
        /*取到一個(gè)pskb后,把這個(gè)pskb從隊(duì)列l(wèi)ist_skbPool移除*/
        pskb = listRemoveNodeFromListHead(&net_priv->dev->list_skbPool);
       
        /*把skb掛在pskb中*/
        pskb->skb = skb;

        /*把pskb插入隊(duì)列l(wèi)ist_skbSend尾部,等待另外一個(gè)線程來取數(shù)據(jù),繼而發(fā)送出去*/
        listAddNodeToListTail(pskb, &net_priv->dev->list_skbSend);
       

        dev->trans_start = jiffies;
        up(net_priv->dev->semElsSend);
       
        spin_unlock_irqrestore(&net_priv->send_lock, flags);
       
       
        return NETDEV_TX_OK;
}
```



此時(shí)另外有一個(gè)線程,在不斷取數(shù)據(jù),取到后就發(fā)送出去。



接收時(shí),是一個(gè)線程一直從鏈路上收數(shù)據(jù),收到數(shù)據(jù)就調(diào)用下面這個(gè)接收函數(shù)
/*接收函數(shù)*/


```
int net_rx(unsigned char *data, unsigned int len, struct net_device *dev)
{
        struct sk_buff *skb = NULL;

       
        NET_PRIV *net_priv = netdev_priv(dev);
        unsigned long flags;
       

        /*分配套接字緩沖區(qū)*/
        skb = dev_alloc_skb(len + 2);
        if(skb == NULL)
        {
                printk("%s:memory is not sufficient, rcvd packet dropped.\n", dev->name);
                dev->stats.rx_dropped++;
               
                return -1;
        }
        skb_reserve(skb, 2);

        skb->dev = dev;


        memcpy(skb_put(skb, len), data, len);
       
        skb->protocol = eth_type_trans(skb, dev);


        if(NET_RX_SUCCESS != netif_receive_skb(skb))
        {
                dev->stats.tx_errors ++;
                dev->stats.tx_dropped ++;
               
                return -2;
        }


        /*接收包統(tǒng)計(jì)*/
        dev->stats.rx_packets ++;
        dev->stats.rx_bytes += len;

        return 0;
}
```




之前加了一些統(tǒng)計(jì)打印,發(fā)現(xiàn)從鏈路及驅(qū)動(dòng)里面沒有丟包。
丟包發(fā)生在送給協(xié)議棧后,在協(xié)議棧丟掉了
通過命令netstat -su發(fā)現(xiàn)打印如下:
Udp:
    30681696 packets received
    71 packets to unknown port received.
    436 packet receive errors
    266 packets sent
    436 receive buffer errors
    0 send buffer errors
    IgnoredMulti: 393

其中436 packet receive errors 這個(gè)統(tǒng)計(jì)值436,正好就是iperf統(tǒng)計(jì)的丟包數(shù)量。
在網(wǎng)上搜了很多,說是當(dāng)出現(xiàn)packet receive errors 的時(shí)候,說明是應(yīng)用層來不及接收導(dǎo)致的。但是我用兩臺(tái)PC機(jī)(linux系統(tǒng))進(jìn)行測試,沒有丟包。

這個(gè)問題困惑了很久,希望得到大神指點(diǎn),謝謝!

您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):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)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP