如何找出哪个内核螺旋锁占用了大部分CPU?

时间:2018-02-09 02:36:42

标签: linux performance linux-kernel kernel spinlock

我正在对加密软件进行性能调整,该加密软件在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

2 个答案:

答案 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/