我們使用測試性能的工具,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的都不會記錄了,一般情況下是要對系統調用進行審計的。