如何获得网卡发送队列缓存

zyy9303 2017-02-02 09:06:28
我想获得网卡的发送队列长度,看了网上的说法,需要从内核中读取,大部分说的都是net_device结构体中qdisc 中的q.qlen。

for_each_net(net)
{
for_each_netdev(net, dev)
{
//num++;
if(!strcmp(dev->name,"eth0"))
{
q = dev->qdisc;
tx_len = q->q.qlen;
//tx_len = tx->trans_start;
//tx_len = dev->tx_queue_len;
//tx = dev->_tx;
//q = tx->qdisc;
sprintf(msg,"%s:%d\n",dev->name,(int)tx_len);
msg_size = strlen(msg);
}
}
}

for each是为了遍历网卡,msg中的消息是我要得到的结果,结果是我读出了eth0 但是得到的长度都是0,此时我的网卡是不断发送数据的。
...全文
975 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nswcfd 2017-02-09
  • 打赏
  • 举报
回复
为什么要限速? 在不产生拥塞的情况下,报文进入/退出qdisc队列的时间窗口是极短的,观察到非0值的概率是极小的(就算是持续有流量通过)。
nswcfd 2017-02-06
  • 打赏
  • 举报
回复
队列的数据都及时的得到了调度(也就是说没有阻塞),当然长度是0了。
zyy9303 2017-02-06
  • 打赏
  • 举报
回复
引用 1 楼 nswcfd 的回复:
队列的数据都及时的得到了调度(也就是说没有阻塞),当然长度是0了。
我自己试了一下,加了一个TC限速后,我就能观察到长度了。是不是说,如果我想测到合理的网卡缓存队列长度,我必须要把网卡限速到网络的带宽?

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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