欢迎来到天天文库
浏览记录
ID:40755094
大小:39.52 KB
页数:24页
时间:2019-08-07
《TCP的发送系列 — 发送缓存的管理(一)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、TCP的发送系列—发送缓存的管理(一)数据结构TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理,另一个层面是整个TCP层的内存管理。单个socket的发送缓存所涉及的变量。[java]structsock{.../*预分配缓存大小,是已经分配但尚未使用的部分*/intsk_forward_alloc;.../*提交给IP层的发送数据大小(累加skb->truesize)*/atomic_tsk_wmem_alloc;...intsk_sndbuf;/*发送缓冲区大小的上限*/st
2、ructsk_buff_headsk_write_queue;/*发送队列*/.../*发送队列的总大小,包含发送队列中skb负荷大小,*以及sk_buff、sk_shared_info结构体、协议头的额外开销。*/intsk_wmem_queued;...};整个TCP层的内存相关变量。[java]structprototcp_prot={.name="TCP",.owner=THIS_MODULE,.../*设置TCP的内存压力标志,把tcp_memory_pressure置为1*/.enter_memory_
3、pressure=tcp_enter_memory_pressure,/*检查sock是否有剩余的发送缓存(sk_wmem_queued4、tcp_mem[0]后清除*/.memory_pressure=&tcp_memory_pressure,/*TCP内存使用的最小值、压力值、最大值,单位为页*/.sysctl_mem=sysctl_tcp_mem,/*每个sock写缓存的最小值、默认值、最大值,单位为字节*/.sysctl_wmem=sysctl_tcp_wmem,/*每个sock读缓存的最小值、默认值、最大值,单位为字节*/.sysctl_rmem=sysctl_tcp_rmem,.max_header=MAX_TCP_HEADER,/*协议头5、的最大长度*/...};atomic_long_ttcp_memory_allocated;/*Currentallocatedmemory.*/inttcp_memory_pressure__read_mostly;初始化(1)tcp_memtcp_mem是整个TCP层的内存消耗,单位为页。longsysctl_tcp_mem[3]__read_mostly;tcp_mem-vectorof3INTEGERs:min,pressure,maxmin:belowthisnumberofpagesTCPisnotbo6、theredaboutitsmemoryappetite.pressure:whenamountofmemoryallocatedbyTCPexceedsthisnumberofpages,TCPmoderatesitmemoryconsumptionandentersmemorypressuremode,whichisexitedwhenmemoryconsumptionfallsundermin.max:numberofpagesallowedforqueueingbyallTCPsockets.Default7、sarecalculatedatboottimefromamountofavailablememory.在tcp_init()中,调用tcp_init_mem()来初始化sysctl_tcp_mem[3]数组。tcp_mem[0]是最小值,为3/32的系统内存。tcp_mem[1]是压力值,为1/8的系统内存,也是最小值的4/3。tcp_mem[2]是最大值,为3/16的系统内存,也是最小值的2倍。[java]staticvoidtcp_init_mem(void){/*nr_free_buffer_pages()8、计算ZONE_DMA和ZONE_NORMAL的页数,*对于64位系统来说,其实就是所有内存了。*/unsignedlonglimit=nr_free_buffer_pages()/8;limit=max(limit,128UL);/*不能低于128页*/sysctl_tcp_mem[0]=limit/4*3;/*最小值设为3/32的系统内存*/sysctl_
4、tcp_mem[0]后清除*/.memory_pressure=&tcp_memory_pressure,/*TCP内存使用的最小值、压力值、最大值,单位为页*/.sysctl_mem=sysctl_tcp_mem,/*每个sock写缓存的最小值、默认值、最大值,单位为字节*/.sysctl_wmem=sysctl_tcp_wmem,/*每个sock读缓存的最小值、默认值、最大值,单位为字节*/.sysctl_rmem=sysctl_tcp_rmem,.max_header=MAX_TCP_HEADER,/*协议头
5、的最大长度*/...};atomic_long_ttcp_memory_allocated;/*Currentallocatedmemory.*/inttcp_memory_pressure__read_mostly;初始化(1)tcp_memtcp_mem是整个TCP层的内存消耗,单位为页。longsysctl_tcp_mem[3]__read_mostly;tcp_mem-vectorof3INTEGERs:min,pressure,maxmin:belowthisnumberofpagesTCPisnotbo
6、theredaboutitsmemoryappetite.pressure:whenamountofmemoryallocatedbyTCPexceedsthisnumberofpages,TCPmoderatesitmemoryconsumptionandentersmemorypressuremode,whichisexitedwhenmemoryconsumptionfallsundermin.max:numberofpagesallowedforqueueingbyallTCPsockets.Default
7、sarecalculatedatboottimefromamountofavailablememory.在tcp_init()中,调用tcp_init_mem()来初始化sysctl_tcp_mem[3]数组。tcp_mem[0]是最小值,为3/32的系统内存。tcp_mem[1]是压力值,为1/8的系统内存,也是最小值的4/3。tcp_mem[2]是最大值,为3/16的系统内存,也是最小值的2倍。[java]staticvoidtcp_init_mem(void){/*nr_free_buffer_pages()
8、计算ZONE_DMA和ZONE_NORMAL的页数,*对于64位系统来说,其实就是所有内存了。*/unsignedlonglimit=nr_free_buffer_pages()/8;limit=max(limit,128UL);/*不能低于128页*/sysctl_tcp_mem[0]=limit/4*3;/*最小值设为3/32的系统内存*/sysctl_
此文档下载收益归作者所有