Debian 機器中 VirtualBox 中 Kubuntu 的多執行緒效能非常糟糕

Debian 機器中 VirtualBox 中 Kubuntu 的多執行緒效能非常糟糕

在虛擬機器內執行多執行緒渲染軟體時,我們遇到了令人不快的效能問題。

我們在 VirtualBox 4.0.10_Debianr72436 中執行 Kubuntu 12.04,該虛擬機在 Debian(6.0.6、2.6.32-5-amd64)計算伺服器中無頭運行。它擁有 2*6 核心 Intel Xeon X5660 處理器,具有超線程功能,運行記憶體約為 64GB。我們透過 TigerVNC Viewer for X 版本 1.1.0 連接到虛擬機器。虛擬機器目前設定為使用全部 24 個核心,但當其配置為較低計數(例如 12)時,可能會出現下面描述的問題。

問題:

當我們只使用一個渲染執行緒運行渲染器時,它的運行速度與直接在其他機器(Intel Core 2 Duo MacBook)上的金屬上運行時的速度相當。然而,當我們增加工作執行緒的數量時,它的速度僅略有加快(遠非 1/n),並且在大約 5 個執行緒時,它實際上開始變慢。如果有 8 個執行緒或更多,它甚至比單執行緒應用程式還要慢。當渲染器直接在 MacBook 上的金屬上運行時,無論您指定要運行多少個線程,都不會出現任何問題。例如,雙核心 CPU 上的 16 個執行緒的運行速度與雙執行緒實例的運行速度一樣快。

然後,我們嘗試並行運行渲染器的多個單執行緒實例,結果令人驚訝。當我們運行 4 個實例時,一切正常 - 它們的運行速度與一個實例相似,但當我們運行 6 個實例時,所有實例的速度都減慢了 50% 左右!

我們也嘗試執行另一個渲染器(pbrt v.2)來測試其他人的表現以及他們的結果是否更好。它可以很好地擴展到 13 個線程,但隨後速度也變慢(但沒有我們的軟體慢)。

我們的渲染器是用 Objective C 結合 C 和彙編程式編寫的。我們在程式碼中使用 XADD 和 CAS 操作來存取共享資料。人們強烈懷疑這兩者可能是我們問題的根源。對此有什麼想法嗎?

順便說一句:由於伺服器政策,我們無法安裝 Obj-C 運行時和其他所需的庫並直接在金屬上運行我們的軟體。

虛擬機器配置摘錄:

  • 記憶體大小:4000MB
  • 頁面融合:關閉
  • 顯示記憶體大小:12MB
  • HPET:關閉
  • 晶片組:piix3
  • 韌體:BIOS
  • CPU數量:24
  • 合成CPU:關閉
  • CPUID 覆蓋:無
  • ACPI:開啟
  • IOAPIC:開啟
  • PAE:關閉
  • 時間偏移:0毫秒
  • 即時時鐘: 世界標準時間
  • 硬體. virt.ext:打開
  • 硬體. virt.ext 獨佔:關閉
  • 嵌套分頁:開
  • 大頁面:開
  • VT-x VPID:開啟
  • 3D 加速:關閉
  • 2D 視訊加速:關閉
  • 新增運行等級:2
  • 配置的記憶體氣球大小:0 MB

答案1

我在這裡吐痰,但是......在 GUI 上,右鍵單擊 Kubuntu 實例,然後在它未運行時選擇設定。檢查一下您的 CPU 是否受到限制。您可能想看看您的系統如何回應選擇 20 或 22 個 CPU(而不是 24 個)來緩解虛擬機器和主機箱之間的資源競爭。然後嘗試使用 20 個執行緒運行單一實例。我預計機器上的 20 個核心的 CPU 會達到峰值,而其餘 4 個核心也會增加到 100%,同時盡力跟上。除了您的虛擬機器之外,您的電腦上是否還運行著其他應用程式?

相關內容