linux kernel 工程师
全部博文(99)
发布时间:2014-02-14 09:34:18
net/sched/sched_fifo.c 实现了pfifo和bfifo这两种策略都是fifo策略,即入队时放在队列尾部,出队时从头部出队,即先进先出的方式不同点在于入队时的限制:bfifo 对队列的字节长度做限制pfofo 对队列的packets数目做限制static int bfifo_enqueue(struct sk_buff *skb, struct Qdisc *sch){ .........【阅读全文】
发布时间:2014-02-14 09:27:06
// pfifo_fast 这个discipiline里面有skb队列数组,优先级从大到小,队列下标分别是0,1,2// enqueue 根据skb的priority, 使用prio2band数组找出skb对应的队列// dequeue 优先选择下标为0的skb队列,0队列变空后选择1队列,1队列变空后选择2队列 // 同样优先级的skb,实现fifo策略, 入队时插入队列尾部,出队时从.........【阅读全文】
发布时间:2014-02-14 09:06:34
qdisc_restart--->sch_direct_xmit--->dev_hard_start_xmit(skb, dev, txq)---->rc = ops->ndo_start_xmit(skb, dev);/* * NOTE: Called under qdisc_lock(q) with locally disabled BH. * * __QDISC_STATE_RUNNING guarantees only one CPU can process * this qdisc at a time. qdisc_loc.........【阅读全文】
发布时间:2014-02-14 08:54:33
qdisk_run 是对__qdisc_run的一个封装,仅仅会被NET_TX_SOFTIRQ对应的软中断服务程序net_tx_action调用。在调用__qdisc_run之前设置__QDISC___STATE_RUNNING状态
qdisk running 状态的操作包括设置,清除和查询......【阅读全文】
发布时间:2014-02-13 17:57:30
void __qdisc_run(struct Qdisc *q){ int quota = weight_p; while (qdisc_restart(q)) { // qdisc_restart才是真正的核心 // 如果qdisc_restart返回值大于0,表示队列非空;返回0表示队列空了或者发送失败 /* * Ordered by possible occurrence: Postpone .........【阅读全文】