Я работаю над встроенным приложением C ++, работающим в Linux. Недавно я столкнулся с некоторыми действительно странными проблемами с производительностью pthreads.
В моей системе 8 потоков, передающих информацию назад и вперед, защищенных с помощью блокировки мьютекса pthread. При запуске моего приложения в автономном режиме производительность потоков при подключении к блокировке мьютекса крайне низка. Для блокировки и разблокировки мьютекса ~ 200 раз требуется 2,4 секунды на плате ARM с тактовой частотой 500 МГц и больше на моей плате с тактовой частотой 200 МГц.
Странно то, что когда я запускаю свое приложение под GDB, оно запускается очень быстро. Тот же блок кода, который занимал 2,4 секунды автономно, занимает около 2 мс, когда работает GDB.
Я проверил это поведение на двух разных SBC на основе ARM: один под управлением Linux 2.4.26 с gcc 3.4.4 и glibc 2.3.2, а другой под управлением Linux 2.6.21 также с gcc 3.4.4 и glibc 2.3.2.
После обширного тестирования, я подозреваю, что проблема заключается в библиотеке pthreads, которая оказывается одной и той же версией в наборах инструментов обеих плат. Это было бы прискорбно, так как мой поставщик SBC не предлагает очень разнообразных наборов инструментов для своей платы, и я боюсь, что у них всех будет эта проблема. Кто-нибудь имеет представление о том, что может быть причиной низкой производительности, когда не работает под GDB?