searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

nf_conntrack 相关总结

2024-08-30 09:39:43
7
0

1. nf_conntrack 内核相关参数查看
$ sysctl -a | grep nf_conntrack

bucket_len = nf_conntrack_max / nf_conntrack_buckets。系统默认是4

sysctl -a | grep net.netfilter.nf_conntrack_buckets
net.netfilter.nf_conntrack_buckets = 65536
sysctl -a | grep net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_max = 2310720
或者
cat /proc/sys/net/netfilter/nf_conntrack_buckets 
cat /proc/sys/net/netfilter/nf_conntrack_max
使用情况conntrack跟踪表使用情况:sudo sysctl net.netfilter.nf_conntrack_count; 

sudo ovs-appctl dpctl/dump-conntrack ovs conntrack命令

设置后使系统重启还能生效
# 设置bucket数
echo 'net.netfilter.nf_conntrack_buckets = 163840' > /etc/sysctl.conf

# 设置最大连接跟踪数
echo 'net.netfilter.nf_conntrack_max = 655360' > /etc/sysctl.conf

# 使用配置立马生产
sysctl -p


2.nf_conntrack最大数目
如果在模块加载时没有指定hashsize参数,内核将根据内存大小计算哈希表的大小。
对于1G内存,依据以上公式可得:1024 * 1024 * 1024 / 16384 / 8 = 16384; 对于4G内存,可得到哈希表大小为65536。以下规定当内存大于4G时,
哈希大小固定为65536。而对于大于1G小于4G内存的情况,哈希大小固定使用16384。
最后,nf_conntrack_htable_size的最小值为32。

主机上pod的最大连接数都是一样的
ns独立的有自己独立的conntrack,个数独立
ns主机的,那么conntrack数目是一样的

3. 占用内存
total_mem_used(bytes) = conntrack_max * sizeof(struct ip_conntrack) + conntrack_buckets * sizeof(struct list_head)
在ubuntu上, ip_conntrack结构的大小为328字节,list_head的大小为8字节
对于上面的配置,nf_conntrack_max设为655360,nf_conntrack_buckets设为163840,则内存使用量为:
total_mem_used(MB) = (655360*328+163840*8)/1024^2 = 206.25

4. 如果满了丢包,那么内核的日志:
nf_conntrack: table full, dropping packe

 

0条评论
0 / 1000
翟云箭
5文章数
0粉丝数
翟云箭
5 文章 | 0 粉丝
原创

nf_conntrack 相关总结

2024-08-30 09:39:43
7
0

1. nf_conntrack 内核相关参数查看
$ sysctl -a | grep nf_conntrack

bucket_len = nf_conntrack_max / nf_conntrack_buckets。系统默认是4

sysctl -a | grep net.netfilter.nf_conntrack_buckets
net.netfilter.nf_conntrack_buckets = 65536
sysctl -a | grep net.netfilter.nf_conntrack_max
net.netfilter.nf_conntrack_max = 2310720
或者
cat /proc/sys/net/netfilter/nf_conntrack_buckets 
cat /proc/sys/net/netfilter/nf_conntrack_max
使用情况conntrack跟踪表使用情况:sudo sysctl net.netfilter.nf_conntrack_count; 

sudo ovs-appctl dpctl/dump-conntrack ovs conntrack命令

设置后使系统重启还能生效
# 设置bucket数
echo 'net.netfilter.nf_conntrack_buckets = 163840' > /etc/sysctl.conf

# 设置最大连接跟踪数
echo 'net.netfilter.nf_conntrack_max = 655360' > /etc/sysctl.conf

# 使用配置立马生产
sysctl -p


2.nf_conntrack最大数目
如果在模块加载时没有指定hashsize参数,内核将根据内存大小计算哈希表的大小。
对于1G内存,依据以上公式可得:1024 * 1024 * 1024 / 16384 / 8 = 16384; 对于4G内存,可得到哈希表大小为65536。以下规定当内存大于4G时,
哈希大小固定为65536。而对于大于1G小于4G内存的情况,哈希大小固定使用16384。
最后,nf_conntrack_htable_size的最小值为32。

主机上pod的最大连接数都是一样的
ns独立的有自己独立的conntrack,个数独立
ns主机的,那么conntrack数目是一样的

3. 占用内存
total_mem_used(bytes) = conntrack_max * sizeof(struct ip_conntrack) + conntrack_buckets * sizeof(struct list_head)
在ubuntu上, ip_conntrack结构的大小为328字节,list_head的大小为8字节
对于上面的配置,nf_conntrack_max设为655360,nf_conntrack_buckets设为163840,则内存使用量为:
total_mem_used(MB) = (655360*328+163840*8)/1024^2 = 206.25

4. 如果满了丢包,那么内核的日志:
nf_conntrack: table full, dropping packe

 

文章来自个人专栏
云网络和SDN
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0