2016-10-07 79 views
0

我正在運行一個具有200個線程的單個服務器進程,這些進程以下列方式自動在CPU之間傳播。有什麼我可以做的更好地利用CPU核心?

CPU Utilization

enter image description hereenter image description here

有什麼我可以做,以提示操作系統跨其他節點的CPU的蔓延呢?節點1的16個CPU似乎有點遺憾。

+1

這也可能是故意的。由於內存延遲,跳到節點周圍對性能不利。 – Mysticial

+0

機器上有16個內核。在我看來,出於某種原因,操作系統無法使用內核來並行運行2個線程,以啓用超線程。線程在做什麼? – dcernahoschi

+0

每個線程表示一個連接的TCP/IP設備。大多數時間他們坐在那裏什麼都不做:睡5 ms,檢查它的套接字是否有任何活動(0 ms),如果沒有,則回到下一個5 ms的睡眠狀態。這是所有200個線程的基本處理循環。最好的情況下(性能明智)將沒有任何設備上的活動。最糟糕的情況是,所有200個線程處理命令。 – Eduardo

回答

0

嚴格來說,強制傳播的方法是通過設置進程的線程關聯性。我並不是說這是最佳方案,或者它比以前的設置更好,但至少我設法讓進程在所有可用內核中運行其線程。這可能會導致線程運行在可訪問不同內存位置的節點上,但我認爲它會比擁有16個閒置內核更小。我將不得不衡量這一點,但至少我設法向我想要實現的目標前進了一步。

使用由NUMA節點設置過程親和力使用所有節點的所有核心之後:更換相同的設置後

Usage by NUMA nodes

使用由邏輯內核:

Usage by logical cores

相關問題