linux千兆网网卡驱动调试,速率很不稳定

hujianhuihappy_126 2016-08-09 02:42:03
菜鸟一枚,刚开始学习linux驱动编写,最近因工作需要,写了一个虚拟的网卡驱动,要求能够达到千兆网卡的速度。
驱动编写好调试时,发现在运行一段时间后,速度就会变慢,最快时可达120M字节,最低时
只有几十K字节,波动特别大,研究了很久,没发现问题,哪位大神遇到过同样的问题,请不吝指教。
现在贴出部分代码:

从协议栈取到数据,通过我们自己的途径发送出去:
static netdev_tx_t hba_net_tx (struct sk_buff *skb, struct net_device *dev)
{
int len = 0;
int ret = 0;
char *data , shortpkt[ETH_ZLEN];
HBA_NET_PRIV *net_priv = netdev_priv(dev);
unsigned long flags;
unsigned int did;


data = skb->data;
len = skb->len;


/*如果帧长小于以太网帧最小长度,补0*/
if(len < ETH_ZLEN)
{
memset(shortpkt, 0, ETH_ZLEN);
memcpy(shortpkt, skb->data, skb->len);
len = ETH_ZLEN;
data = shortpkt;
}

dev->trans_start = jiffies;

//通过我们的途径发送到目的地(不是硬件)
ret = SendMsg( data, len);

/*发送包统计*/
if(ret == 0)
{
dev->stats.tx_packets ++;
dev->stats.tx_bytes += len;
}
else
{
dev->stats.tx_errors ++;
dev->stats.tx_dropped ++;
}
}

dev_kfree_skb_any(skb);

return 0;
}

从对端经过我们的途径收到数据后,递交给协议栈:
int hba_net_rx(unsigned char *data, unsigned int len, struct net_device *dev)
{
struct sk_buff *skb = NULL;
/*分配套接字缓冲区*/
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);

/*接收包统计*/
dev->stats.rx_packets ++;
dev->stats.rx_bytes += len;

netif_rx(skb);

return 0;
}



经过测试,我们的收发途径都是没有什么问题的,最高可以达到150M Byte的速率。
加上这个驱动后,发现即便我应用层只发10M byte的速度,但是依旧不稳定,不知道什么原因。
所以我觉得主要问题在网卡驱动这一块,但是这块确实没什么代码的,求大神指导。
因为第一次开发网卡驱动,没有什么调试经验,我想单向调试,就是测速,不知道有没有什么办法。
求大神指导,急急急!
...全文
1381 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mordor_ 2016-08-24
  • 打赏
  • 举报
回复
是在电脑上跑的虚拟网卡么?驱动和命令以及配置发给我,我帮你调试看看
hujianhuihappy_126 2016-08-12
  • 打赏
  • 举报
回复
CSDN已经完了,问的问题几乎都没人回答
hujianhuihappy_126 2016-08-09
  • 打赏
  • 举报
回复
再顶一下吧,急急急
hujianhuihappy_126 2016-08-09
  • 打赏
  • 举报
回复
自己顶一下吧,真的很着急

1,317

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧