我们使用测试性能的工具,unixbench,它有一下几项测试项目:
Execl Throughput 每秒钟执行 execl 系统调用的次数
Pipe Throughput 一秒钟内一个进程向一个管道写512字节数据然后再读回的次数
Pipe-based Context Switching 两个进程(每秒钟)通过一个管道交换一个不断增长的整数的次数
Process Creation 每秒钟一个进程可以创建子进程然后收回子进程的次数(子进程一定立即退出)
Shell Scripts (1 concurrent) 一秒钟一个进程可以并发地开始一个 shell 脚本的 1个拷贝的次数
Shell Scripts (8 concurrent) 一秒钟内一个进程可以并发地开始一个 shell 脚本的 8个拷贝的次数
System Call Overhead 进入和离开操作系统内核的代价
测试结果类似如下:
Benchmark Run: Wed Apr 18 2018 14:54:55 - 15:23:15
16 CPUs in system; running 1parallel copy of tests
Dhrystone2 using register variables 24249307.1 lps (10.0 s, 7samples)
Double-Precision Whetstone 2867.3 MWIPS (10.0 s, 7samples)
Execl Throughput2447.9 lps (29.9 s, 2samples)
File Copy1024 bufsize 2000 maxblocks 547726.0 KBps (30.0 s, 2samples)
File Copy256 bufsize 500 maxblocks 149186.7 KBps (30.0 s, 2samples)
File Copy4096 bufsize 8000 maxblocks 1297448.0 KBps (30.0 s, 2samples)
Pipe Throughput946343.5 lps (10.0 s, 7samples)
Pipe-based Context Switching 186950.1 lps (10.0 s, 7samples)
Process Creation7092.8 lps (30.0 s, 2samples)
Shell Scripts (1 concurrent) 5631.6 lpm (60.0 s, 2samples)
Shell Scripts (8 concurrent) 2726.4 lpm (60.0 s, 2samples)
System Call Overhead905666.4 lps (10.0 s, 7 samples)
测试了/boot/grub2/grub.cfg 中audit=0,和去除audit=0,以及开启auditd服务等的性能数据:
1、内核参数去掉audit=0,auditd服务默认不启动:这种情况性能没有太大变化;
2、服务开启,auditctl -D删除所有可配置规则:这种情况Pipe Throughput下降近20%,System Call Overhead下降35%,其他下降%2-10%左右;
3、删除所有规则,配置 -a never,task取消系统调用的审计:性能没有太大变化;
4、配置-a never,task,配置audit目录访问,提权,账户变更等基本规则:性能变化不大;
5、audit服务开启,配置pci-dss规则,没有取消系统调用审计:Pipe Throughput下降近30%,System Call Overhead下降近50%,Pipe-based Context Switching下降10%,其他下降%2-10%左右;
从性能结果可以看到,开启内核参数,这个对性能影响不大,但是开启auditd服务后对性能影响就比较明显。
这里需要注意的是,如果auditd服务开启后,再服务停止,auditctl –e 0,性能也没有上升,依然比较差,是因为在audit内核处理中,会判断是否曾经开启过即auditctl -s查询的enabled项,只要开启了,即使后面设置auditctl –e 0后,系统调用依然会走audit流程,这就会影响系统性能。具体代码在arch/x86/kernel/entry_64.S,copy_process()中 ,int audit_alloc函数。
另外,如果配置 -a never,task后,所有的审计 type类型为SYSCALL的都不会记录了,一般情况下是要对系统调用进行审计的。