Linux认证辅导:Linux内核中流量控制(3)Linux认证考试
文章作者 100test 发表时间 2009:11:11 16:18:34
来源 100Test.Com百考试题网
3. 数据结构流控处理对外表现是一个黑盒,外部只能看到数据入队和出队,但内部队列是如何操作和管理外面是不知道的;另外处理队列处理外,流控还有一个调度器,该调度器将数据进行分类,然后对不同类型的数据采取不同的流控处理,所分的类型可能是多级的,形成一个树型的分类树。
流控的基本数据结构是struct Qdisc(queueing discipline,直译是“排队纪律”,意译为“流控”
),这是内核中为数不多的以大写字母开头结构名称之一:/* include/net/sch_generic.h */
struct Qdisc
{
//入队操作
int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev).
//出队操作
struct sk_buff * (*dequeue)(struct Qdisc *dev).
//标志
unsigned flags.
#define TCQ_F_BUILTIN 1
#define TCQ_F_THROTTLED 2
#define TCQ_F_INGRESS 4
int padded.
// Qdisc的基本操作结构
struct Qdisc_ops *ops.
//句柄
u32 handle.
u32 parent.
atomic_t refcnt.
//数据包链表头
struct sk_buff_head q.
//网卡设备
struct net_device *dev.
struct list_head list.
//统计信息
struct gnet_stats_basic bstats.
struct gnet_stats_queue qstats.
//速率估计
struct gnet_stats_rate_est rate_est.
//流控锁
spinlock_t *stats_lock.
struct rcu_head q_rcu.
int (*reshape_fail)(struct sk_buff *skb,
struct Qdisc *q).