2011-09-13 22 views
2

如果我編寫一個線程並在Round Robyn Real-Time調度器上運行它,在Ubuntu 11.04中使用該ppa:https://launchpad.net/~abogani/+archive/ppa中提供的2.6.38通用內核或可用的3.0.0-9-lowlatency內核,似乎鎖定命令: apt-key get爲什麼ubuntu 2.6.38-generic或3.0.0-lowlatency內核上的線程阻止另一個線程使用mmap_sem?

當gpg在引擎蓋下嘗試使用mlock()時,它看起來會鎖定該命令,據我所知它需要mmap_sem。但是,我的測試線程從字面上看是「無所事事」,因爲它只是一個空循環。例如,我不主動使用mmap_sem。

在SMP機器上(4核心,8個邏輯核心),RR調度程序中的優先級爲50或更高的單個線程似乎始終鎖定apt-key。較低的優先級返回大約50%或更少的時間,有時需要幾分鐘才能返回。

這個實時優先級的空空閒for循環線程和mmap_sem之間的連接是什麼?

+0

你的代碼在這裏會有所幫助 – jdt141

+0

只是一個預感,但嘗試禁用超線程。 – caf

回答

1

從這個網站:http://www.icir.org/gregor/tools/pthread-scheduling.html

線程將與所有其他線程和進程的CPU抗衡。因此,如果您的線程具有更高的優先級並且處於實時調度狀態,那麼它將佔用CPU並永不放棄它。

測試此問題的一種方法是阻止任何系統調用,以便您的線程可以休眠並讓其他進程運行。使用超時選擇應該是一個很好的測試。

+1

儘管如此,由於他擁有額外的免費和可用的CPU,這應該不是問題,即使一個實時線程佔用另一個線程/進程,也應該安排其中一個線程/進程。我寧願懷疑實時調度程序與每個CPU內核數據結構有關的弱點。 – nos

相關問題