Linux认证辅导:Linux内核中流量控制(1)Linux认证考试
文章作者 100test 发表时间 2009:11:11 16:18:36
来源 100Test.Com百考试题网
1. 前言linux内核中提供了流量控制的相关处理功能,相关代码在net/sched目录下;而应用层上的控制是通过iproute2软件包中的tc来实现,tc和 sched的关系就好象iptables和netfilter的关系一样,一个是用户层接口,一个是具体实现,关于tc的使用方法可详将Linux Advanced Routing HOWTO,本文主要分析内核中的具体实现。
流控包括几个部分: 流控算法, 通常在net/sched/sch_*.c中实现, 缺省的是FIFO, 是比较典型的黑盒模式, 对外只看到入队和出对两个操作. 流控结构的操作处理. 和用户空间的控制接口, 是通过rtnetlink实现的。
以下内核代码版本为2.6.19.2。
2. 控制入口2.1 控制入口linux流控功能反映为网卡设备的属性,表明是网络最底层的处理部分, 已经和上层的网络协议栈无
关了:
/* include/linux/netdevice.h */
struct net_device
{
......
/*
* Cache line mostly used on queue transmit path (qdisc)
*/
/* device queue lock */
spinlock_t queue_lock ____cacheline_aligned_in_smp.
//这是发送数据时的队列处理
struct Qdisc *qdisc.
//网卡停止时保存网卡活动时的队列处理方法
struct Qdisc *qdisc_sleeping.
//网卡处理的数据队列链表
struct list_head qdisc_list.
//最大队列长度
unsigned long tx_queue_len. /* Max frames per queue allowed */
/* Partially transmitted GSO packet. */
struct sk_buff *gso_skb.
/* ingress path synchronizer */
//输入流控锁
spinlock_t ingress_lock.
//这是对于接收数据时的队列处理
struct Qdisc *qdisc_ingress.