我的粗浅的理解:
1. 数据帧引发中断,然后申请 sk_buff,然后进行一系列的检查后,将数据装入sk_buff,然后丢给上一级。
2. 每来一个帧都要申请一个 sk_buff ,然后在协议栈的处理过程里 free_skb,那么申请sk_buff 的函数必须十分高效,linux 内核的内存管理保证了这一点。
由以上两点,我认为,对于读来说,都是一帧一帧的操作,每一个帧对应一个sk_buff,读操作,sk_buff的作用仅仅在于减小拷贝次数,但是写却很有大作用,因为一个sk_buff可以对应大量的数据,底层的发送帧函数,只要从sk_buff 里读出来,再切成帧再发送出去即可(最大1518)。
> 请问,我的理解是否是正确的呢,你不要叫我看代码,这转移了我的注意力,我只想知道linux 内核是怎么做的,知道是这么个方法就够了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |