GDB下的Linux线程性能非常快,否则极慢

我正在研究在Linux上运行的嵌入式C应用程序.我最近在使用pthread时遇到了一些非常奇怪的性能问题.

我的系统有8个线程来回传递信息,这些信息使用pthread互斥锁进行保护.独立运行我的应用程序时,使用互斥锁时线程性能会非常慢.在500 MHz ARM板上,锁定和解锁互斥锁约200次需要2.4秒,而在200MHz板上则需要更长的时间.

奇怪的是,当我在GDB下运行应用程序时,该应用程序运行得非常快. GDB运行时,同一代码块独立花费了2.4秒的时间,大约需要2毫秒.

我已经在2种不同的基于ARM的SBC上测试了此行为:一种运行带有gcc 3.4.4和glibc 2.3.2的Linux 2.4.26,另一种运行带有gcc 3.4.4和glibc 2.3.2的Linux 2.6.21 .

经过大量测试后,我怀疑问题出在pthreads库中,而这恰好是两块板的工具链上的相同版本.这将是不幸的,因为我的SBC供应商没有为他们的董事会提供各种各样的工具链,而且恐怕他们都会遇到这个问题.如果没有在GDB下运行,是否有人对导致性能下降的原因有任何见解?

解决方法:

ARM上的pthread从来没有问题,我怀疑您的代码中存在竞争或初始化问题.尝试将您的代码减少到可重现该问题的最少代码.
您应该在此处或您认为相关的部分发布此代码.

而且不要忘记,通常是select isn’t broken

您在使用LinuxThreads还是NPTL(“内核”线程?)
如果使用后者,则也可以尝试跟踪应用程序.

上一篇:具有FPM的PHP7上的异步/线程


下一篇:PHP 7中的多线程