《一种内存分配的方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种内存分配的方法和装置.pdf(15页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103761192 A (43)申请公布日 2014.04.30 CN 103761192 A (21)申请号 201410023743.0 (22)申请日 2014.01.20 G06F 12/02(2006.01) G06F 12/08(2006.01) H04L 12/879(2013.01) (71)申请人 华为技术有限公司 地址 518129 广东省深圳市龙岗区坂田华为 总部办公楼 (72)发明人 邹勇 林忠能 曲会春 (74)专利代理机构 北京中博世达专利商标代理 有限公司 11274 代理人 申健 (54) 发明名称 一种内存分配的方法和装置 (57) 。
2、摘要 本发明公开了一种内存分配的方法和装置, 涉及数据控制领域, 用于解决在NIC中为每个TCP 连接分配固定内存后, 当该 TCP 连接的报文数量 突然增大时, 因所分配的固定内存不足而造成丢 包的问题。本发明提供的方法具体包括 : 在单个 TCP 连接当前的内存剩余量小于该 TCP 连接当前 的内存剩余量下限时, 从公共内存资源中获取具 有当前内存剩余量下限所对应的内存量的内存资 源, 分配给该 TCP 连接, 并增加该 TCP 连接对应的 内存总量, 进而引起与内存总量相关的内存剩余 量下限的增加, 最后重复为该 TCP 分配具有当前 内存剩余量的内存直至满足所设定的条件。本发 明实施例。
3、主要用于 NIC 通过 TCP 连接接收报文的 过程中。 (51)Int.Cl. 权利要求书 2 页 说明书 8 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书8页 附图4页 (10)申请公布号 CN 103761192 A CN 103761192 A 1/2 页 2 1. 一种内存分配的方法, 其特征在于, 所述方法包括 : 获取单个 TCP 连接当前的内存剩余量, 所述内存剩余量是指为所述 TCP 预留的内存总 量中尚未使用的内存量 ; 当所述内存剩余量小于所述 TCP 连接当前的内存剩余量下限时, 从公共内存资源中获 取具有第一内存。
4、量的内存资源 ; 所述第一内存量表示所述当前的内存剩余量下限对应的内 存量, 所述内存剩余量下限与所述 TCP 连接的内存总量成正相关关系 ; 将获取到的具有第一内存量的内存资源分配给所述 TCP 连接, 并将所述 TCP 连接当前 的内存总量增加所述第一内存量 ; 重复上述步骤, 直至所述 TCP 连接当前的内存剩余量不小于所述 TCP 连接当前的内存 剩余量下限 ; 或者, 直至所述TCP连接当前的内存剩余量小于所述TCP连接当前的内存剩余 量下限, 但所述内存总量超出所述内存总量上限。 2.根据权利要求1所述的方法, 其特征在于, 所述获取单个TCP连接当前的内存剩余量 之后, 还包括 。
5、: 当所述内存剩余量大于所述 TCP 连接对应的当前的内存剩余量上限时, 从当前为所述 TCP 连接分配的内存资源中获取具有第二内存量的内存资源 ; 所述第二内存量为小于所述 第一内存量的固定值 ; 将获取到的具有第二内存量的内存资源释放到公共内存, 并从所述 TCP 连接当前的内 存总量中减少所述第二内存量 ; 重复上述步骤, 直至所述 TCP 连接当前的内存剩余量不大于所述 TCP 连接当前的内存 剩余量上限。 3. 根据权利要求 2 所述的方法, 其特征在于, 所述 TCP 连接还具有内存总量下限, 用于 表示每个 TCP 完成最基本的报文接收动作所需的内存量。 4. 根据权利要求 2 。
6、所述的方法, 其特征在于, 所述方法还包括 : 根据预计的 TCP 连接数量预留公共内存资源, 以供所有 TCP 连接共同使用。 5.根据权利要求1至4中任意一项所述的方法, 其特征在于, 在所述获取单个TCP连接 当前的内存剩余量之前, 还包括 : 从网络适配器 NIC 的网卡芯片的内存中, 获取所述网卡芯片具有的所有内存资源 ; 所 述 NIC 的网卡芯片的内存用于缓存从所述 TCP 连接上接收到的数据信息 ; 将所获取的内存资源, 分配给所有所述网卡芯片对应的 TCP 连接, 以及为与所述网卡 芯片对应的所有 TCP 连接预留的公共内存资源 ; 所述分配给所有所述网卡芯片对应的 TCP 。
7、连接的内存资源的内存量与为与为与所述网卡芯片对应的所有 TCP 连接预留的公共内存 资源的内存量之和不大于所述获取的内存资源的内存量。 6.根据权利要求1所述的方法, 其特征在于, 所述内存剩余量下限与所述TCP连接的内 存总量成正相关关系包括 : 所述内存剩余量下限与所述 TCP 连接的内存总量成正比例关系, 以及所述内存剩余量 下限与所述 TCP 连接的内存总量成正幂次关系。 7. 一种内存分配的装置, 其特征在于, 所述装置包括 : 获取模块, 用于获取单个 TCP 连接当前的内存剩余量, 所述内存剩余量是指为所述 TCP 预留的内存总量中尚未使用的内存量 ; 在所述内存剩余量小于所述 。
8、TCP 连接当前的内存剩 权 利 要 求 书 CN 103761192 A 2 2/2 页 3 余量下限时, 从公共内存资源中获取具有第一内存量的内存资源 ; 所述第一内存量用于表 示所述当前的内存剩余量下限对应的内存量, 所述内存剩余量下限与所述 TCP 连接的内存 总量成正相关关系 ; 管理模块, 用于将所述获取模块获取到的具有第一内存量的内存资源分配给所述 TCP 连接, 并将所述 TCP 连接当前的内存总量增加所述第一内存量 ; 判断模块, 用于在所述管理模块完成获取内存资源并增加内存总量动作后, 判断所述 TCP 连接当前的内存剩余量是否满足不小于所述 TCP 连接当前的内存剩余量下。
9、限 ; 或者, 所 述 TCP 连接当前的内存剩余量小于所述 TCP 连接当前的内存剩余量下限, 但所述内存总量 超出所述内存总量上限的条件。若判断结果为否, 则通知获取模块执行获取所述 TCP 连接 当前的内存剩余量步骤, 否则不进行处理。 8. 根据权利要求 5 所述的装置, 其特征在于, 所述获取模块, 还用于在当前的内存剩 余量大于所述 TCP 连接对应的当前的内存剩余量上限时, 从当前为所述 TCP 连接分配的内 存资源中获取具有第二内存量的内存资源 ; 所述第二内存量为小于所述第一内存量的固定 值 ; 所述管理模块, 还用于将所述获取模块获取到的具有第二内存量的内存资源释放到公 共。
10、内存, 并从所述 TCP 连接当前的内存总量中减少所述第二内存量 ; 所述判断模块, 还用于在所述管理模块完成释放内存资源并减少内存总量动作后, 判 断所述 TCP 连接当前的内存剩余量是否大于所述 TCP 连接当前的内存剩余量上限。当判断 结果为是时, 通知获取模块执行获取所述 TCP 连接当前的内存剩余量的步骤, 否则不进行 处理。 9.根据权利要求6所述的装置, 其特征在于, 所述获取模块还用于从网络适配器NIC的 网卡芯片的内存中, 获取所述网卡芯片具有的所有内存资源 ; 所述 NIC 的网卡芯片的内存 用于缓存从所述 TCP 连接上接收到的数据信息 ; 所述管理模块, 还用于将所获取。
11、的内存资源, 分配给所有所述网卡芯片对应的 TCP 连 接, 以及为与所述网卡芯片对应的所有 TCP 连接预留的公共内存资源 ; 所述分配给所有所 述网卡芯片对应的 TCP 连接的内存资源的内存量与为与为与所述网卡芯片对应的所有 TCP 连接预留的公共内存资源的内存量之和不大于所述获取的内存资源的内存量。 权 利 要 求 书 CN 103761192 A 3 1/8 页 4 一种内存分配的方法和装置 技术领域 0001 本发明涉及数据控制领域, 尤其涉及一种内存分配的方法和装置。 背景技术 0002 随着计算机通信数据量的不断增大, 为了减轻计算机中 CPU 的计算负担, 当两 台计算机通过 。
12、TCP(传输控制协议) 建立连接后, TCP 连接通常会被卸载到 NIC(Network Interface Card, 网络适配器) 的相应芯片中, 进行一定的处理后再上报给 CPU。 0003 这一卸载过程的处理流程为 : 当 NIC 接收来自另一台计算机发送的 TCP 报文后, 会先将该报文装载到一个内存 Block(Block 为数据库中的最小存储和处理单位) 中, 然后 再将该报文上送到 Driver(驱动) 层处理, 再经过一定的处理后, 上报该报文并释放所占用 的内存 Block。但是, Driver(驱动) 层处理的过程会有很大的延时, 而在这个过程中, NIC 还在不断地接收。
13、报文, 因此就需要为 NIC 预先分配一定量的内存 Block, 来缓存接收到的报 文, 但是, 当某一TCP连接的报文数量突然增加时, 就需要为该TCP连接分配很大的内存, 如 果为每个 TCP 连接都按照突发情况预留内存, 就需要系统配置非常大的内存空间, 这在实 际当中是很难实现的。 0004 因此, 在现有的技术方案中, 并不采取按照突发情况来为 TCP 连接来预留内存, 而 仅按照不考虑突发情况时为每个TCP连接分配固定的内存, 所以, 当某个TCP连接出现报文 量突然增大的情况, 为该 TCP 连接分配的固定内存不足时, 就只能按照已分配的内存来进 行缓存, 从而造成丢包的现象。 。
14、发明内容 0005 本发明的实施例提供一种内存分配的方法和装置, 用于解决在 NIC 中为每个 TCP 连接分配固定内存后, 当该 TCP 连接的报文数量突然增大时, 因所分配的固定内存不足而 造成丢包的问题。 0006 为达到上述目的, 本发明的实施例采用如下技术方案 : 0007 第一方面, 本发明实施例提供了一种内存分配的方法, 包括 : 0008 获取单个 TCP 连接当前的内存剩余量, 所述内存剩余量是指为所述 TCP 预留的内 存总量中尚未使用的内存量 ; 0009 当所述内存剩余量小于所述 TCP 连接当前的内存剩余量下限时, 从公共内存资源 中获取具有第一内存量的内存资源 ; 。
15、所述第一内存量用于表示所述当前的内存剩余量下限 对应的内存量, 所述内存剩余量下限与所述 TCP 连接的内存总量成正相关关系 ; 0010 将获取到的具有第一内存量的内存资源分配给所述 TCP 连接, 并将所述 TCP 连接 当前的内存总量增加所述第一内存量 ; 0011 重复上述步骤, 直至所述 TCP 连接当前的内存剩余量不小于所述 TCP 连接当前的 内存剩余量下限 ; 或者, 直至所述TCP连接当前的内存剩余量小于所述TCP连接当前的内存 剩余量下限, 但所述内存总量超出所述内存总量上限。 说 明 书 CN 103761192 A 4 2/8 页 5 0012 结合第一方面, 在第一方。
16、面的第一种可能的实现方式中, 在所述获取单个 TCP 连 接当前的内存剩余量之后, 还包括 : 0013 当所述内存剩余量大于所述 TCP 连接对应的当前的内存剩余量上限时, 从当前为 所述 TCP 连接分配的内存资源中获取具有第二内存量的内存资源 ; 所述第二内存量为小于 所述第一内存量的固定值 ; 0014 将获取到的具有第二内存量的内存资源释放到公共内存, 并从所述 TCP 连接当前 的内存总量中减少所述第二内存量 ; 0015 重复上述步骤, 直至所述 TCP 连接当前的内存剩余量不大于所述 TCP 连接当前的 内存剩余量上限。 0016 结合第一方面的第一种可能的实现方式中, 在第二。
17、种可能的实现方式中, 所述 TCP 连接还具有内存总量下限, 用于表示每个 TCP 完成最基本的报文接收动作所需的内存量。 0017 结合第一方面的第二种可能的实现方式中, 在第三种可能的实现方式中, 所述方 法还包括 : 0018 根据预计的 TCP 连接数量预留公共内存资源, 以供所有 TCP 连接共同使用。 0019 结合第一方面的第三种可能的实现方式中, 在第四种可能的实现方式中, 在所述 获取单个 TCP 连接当前的内存剩余量之前, 还包括 : 0020 从网络适配器 NIC 的网卡芯片的内存中, 获取所述网卡芯片具有的所有内存资 源 ; 所述 NIC 的网卡芯片的内存用于缓存从所述。
18、 TCP 连接上接收到的数据信息 ; 0021 将所获取的内存资源, 分配给所有所述网卡芯片对应的 TCP 连接, 以及为与所述 网卡芯片对应的所有 TCP 连接预留的公共内存资源 ; 所述分配给所有所述网卡芯片对应的 TCP 连接的内存资源的内存量与所述为与所述网卡芯片对应的所有 TCP 连接预留的公共内 存资源的内存量之和不大于所述获取的内存资源的内存量。 0022 结合第一方面的第四种可能的实现方式中, 在第五种可能的实现方式中, 所述内 存剩余量下限与所述 TCP 连接的内存总量成正相关关系包括 : 0023 所述内存剩余量下限与所述 TCP 连接的内存总量成正比例关系, 以及所述内存。
19、剩 余量下限与所述 TCP 连接的内存总量成正幂次关系。 0024 第二方面, 本发明实施例提供了一种内存分配的装置, 所述装置包括 : 0025 获取模块, 用于获取单个 TCP 连接当前的内存剩余量, 所述内存剩余量是指为所 述 TCP 预留的内存总量中尚未使用的内存量 ; 在所述内存剩余量小于所述 TCP 连接当前的 内存剩余量下限时, 从公共内存资源中获取具有第一内存量的内存资源 ; 所述第一内存量 用于表示所述当前的内存剩余量下限对应的内存量, 所述内存剩余量下限与所述 TCP 连接 的内存总量成正相关关系 ; 0026 管理模块, 用于将所述获取模块获取到的具有第一内存量的内存资源。
20、分配给所述 TCP 连接, 并将所述 TCP 连接当前的内存总量增加所述第一内存量 ; 0027 判断模块, 用于在所述管理模块完成获取内存资源并增加内存总量动作后, 判断 所述 TCP 连接当前的内存剩余量是否满足不小于所述 TCP 连接当前的内存剩余量下限 ; 或 者, 所述TCP连接当前的内存剩余量小于所述TCP连接当前的内存剩余量下限, 但所述内存 总量超出所述内存总量上限的条件。若判断结果为否, 则通知获取模块执行获取所述 TCP 连接当前的内存剩余量步骤, 否则不进行处理。 说 明 书 CN 103761192 A 5 3/8 页 6 0028 结合第二方面, 在第一种可能的实现方。
21、式中, 所述获取模块, 还用于在当前的内存 剩余量大于所述 TCP 连接对应的当前的内存剩余量上限时, 从当前为所述 TCP 连接分配的 内存资源中获取具有第二内存量的内存资源 ; 所述第二内存量为小于所述第一内存量的固 定值 ; 0029 所述管理模块, 还用于将所述获取模块获取到的具有第二内存量的内存资源释放 到公共内存, 并从所述 TCP 连接当前的内存总量中减少所述第二内存量 ; 0030 所述判断模块, 还用于在所述管理模块完成释放内存资源并减少内存总量动作 后, 判断所述TCP连接当前的内存剩余量是否大于所述TCP连接当前的内存剩余量上限。 当 判断结果为是时, 通知获取模块执行获。
22、取所述 TCP 连接当前的内存剩余量的步骤, 否则不 进行处理。 0031 结合第二方面, 在第二种可能实现的方式中, 所述获取模块还用于从网络适配器 NIC 的网卡芯片的内存中, 获取所述网卡芯片具有的所有内存资源 ; 所述 NIC 的网卡芯片的 内存用于缓存从所述 TCP 连接上接收到的数据信息 ; 0032 所述管理模块, 还用于将所获取的内存资源, 分配给所有所述网卡芯片对应的 TCP 连接, 以及为与所述网卡芯片对应的所有 TCP 连接预留的公共内存资源 ; 所述分配给所有 所述网卡芯片对应的 TCP 连接的内存资源的内存量与所述为与所述网卡芯片对应的所有 TCP 连接预留的公共内存。
23、资源的内存量之和不大于所述获取的内存资源的内存量。 0033 本发明实施例提供的一种内存分配的方法和装置, 通过在单个 TCP 连接当前的内 存剩余量小于该 TCP 连接当前的内存剩余量下限时, 从公共内存资源中获取具有当前内存 剩余量下限所对应的内存量的内存资源, 分配给该TCP连接, 并增加该TCP连接对应的内存 总量, 进而引起与内存总量相关的内存剩余量下限的增加, 最后重复为该 TCP 分配具有当 前内存剩余量的内存的方式, 在该TCP连接的报文数量突然增加时, 就能够为该TCP连接按 照其不断增加的内存剩余量下限的内存量快速分配内存资源, 直到为该 TCP 连接分配的内 存能够满足其。
24、内存需求为止, 这样, 通过根据 TCP 连接当前的内存使用情况为其动态分配 内存资源的方式, 避免了因 TCP 连接上的报文数量突然增加, 而造成预留的固定内存资源 不足, 进而出现的丢包的问题。 附图说明 0034 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本 发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动的前提下, 还可以 根据这些附图获得其他的附图。 0035 图 1 为本发明实施例提供的一种内存分配的方法流程图 ; 0036 图 2 为本发明实施例提供。
25、的一种内存分配量增加的变化示意图 ; 0037 图 3 为本发明实施例提供的另一种内存分配的方法流程图 ; 0038 图 4 为本发明实施例提供的一种内存分配量减少的变化示意图 ; 0039 图 5 为本发明实施例提供的一种内存分配的装置示意图。 具体实施方式 说 明 书 CN 103761192 A 6 4/8 页 7 0040 下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是全部的实施例。基于 本发明中的实施例, 本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例, 都属于本发。
26、明保护的范围。 0041 本发明实施例提供了一种内存分配的方法, 其方法流程如图 1 所示, 具体包括 : 0042 101、 获取单个 TCP 连接当前的内存剩余量。 0043 其中, 所述内存剩余量是指为所述 TCP 预留的内存总量中尚未使用的内存量。所 述内存总量为该TCP所能使用的所有内存资源, 可以在初始化时, 根据预计的TCP数量为每 个TCP连接预留, 内存总量具有上限和下限, 内存总量下限用于防止为单个TCP连接分配过 多而影响其它 TCP 连接的内存资源的分配, 内存资源的下限是用于防止为单个 TCP 连接所 分配的内存资源过少, 而造成该 TCP 连接不能够完成最基本的报文。
27、接收动作。 0044 其中, 在本方方法实施例中, 内存量可以优选使用 Block 数作为衡量单位。 0045 102、 当所述内存剩余量小于所述 TCP 连接当前的内存剩余量下限时, 从公共内存 资源中获取具有第一内存量的内存资源。 0046 其中, 所述公共内存资源为在为每个 TCP 连接预留的内存资源之外, 单独配置的 一定数量的内存资源, 为所有的TCP连接所共享, 当任意一个TCP连接出现内存不足的情况 时, 就可以从该公共内存资源中分配一定量的内存给该 TCP 连接。所述第一内存量用于表 示所述当前的内存剩余量下限对应的内存量, 所述内存剩余量下限与所述 TCP 连接的内存 总量成。
28、正相关关系, 其中, 正相关关系包含正比关系, 以及正幂次关系等, 例如 : 当用 Lcur 表示某个 TCP 当前的内存总量, 用 Ladd 表示该 TCP 连接当前的内存剩余量下限时, Lcur 与 Ladd 之间的数量关系可设定为正比关系, 比如, Ladd=XLcur(01, 0X1)。 0047 另外, 当某个 TCP 连接的内存剩余量小于其当前的内存剩余量下限时, 就可以认 为此时该TCP连接的内存量不能够满足报文接收的需要, 那么, 就需要为该TCP连接分配内 存资源。 0048 103、 将获取到的具有第一内存量的内存资源分配给所述 TCP 连接, 并将所述 TCP 连接当前的。
29、内存总量增加所述第一内存量。 0049 其中, 所述分配内存资源给 TCP 连接的方式, 可选择从存放公共内存资源的公共 池中搬移相应数量的内存到存放 TCP 内存资源的内存池中, 本发明在此不做更多的限制。 0050 另外, 需要说明的是, 因为所述内存剩余量下限与 TCP 连接的当前内存总量成正 相关关系, 所以当所述TCP连接当前的内存总量增加第一内存量时, 该TCP连接的内存剩余 量下限也需要根据新的内存总量重新计算, 计算的方式可采用步骤 102 中的说明中的相关 方法, 在此不再赘述。 0051 104、 判断所述TCP连接当前的内存剩余量是否满足不小于所述TCP连接当前的内 存剩。
30、余量下限 ; 或者, 所述TCP连接当前的内存剩余量小于所述TCP连接当前的内存剩余量 下限, 但所述内存总量超出所述内存总量上限的条件。 若判断结果为否, 则执行步骤101, 否 则不进行处理。 0052 其中, 当判断出 TCP 连接当前的内存剩余量不小于其当前的内存剩余量下限时, 说明当前的内存总量已经足够当前的内存需要了, 当前所分配的内存中还剩余了不少, 因 说 明 书 CN 103761192 A 7 5/8 页 8 此, 内存所剩余的量一旦超过内存剩余量下限时, 就不再为该 TCP 连接继续分配内存资源 了。 0053 其中, 当判断出所述 TCP 连接当前的内存剩余量小于所述 。
31、TCP 连接当前的内存剩 余量下限, 但所述内存总量超出所述内存总量上限的条件时, 说明为该 TCP 连接分配的内 存还不能够满足其内存需求, 但是, 已经达到内存总量上限了, 不允许再为其分配更多的内 存资源, 防止为其无休止地分配内存资源, 从而对其它的 TCP 连接造成影响。 0054 为了更清楚地说明增加所分配的内存时, 上述步骤 101 至 104 中各个量的变化情 况, 本发明实施例以进行3次调整后满足内存需求为例, 给出单个TCP连接的内存量及上下 限的变化过程, 具体如图 2 所示, 其中 Lcur(x=0、 1、 2.) 表示第 x 次调整后当前的内存总 量, Lhold(x。
32、=0、 1、 2.) 表示第 x 次调整后当前的内存剩余量, Ladd(x=0、 1、 2.) 表示第 x 次调整后当前的内存剩余量下限, Lcur(max) 表示内存总量上限, Lcur(min) 表示内存 总量下限, 且存在如下数量关系 : 0055 Lcur(0) +Ladd(0) =Lcur(1) , 0056 Lcur(1) +Ladd(1) =Lcur(2) , 0057 Ladd(0) =Lcur(0) /n, 0058 Ladd(1) =Lcur(1) /n, 0059 Ladd(2) =Lcur(2) /n, 0060 其中, n的值表示Ladd与Lcur之间数量的正相关关系。
33、, 可根根具体情况进行设定。 0061 另外, 当同时存在多个 TCP 连接的报文数量突然增加的情况时, 其内存分配方法 与单个 TCP 连接的内存分配方法相同, 在此不再赘述。 0062 另外, 对 TCP 连接的内存分配可优选由 ToE(TCP offload Engin, TCP 卸载引擎) 完成, 所述 ToE 存在于支持 TCP 协议卸载的 NIC 的网卡芯片中, NIC 的网卡芯片中所配置的 内存专门用于缓存从所述 TCP 连接上接收到的数据信息, 其内存量受芯片面积、 功耗、 成本 等因素限制, 一般仅为几百兆字节。 0063 需要特别说明的是, 在步骤101之前, 还需要从网络。
34、适配器NIC的网卡芯片的内存 中, 获取所述网卡芯片具有的所有内存资源, 并将所获取的内存资源, 分配给所有所述网卡 芯片对应的TCP连接, 以及为与所述网卡芯片对应的所有TCP连接预留的公共内存资源。 其 中, 分配给所有所述网卡芯片对应的 TCP 连接的内存资源的内存量与为与所述网卡芯片对 应的所有 TCP 连接预留的公共内存资源的内存量之和不大于所获取的内存资源的内存量。 0064 本发明实施例提供的一种内存分配的方法, 通过在单个 TCP 连接当前的内存剩余 量小于该 TCP 连接当前的内存剩余量下限时, 从公共内存资源中获取具有当前内存剩余量 下限所对应的内存量的内存资源, 分配给该。
35、 TCP 连接, 并增加该 TCP 连接对应的内存总量, 进而引起与内存总量相关的内存剩余量下限的增加, 最后重复为该 TCP 分配具有当前内存 剩余量的内存的方式, 在该TCP连接的报文数量突然增加时, 就能够为该TCP连接按照其不 断增加的内存剩余量下限的内存量快速分配内存资源, 直到为该 TCP 连接分配的内存能够 满足其内存需求为止, 这样, 通过根据 TCP 连接当前的内存使用情况为其动态分配内存资 源的方式, 避免了因 TCP 连接上的报文数量突然增加, 而造成预留的固定内存资源不足, 进 而出现的丢包的问题。 0065 为了进一步说明当 TCP 连接上的内存量超出所需时, 如何减。
36、少为该 TCP 连接分配 说 明 书 CN 103761192 A 8 6/8 页 9 的内存资源, 在本发明实施例的一种实现方式中, 还提供了如下方法流程, 具体如图 3 所 示, 包括 : 0066 301、 获取单个 TCP 连接当前的内存剩余量。 0067 302、 当所获取的内存剩余量大于所述 TCP 连接对应的当前的内存剩余量上限时, 从当前为所述 TCP 连接分配的内存资源中获取具有第二内存量的内存资源。 0068 其中, 所述第二内存量可以为根据实际情况进行设定的固定值, 其大小小于所述 第一内存量, 通常可选择1个Block的量作为第二内存量。 所述内存剩余量上限为根据当前 。
37、内存总量设定的值, 当用 Lhold(max) 表示内存剩余量上限, 用 Lcur 表示当前内存总量时, 内存剩余量上限与当前内存总量的关系可以为 Lhold(max) : Lcur=1:5, 或者, Lhold(max) : Lcur=3:10 等, 具体可根据实际情况进行设定, 本发明实施例对此不作更多的限定。 0069 另外, 当所述TCP连接的内存剩余量大于该上限时, 说明为该TCP连接分配的内存 超出了其所需的内存量, 因此可以减少为该 TCP 连接所分配的内存资源了。 0070 303、 将获取到的具有第二内存量的内存资源释放到公共内存, 并从所述 TCP 连接 当前的内存总量中减。
38、少所述第二内存量。 0071 其中, 在判断出为所述 TCP 连接所分配的内存资源已经超出了其所需的内存量 时, 就通过将将具有第二内存量的内存资源释放到公共内存中来减少为该 TCP 连接所分配 的内存, 并且释放到公共内存中的内存资源还能够供其它 TCP 连接使用。 0072 304、 判断所述TCP连接当前的内存剩余量是否大于所述TCP连接当前的内存剩余 量上限。当判断结果为是时, 执行步骤 101, 否则不进行处理。 0073 其中, 当所述 TCP 连接当前的内存剩余量不大于其当前的内存剩余量上限时, 说 明为当前的 TCP 所分配的内存资源中剩余的量不多, 此时的内存占用率很高, 再。
39、减少时可 能会再出现内存不足的现象, 因此可以不做处理。 0074 为了更清楚地说明减少所分配的内存时, 上述步骤 301 至 304 中各个量的变化情 况, 本发明实施例以进行n次调整后满足内存需求为例, 给出单个TCP连接的内存量及上下 限的变化过程, 具体如图 4 所示, 其中 Lcur(x=0、 1、 2.) 表示第 x 次调整后当前的内存总 量, Lhold(x=0、 1、 2.) 表示第 x 次调整后当前的内存剩余量, Lhold(max, x=0、 1、 2.) 表示第 x 次调整后当前的内存剩余量上限, Lcur(max) 表示内存总量上限, Lcur(min) 表 示内存总量。
40、下限, 且存在如下数量关系 : 0075 Lcur(0) -m=Lcur(1) , 0076 Lcur(1) -m=Lcur(2) , 0077 其中, m 表示固定的内存减少量, 其值可根根具体情况进行设定。 0078 另外, 当同时减少多个TCP连接的内存资源时, 其内存分配方法与单个TCP连接的 内存分配方法相同, 在此不再赘述。 0079 在本实施方式中, 通过在 TCP 连接当前的内存剩余量大于其当前的内存剩余量上 限时, 将小于当前内存剩余量下限的固定内存量的内存从该 TCP 连接的内存资源中释放到 公共内存方法, 使得当为某个 TCP 连接分配的内存资源过多时, 能够将多余的内存。
41、缓慢地 释放到公共内存中, 以供其它TCP连接在需要时使用, 避免了因为每个TCP连接所预留的内 存多于其所需时, 内存资源没有被有效利用而造成的内存浪费。 0080 本发明另一实施例提供了一种内存分配的装置, 如图5所示, 用以实现如图1和图 说 明 书 CN 103761192 A 9 7/8 页 10 3 中所示的方法流程, 所述装置包括 : 0081 获取模块 51, 用于获取单个 TCP 连接当前的内存剩余量, 所述内存剩余量是指为 所述 TCP 预留的内存总量中尚未使用的内存量 ; 在所述内存剩余量小于所述 TCP 连接当前 的内存剩余量下限时, 从公共内存资源中获取具有第一内存量。
42、的内存资源 ; 所述第一内存 量用于表示所述当前的内存剩余量下限对应的内存量, 所述内存剩余量下限与所述 TCP 连 接的内存总量成正相关关系。 0082 管理模块 52, 用于将所述获取模块 51 获取到的具有第一内存量的内存资源分配 给所述 TCP 连接, 并将所述 TCP 连接当前的内存总量增加所述第一内存量。 0083 判断模块 53, 用于在所述管理模块 52 完成获取内存资源并增加内存总量动作后, 判断所述 TCP 连接当前的内存剩余量是否满足不小于所述 TCP 连接当前的内存剩余量下 限 ; 或者, 所述 TCP 连接当前的内存剩余量小于所述 TCP 连接当前的内存剩余量下限, 。
43、但所 述内存总量超出所述内存总量上限的条件。若判断结果为否, 则通知获取模块执行获取所 述 TCP 连接当前的内存剩余量步骤, 否则不进行处理。 0084 可选的是, 所述获取模块 51, 还用于在当前的内存剩余量大于所述 TCP 连接对应 的当前的内存剩余量上限时, 从当前为所述 TCP 连接分配的内存资源中获取具有第二内存 量的内存资源 ; 所述第二内存量为小于所述第一内存量的固定值。 0085 所述管理模块 52, 还用于将所述获取模块 51 获取到的具有第二内存量的内存资 源释放到公共内存, 并从所述 TCP 连接当前的内存总量中减少所述第二内存量。 0086 所述判断模块 53, 还。
44、用于在所述管理模块 52 完成释放内存资源并减少内存总量 动作后, 判断所述 TCP 连接当前的内存剩余量是否大于所述 TCP 连接当前的内存剩余量上 限。当判断结果为是时, 通知获取模块执行获取所述 TCP 连接当前的内存剩余量的步骤, 否 则不进行处理。 0087 可选的是, 所述获取模块 51, 还用于从网络适配器 NIC 的网卡芯片的内存中, 获取 所述网卡芯片具有的所有内存资源 ; 所述 NIC 的网卡芯片的内存用于缓存从所述 TCP 连接 上接收到的数据信息。 0088 所述管理模块 52, 还用于将所获取的内存资源, 分配给所有所述网卡芯片对应的 TCP 连接, 以及为与所述网卡。
45、芯片对应的所有 TCP 连接预留的公共内存资源 ; 所述分配给所 有所述网卡芯片对应的 TCP 连接的内存资源的内存量与所述为与所述网卡芯片对应的所 有 TCP 连接预留的公共内存资源的内存量之和不大于所述获取的内存资源的内存量。 0089 本发明实施例提供的一种内存分配的装置, 通过在单个 TCP 连接当前的内存剩余 量小于该 TCP 连接当前的内存剩余量下限时, 从公共内存资源中获取具有当前内存剩余量 下限所对应的内存量的内存资源, 分配给该 TCP 连接, 并增加该 TCP 连接对应的内存总量, 进而引起与内存总量相关的内存剩余量下限的增加, 最后重复为该 TCP 分配具有当前内存 剩余。
46、量的内存的方式, 在该TCP连接的报文数量突然增加时, 就能够为该TCP连接按照其不 断增加的内存剩余量下限的内存量快速分配内存资源, 直到为该 TCP 连接分配的内存能够 满足其内存需求为止, 这样, 通过根据 TCP 连接当前的内存使用情况为其动态分配内存资 源的方式, 避免了因 TCP 连接上的报文数量突然增加, 而造成预留的固定内存资源不足, 进 而出现的丢包的问题。 0090 通过以上的实施方式的描述, 所属领域的技术人员可以清楚地了解到本发明可借 说 明 书 CN 103761192 A 10 8/8 页 11 助软件加必需的通用硬件的方式来实现, 当然也可以通过硬件, 但很多情况。
47、下前者是更佳 的实施方式。基于这样的理解, 本发明的技术方案本质上或者说对现有技术做出贡献的部 分可以以软件产品的形式体现出来, 该计算机软件产品存储在可读取的存储介质中, 如计 算机的软盘, 硬盘或光盘等, 包括若干指令用以使得一台计算机设备 (可以是个人计算机, 服务器, 或者网络设备等) 执行本发明各个实施例所述的方法。 0091 以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不局限于此, 任何 熟悉本技术领域的技术人员在本发明揭露的技术范围内, 可轻易想到变化或替换, 都应涵 盖在本发明的保护范围之内。 因此, 本发明的保护范围应以所述权利要求的保护范围为准。 说 明 书 CN 103761192 A 11 1/4 页 12 图 1 说 明 书 附 图 CN 103761192 A 12 2/4 页 13 图 2 说 明 书 附 图 CN 103761192 A 13 3/4 页 14 图 3 说 明 书 附 图 CN 103761192 A 14 4/4 页 15 图 4 图 5 说 明 书 附 图 CN 103761192 A 15 。