Linux ARM環境下的多核心多進程效能問題

Linux ARM環境下的多核心多進程效能問題

我正在 4 核心 ARM CPU 上開發 Linux 應用程式。應用程式中有兩個進程,我將每個進程分配給CPU,如下所示。

  • core1:進程1(GUI)
  • core2-4:process2(即時應用程式)

沒有process1,process2很容易處理它的進程,沒有什麼好擔心的。但問題是,當我執行process1時,對process2的效能影響巨大,process2根本無法正常運作。

這可能是什麼原因?

附加資訊:

  • cpu2-4 與 isolcpus=1-3 隔離

  • 我追蹤了整個系統的線程,我注意到只有當有process1時,process2才會喚醒core1上很多名為rcu_preempt的任務。但這兩個進程不共享任何記憶體。

  • 我用其他一些進程取代了process1,我發現一個進程快速地向分配的記憶體寫入大量資料會影響process2。僅執行簡單 CPU 工作的進程(如 while 迴圈)不會產生影響。

答案1

您已經接管了所有 CPU,迫使 Linux 核心搶佔正在運行的進程以運行自己的執行緒。然後,核心不會區分 CPU,並且可以像其他 CPU 一樣搶佔 CPU1。電腦中發生的活動越多,核心需要搶佔的次數就越多,同樣,在 CPU 之間不加區別。

另外,CPU並不是一切,電腦的架構可能存在更多隱含的瓶頸。其中一些是存儲體,其中對存儲體的並發存取取決於該存儲體的通道數量。然後還有電腦的記憶體匯流排、磁碟快取、磁碟本身等。

您可能會在本文中找到有關真正運行實時進程的更多提示 如何在Linux中運行即時應用程式? 然而,由您的實際硬體決定什麼效果更好或更差。

相關內容