staticinlineboolsk_wmem_schedule(structsock *sk,intsize) {if(!sk_has_account(sk))returntrue;returnsize <= sk->sk_forward_alloc ||__sk_mem_schedule(sk, size, SK_MEM_SEND); }staticinlineboolsk_rmem_schedule(structsock *sk,structsk_buff *skb,intsize) {if(!sk_has_account(sk))returntr...
struct options *opt;//IP选项缓冲于此处 volatile unsigned long wmem_alloc;//发送缓冲队列中存放的数据的大小,这两个与后面的rcvbuf和sndbuf一起使用 volatile unsigned long rmem_alloc;//接收缓冲队列中存放的数据的大小 /* 下面三个seq用于TCP协议中为保证可靠数据传输而使用的序列号 */ unsigned long write_...
注意和上面的sk_wmem_alloc的区别intsk_forward_alloc;//skb_entail中的sk_mem_charge里面会对新分配的SKB空间做一次减法,表示预分配缓存空间少了 在真正分配空间之前需要比较这个值,看内存空间释放使用达到限度//在应用层send_msg的时候,会在函数__sk_mem_schedule中开辟空间,为sk_forward_alloc增加amt * SK_ME...
* 大部分功能是为TCP准备的 */struct sock{struct options*opt;//IP选项缓冲于此处volatile unsigned long wmem_alloc;//发送缓冲队列中存放的数据的大小,这两个与后面的rcvbuf和sndbuf一起使用volatile unsigned long rmem_alloc;//接收缓冲队列中存放的数据的大小/* 下面三个seq用于TCP协议中为保证可靠数据传输而...
truesize就是data buffer的空间加上SKB的大小。struct sock结构中,有两个域,用于统计用于发送的内存空间和用于接收的内存空间,它们是:rmem_alloc、wmem_alloc。另外两个域则统计接收到的数据包的总大小和发送的数据包的总大小。它们是:rcvbuf和sndbuf。rmem_alloc和rcvbuf,wmem_alloc 和sndbuf用于不同的目的。当我们...
* 大部分功能是为TCP准备的 */ struct sock { struct options *opt;//IP选项缓冲于此处 volatile unsigned long wmem_alloc;//发送缓冲队列中存放的数据的大小,这两个与后面的rcvbuf和sndbuf一起使用 volatile unsigned long rmem_alloc;//接收缓冲队列中存放的数据的大小 /* 下面三个seq用于TCP协议中为保证...
volatile unsigned long wmem_alloc;//发送缓冲队列中存放的数据的大小,这两个与后面的rcvbuf和sndbuf一起使用 volatile unsigned long rmem_alloc;//接收缓冲队列中存放的数据的大小 /* 下面三个seq用于TCP协议中为保证可靠数据传输而使用的序列号 */
end)) return true; return false; } int sk_msg_alloc(struct sock *sk, struct sk_msg *msg, int len, int elem_first_coalesce) { struct page_frag *pfrag = sk_page_frag(sk); u32 osize = msg->sg.size; int ret = 0; len -= msg->sg.size; ...
(alloc_skb时为sizeof(structsk_buff)+SKB_DATA_ALIGN(size)) len,data_len,truesize是否包含frag_list里的长度?? 是! skb->truesize这个成员变量衡量的是整个skb结构所占的内存大小(为啥不包含struct sk_shared_info??),在“ip分片处理”和“socket的读写缓存分配”中使用,前者将在以 ...
sk_buff详解