28、TCP 传输侧内存管理详解

TCP 传输侧内存管理详解

1. 内存管理概述

在 TCP 传输过程中,内存管理至关重要。当写队列中的套接字缓冲区未传输或未被确认时,会出现内存相关问题。此时,程序会跳转到第 1175 行,为套接字设置 SOCK_NOSPACE 标志,并在第 1180 行调用 wait_for_tcp_memory() 函数等待内存可用。

2. 内存分配函数
2.1 tcp_alloc_pskb()

此函数用于为套接字发送缓冲区分配内存。根据硬件是否支持分散聚合 DMA( NETIF_F_SG 位是否在 sk → route_caps 中设置),分配方式有所不同:
- 若硬件不支持分散聚合 DMA,会为 1 mss 大小的 TCP 有效负载分配内存。
- 若硬件支持且单个 sk_buff 的分页区域能容纳 1 mss 数据,将分配 1 页内存。
- 其他情况,会为完整的 1 mss 分配线性数据区域的内存。

tcp_alloc_pskb() 未能分配所需长度的缓冲区,需在第 1180 行调用 wait_for_tcp_memory() 等待内存可用。若缓冲区分配成功,会在第 1071 行调用 skb_charge() 函数记录写入侧套接字分配的内存。

2.2 select_size()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值