drivemyself 发表于 2016-04-20 16:48

关于qos,关于Qdisc,

小弟正在做一个小驱动,一个网卡的驱动,想使用内核中的qdisc,请问各位大侠,谁使用过qdisc。即,声明一个新的qdisc,不使用用户空间下的tc命令。另有问题:struct Qdisc 中enqueue 与struct Qdisc_ops中的enqueue有什么区别? dev_queue_xmit的时候是调用的谁?感谢感谢!

Godbach 发表于 2016-04-21 11:36

回复 1# drivemyself

命令行 tc 可以用来配置 Qdisc。如果你不用 tc,那就就需要其他的配置方式。

dev_queue_xmit 通常是在 IP 层处理完报文之后调用的。   

drivemyself 发表于 2016-04-21 13:39

回复 2# Godbach

你好,如果我不是用tc 的话 写在驱动里 该怎样新建qdisc,qdisc里面的enqueue 和 qdisc_ops 里面的enqueue有什么区别?

   

Godbach 发表于 2016-04-21 13:46

回复 3# drivemyself

具体我个人没有写过类似代码。不过你可以参考 kernel 总现成的创建 qdisc 的代码。



   

nswcfd 发表于 2016-04-22 10:47

qdisc->enque

nswcfd 发表于 2016-04-22 10:48

实际它的值也是从qdisc-ops上拷贝过来的。

nswcfd 发表于 2016-04-22 10:51

网卡驱动利用qdisc…… 这个有点颠覆三观的感觉…… 不过也不是不可能…… 只是qdisc的实现跟dev耦合的很紧密,楼主大概只需要enque/deque,得自己剥离

drivemyself 发表于 2016-04-23 19:17

回复 7# nswcfd

大侠请留步。。。 我不能够为网卡驱动指定一个我自己的qdisc吗?不过我确实只是想使用enqueue,和 dequeue,另外,你说qdisc->enqueu是从qdisc->ops 拷过来 是怎么个意思?
   

nswcfd 发表于 2016-04-25 16:15

拷贝那句话的意思是,http://lxr.free-electrons.com/source/net/sched/sch_generic.c#L606

qdisc是跟net_device关联的,当然device又跟某个driver关联。
比如说,网络设备eth0,底层驱动是intel e1000e,需要配置的qdisc是pfifo。

tc命令是配置到eth0上的,报文经过pfifo的enque/deque逻辑之后,才进入e1000e驱动的tx逻辑(*)。
看楼主的意思,是想在driver里面(也就是上文*的位置)再做一次enque/deque? <--- 也许完全理解错楼主的意思了。

xuefeihumei 发表于 2016-05-29 17:42

回复 9# nswcfd


大侠虽然理解错了我的意思,但是从大侠给出的提示中,我已经找到解决办法,另外你说的那些也都是非常对的,感谢中!
页: [1] 2
查看完整版本: 关于qos,关于Qdisc,