nf_conntrack_buckets

conntrack_max 推荐默认值

CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)

4是hash表里的链表最大长度, 推荐 4 或者 8
HASHSIZE = CONNTRACK_MAX / 4

32位系统 虚拟内存1G, 能用的有896M
64位系统 256T, 能用一半

ARCH: 为CPU架构, 32 或 64。

  • 32位 256M内存:
    CONNTRACK_MAX = (25610241024)/16384/(32/32) = 16384
    HASHSIZE = 16384/4 = 4096

  • 64位 8G内存:
    CONNTRACK_MAX = (810241024*1024)/16384/(64/32) = 262144
    HASHSIZE = 262144/4 = 65536

conntrack 占用内存计算

size_of_mem_used_by_conntrack(in bytes) = CONNTRACK_MAX * sizeof(struct ip_conntrack) + HASHSIZE * sizeof(struct list_head)

sizeof(struct ip_conntrack): 352B
sizeof(struct list_head) = 2 * size_of_a_pointer: 32bit 4B, 64bit 8B

  • 32位系统 buckets:4096, max:16384
    16384 * 352 + 4096 * 4 = 5MB

  • 32位系统 buckets:1024, max:4096
    4096 * 352 + 1024 * 4 = 1.37MB

  • 64位系统 buckets: 262144, max: 1048576
    1048576 * 352 + 262144 * 8 = 371195904(354 MB)

posted on 2023-06-28 10:35  listenerln  阅读(46)  评论(0编辑  收藏  举报