EBWi11 / AgentSmith-HIDS

By Kprobe technology Open Source Host-based Intrusion Detection System(HIDS), from E_Bwill.
GNU General Public License v2.0
588 stars 166 forks source link

关于性能测试及资源占用控制 #4

Closed wcc526 closed 5 years ago

wcc526 commented 5 years ago

https://github.com/DianrongSecurity/AgentSmith-HIDS/blob/master/doc/AgentSmith-HIDS%20Hook%20Design%20BencheMark(Netlink).md

由于 hook的是系统调用,wrk是web的benchmark工具,个人觉得不能很好的反映实际对系统影响

我们这边测试 audit由于会filter系统调用,相关影响和应用产生的系统调用次数有关,每秒20次系统调用的话,会有5%的延迟增加,

测试方法 从/dev/zero中读取500个字节数据并写入到/dev/null中,循环执行1亿次(也就是100M):

dd if=/dev/zero of=/dev/null bs=500 count=100M

该脚本会产生大约2亿次系统调用(read 1亿次,write 1亿次)。

测试目标 总耗时(s) 延迟影响 平均耗时(μs)
不加任何事件监听 42.3224   0.2116
auditd 47.6929 +12.68% 0.2385

另外你们是怎么做agent资源控制的?避免影响机器上的业务?

具体思路可以参考以下文章

EBWi11 commented 5 years ago

是这样的,由于我们hook了connect这个syscall,所以当我们尝试用wrk做压力测试打时候,自然而然的也会测试到我们的HIDS。agent资源控制因为极限测试表现良好,我们就没有限制,最开始是准备用cgroup来做的。

wcc526 commented 5 years ago

个人觉得wrk不能作为极限环境的测试,wrk能产生多少次系统调用,有具体的统计数据吗?

hook系统调用的相关影响和应用产生的系统调用次数有关

我们这边auditd相关测试发现hook系统调用对于 web服务(nginx)这种来说几乎没有延迟影响,猜测是没产生多少系统调用 。

image

测试时建议加大系统调用次数。可以用dd 先跑下,最直观明了.

dd if=/dev/zero of=/dev/null bs=500 count=100M

此外系统内核低于2.6.32-296 不能加cgroup,这个版本cgroup 有bug, 一旦超了限制,cgroup 会把所有进程给杀了,这个我们线上环境出现过,详情可见https://access.redhat.com/solutions/649543

EBWi11 commented 5 years ago

非常感谢!谢谢指点

EBWi11 commented 5 years ago

@wcc526 我看了下,wrk测试实际调用的syscall的确很低,非常感谢。我会尝试用您的方案测试。

EBWi11 commented 5 years ago

@wcc526 我又仔细的看了一下这个问题,我认为你好像对我们项目有些理解上的问题。 1.我们使用wrk是想测试connect这个系统调用,而issue建议使用了read/write的测试方法,我认为这是不妥的,而且我们那份测试报告汇总的确是明确的需要测试connect syscall而非其他。 2.nginx keepalive_timeout低的情况下触发connect低也的确是出现了的,我们正在寻求其他解决方法。 3.希望在讨论的时候明确自己的方式/hook的具体syscall等细节,比如问题中所述的:“hook系统调用对于 web服务(nginx)这种来说几乎没有延迟影响”很有可能是没有hook对的syscall,或者你们server有很长的keepalive_timeout,没有建立新的连接等等,造成影响小的情况。(瞎猜)