我正在对加密软件进行性能调整,该加密软件在Linux上运行并使用硬件加密加速设备。
当负载超过某个阈值时,内核_spn_lock
开始占用CPU的大部分时间。以下perf top
屏幕截图显示,_spin_lock
占用了大约30%的CPU,但如果负载增加且整体性能下降,则会上升超过50%。
如果没有找到导致这种情况的自旋锁,我无法调整软件的性能。
我在stackoverflow上检查了类似的问题,但我找不到如何发现哪个spinlock旋转的答案。 有没有办法找到螺旋锁位置?任何提示或建议都将深表感谢。
PerfTop: 81 irqs/sec kernel:45.7% exact: 0.0% [1000Hz cycles], (all, CPU: 53)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
samples pcnt function DSO
_______ _____ _______________________ __________________________
44.00 27.2% _spin_lock [kernel.kallsyms]
30.00 18.5% sha512_block_data_order /usr/local/bin/cryptod
6.00 3.7% _int_malloc /lib64/libc-2.12.so
5.00 3.1% __GI___libc_malloc /lib64/libc-2.12.so
[root@qat ~]# uname -a
Linux qat 2.6.32-220.el6.tsx.65.x86_64 #68 SMP Fri Jan 26 17:45:32 KST 2018 x86_64 x86_64 x86_64 GNU/Linux
答案 0 :(得分:2)
perf-lock
可以帮助你。您可以使用它捕获一些每次锁定的统计数据。
答案 1 :(得分:1)
你想找到调用_spin_lock的地方吗?
尝试 ftrace
#cd /sys/kernel/debug/tracing
#echo function_graph > current_tracer
#cat trace | grep -B 5 _spin_lock
有关ftrace的更多信息,请参阅此处https://lwn.net/Articles/365835/