测试方法
基于使用场景,最后⽣成的规则会是按照 ip 或者 ip:port
来进行过滤,测试时将使用10万条 iptables
规则来模拟对性能的压力;为了最大化测试压力情况,10万条 iptables
规则将都是==不会匹配==机房流量,通俗来讲,就是链式匹配会进行所有匹配并最后以无匹配告终。
网络负载的模拟将使用同机房 scp
来模拟,并按照下述条件进行匹配:
- 查看正常的拷贝速度,cpu负载等
- 我们建⽴10万条的普通
iptables
规则,查看规则建立速度,拷贝速度,CPU负载,CPU主要耗时操作等 - 我们建⽴10万的
ipset
,并把普通的iptables
规则转为结合ipset
的规则,查看规则建立速度,拷贝速度,CPU负载,CPU主要耗时等。
实验开始
步骤一:在同机房的⼀个机器构造⼀个大文件
同机房拷贝
观察网卡速度,CPU,系统主要耗时操作的等,此场景将在iptables
规则为空的情况下进行观察
使用 sar
观测网卡速度
使用 top
观察CPU负载
使用 perf top -G
观察CPU占用
步骤二:创建10万条iptables,观察⽹卡速度、cpu、系统主要耗时操作的等,会发现cpu利⽤率⼤部分被ipt占⽤,拷⻉速度下降到不到⼗分之⼀
|
|
执行脚本
|
|
观察添加规则后的⽹卡速度,CPU,系统主要耗时操作的等
使用 sar
观测网卡速度
使用 top
观察CPU负载
使用 perf top -G
观察CPU占用
步骤三:使用ipset替换iptables
此时改为使⽤ ipset
⽅式观察网卡卡速度,CPU,系统主要耗时操作的等,会发现跟没有规则没有明显变化。ipset的内存量不到2M。初步估计内存使⽤量 = $hashsize \times 16 + 存⼊数 \times (4~32之间)$
|
|
执行脚本
|
|
观察添加规则后的⽹卡速度,CPU,系统主要耗时操作的等
使用 sar
观测网卡速度
使用 top
观察CPU负载
使用 perf top -G
观察CPU占用
|
|
总结:ipset对于CPU和内存的影响很小,在大量规则场景下符合预期