我正在研究在Linux上運行的嵌入式C++應用程序。我最近遇到了一些非常奇怪的pthreads性能問題。GDB下的Linux線程性能非常快,但極其緩慢
我的系統有8個線程通過pthread互斥鎖保護來回傳遞信息。當單獨運行我的應用程序時,採用互斥鎖時線程性能會非常慢。在500MHz的ARM板上鎖定和解鎖互斥約200次需要2.4秒,200MHz的板上需要更長的時間。
奇怪的是,當我在GDB下運行我的應用程序時,應用程序運行速度非常快。當GDB運行時,單獨運行2.4秒的代碼塊需要約2ms。
我已經在2個不同的基於ARM的SBC上測試了這種行爲:一個運行Linux 2.4.26,使用gcc 3.4.4和glibc 2.3.2,另一個使用gcc 3.4.4運行Linux 2.6.21, glibc 2.3.2。
經過廣泛的測試後,我懷疑問題出在pthreads庫,它恰好是兩個主板工具鏈上的相同版本。這很不幸,因爲我的SBC供應商沒有爲他們的主板提供各種各樣的工具鏈,我擔心他們都會遇到這個問題。有沒有人有任何洞察什麼可能會造成不良的表現,當不在GDB下運行?
你是對的,它當然沒有被打破。 :)我將問題縮小到了我們用於狀態機功能的第三方框架。它使用標準的pthread互斥體而不是遞歸互斥體。將互斥鎖更改爲遞歸會導致程序以與GDB相同的方式運行。感謝您的反饋意見! – Maha 2010-01-05 21:20:59