如何找出哪个内核自旋锁吃掉了大部分CPU?
How to find out which kernel spinlock eat up most of CPU?
我正在对 Linux 上 运行 并使用硬件加密加速设备的加密软件进行性能调整。
当负载超过某个阈值时,内核 _spn_lock
开始占用 CPU 的大部分时间。以下 perf top
屏幕截图显示 CPU 的约 30% 被 _spin_lock
占用,但如果负载增加且整体性能下降,它会上升超过 50%。
如果不找出是哪个自旋锁导致了这种情况,我就无法调整软件的性能。
我在 Whosebug 上查看了类似的问题,但我找不到关于如何发现哪个自旋锁自旋 的答案。
有什么办法可以定位自旋锁的位置吗?任何提示或建议将不胜感激。
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
perf-lock
应该可以帮助您。您可以使用它捕获一些每个锁的统计信息。
你想找到调用 _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/
我正在对 Linux 上 运行 并使用硬件加密加速设备的加密软件进行性能调整。
当负载超过某个阈值时,内核 _spn_lock
开始占用 CPU 的大部分时间。以下 perf top
屏幕截图显示 CPU 的约 30% 被 _spin_lock
占用,但如果负载增加且整体性能下降,它会上升超过 50%。
如果不找出是哪个自旋锁导致了这种情况,我就无法调整软件的性能。
我在 Whosebug 上查看了类似的问题,但我找不到关于如何发现哪个自旋锁自旋 的答案。 有什么办法可以定位自旋锁的位置吗?任何提示或建议将不胜感激。
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
perf-lock
应该可以帮助您。您可以使用它捕获一些每个锁的统计信息。
你想找到调用 _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/