- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2章mbuf存储器缓存
下载
第2章 mbuf:存储器缓存
2.1 引言
网络协议对内核的存储器管理能力提出了很多要求。这些要求包括能方便地操作可变长
缓存,能在缓存头部和尾部添加数据 (如低层封装来自高层的数据 ) ,能从缓存中移去数据(如,
当数据分组向上经过协议栈时要去掉首部 ) ,并能尽量减少为这些操作所做的数据复制。内核
中的存储器管理调度直接关系到联网协议的性能。
在第 1章我们介绍了普遍应用于N e t / 3 内核中的存储器缓存:m b u f ,它是“memory buf f e r ”
的缩写。在本章,我们要查看 m b u f和内核中用于操作它们的函数的更多的细节,在本书中几
乎每一页我们都会遇到m b u f 。要理解本书的其他部分必须先要理解m b u f 。
m b u f 的主要用途是保存在进程和网络接口间互相传递的用户数据。但 m b u f 也用于保存其
他各种数据:源与目标地址、插口选项等等。
图2 - 1显示了我们要遇到的四种不同类型的 m b u f ,它们依据在成员 m _ f l a g s中填写的不
同标志M _ P K T H D R和M _ E X T而不同。图2 - 1 中四个m b u f 的区别从左到右罗列如下:
1) 如果m _ f l a g s等于0 ,m b u f 只包含数据。在m b u f 中有1 0 8字节的数据空间(m _ d a t数组) 。
指针m _ d a t a指向这 1 0 8字节缓存中的某个位置。我们所示的 m _ d a t a指向缓存的起始,
但它能指向缓存中的任意位置。成员 m _ l e n指示了从 m _ d a t a开始的数据的字节数。
图1 - 6是这类m b u f 的一个例子。
在图2 - 1 中,结构m _ h d r中有六个成员,它的总长是 2 0 字节。当我们查看此结构的 C语
言定义时,会看见前四个成员每个占用 4字节而后两个成员每个占用 2字节。在图2 - 1 中
我们没有区分4字节成员和2字节成员。
2) 第二类m b u f 的m _ f l a g s值是M _ P K T H D R,它指示这是一个分组首部,描述一个分组数
据的第一个 m b u f 。数据仍然保存在这个 m b u f 中,但是由于分组首部占用了 8字节,只
有1 0 0字节的数据可存储在这个 m b u f 中(在m _ p k t d a t数组中) 。图1 - 1 0是这种m b u f 的一
个例子。
成员m _ p k t h d r . l e n的值是这个分组的 m b u f 链表中所有数据的总长度:即所有通过
m _ n e x t指针链接的 m b u f 的m _ l e n值的和,如图 1 - 8所示。输出分组没有使用成员
m _ p k t h d r . r c v i f,但对于接收的分组,它包含一个指向接收接口 i f n e t结构( 图3 -
6 ) 的指针。
3) 下一种m b u f 不包含分组首部(没有设置K _ P K T H D R) ,但包含超过2 0 8字节的数据,这时
用到一个叫“簇”的外部缓存 (设置M _ E X T) 。在此m b u f 中仍然为分组首部结构分配了
空间,但没有用—在图2 - 1 中,我们用阴影显示出来。 N e t / 3 分配一个大小为 1 0 2 4或
2 0 4 8字节的簇,而不是使用多个 m b u f 来保存数据 (第一个带有 1 0 0字节数据,其余的每
个带有 1 0 8字节数据) 。在这个m b u f 中,指针m _ d a t a指向这个簇中的某个位置。
N e t / 3 版本支持七种不同的结构。定义了四种 1 0 2 4字节的簇(惯例值) ,三种2 0 4 8字节的
第 2章 mbuf :存储器缓存计计25
下载
簇。传统上用 1 0 2 4字节的原因是为了节约存储器:如果簇的大小是 2 0 4 8 ,对于以太网
分组 ( 最大 1 5 0 0字节) ,每个簇大约有四分之一没有用。在 2 7 . 5 节中我们会看到 N e t / 3
T C P发送的每个 T C P
文档评论(0)