我们使用测试性能的工具,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 1 parallel copy of tests Dhrystone 2 using register variables 24249307.1 lps (10.0 s, 7 samples) Double-Precision Whetstone 2867.3 MWIPS (10.0 s, 7 samples) Execl Throughput 2447.9 lps (29.9 s, 2 samples) File Copy 1024 bufsize 2000 maxblocks 547726.0 KBps (30.0 s, 2 samples) File Copy 256 bufsize 500 maxblocks 149186.7 KBps (30.0 s, 2 samples) File Copy 4096 bufsize 8000 maxblocks 1297448.0 KBps (30.0 s, 2 samples) Pipe Throughput 946343.5 lps (10.0 s, 7 samples) Pipe-based Context Switching 186950.1 lps (10.0 s, 7 samples) Process Creation 7092.8 lps (30.0 s, 2 samples) Shell Scripts (1 concurrent) 5631.6 lpm (60.0 s, 2 samples) Shell Scripts (8 concurrent) 2726.4 lpm (60.0 s, 2 samples) System Call Overhead 905666.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的都不会记录了,一般情况下是要对系统调用进行审计的。