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)