Arch-Linux

Linux:新伺服器上的 CPU 負載共享

  • January 6, 2017

我們有一個新的 Linux el6.x86_64 伺服器,在將我們所有的作業(主要是 java/C++/python/shell)程序移到這個新伺服器上之後,我們觀察到程序執行緩慢。例如,在以前的伺服器上執行的 python 腳本將在 30 分鐘內完成,而在新伺服器上則需要 4 小時來處理。

下面是來自新伺服器的 CPU 使用率統計資訊(用 top 擷取),它一次只顯示一個活動的任務。我需要你的幫助來理解以下內容:

  • 如果它有 32 個 CPU,不應該有 32 個任務並行執行嗎?
  • 所有這些 CPU 都線上,從 /sys/devices/system/cpu 驗證。是否有任何其他系統將 CPU 可用性設置得很低?

top - 02:04:04 up 5 days,  6:56, 32 users,  load average: 3.63, 3.91, 3.47
Tasks: 1208 total,   1 running, 1207 sleeping,   0 stopped,   0 zombie
Cpu0  : 23.4%us,  3.0%sy,  0.0%ni, 73.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  : 15.4%us,  5.6%sy,  0.0%ni, 79.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu2  : 12.2%us,  1.0%sy,  0.0%ni, 86.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu3  :  3.9%us,  0.3%sy,  0.0%ni, 95.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu4  : 19.3%us,  2.0%sy,  0.0%ni, 78.4%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu5  :  6.9%us,  0.3%sy,  0.0%ni, 92.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu6  :  1.3%us,  0.0%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu7  :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu8  :  0.3%us,  0.3%sy,  0.0%ni, 99.0%id,  0.3%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu9  :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu10 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu11 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu12 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu13 :  1.0%us,  0.3%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu14 :  1.0%us,  0.0%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu15 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu16 : 42.2%us,  4.0%sy,  0.0%ni, 53.5%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu17 :  0.7%us,  0.7%sy,  0.0%ni, 98.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu18 : 26.0%us,  2.0%sy,  0.0%ni, 71.7%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Cpu19 :  0.7%us,  0.3%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu20 : 53.8%us,  4.0%sy,  0.0%ni, 41.2%id,  0.0%wa,  0.0%hi,  1.0%si,  0.0%st
Cpu21 : 29.3%us,  1.3%sy,  0.0%ni, 69.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu22 :  2.0%us,  0.7%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu23 :  0.7%us,  0.0%sy,  0.0%ni, 99.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu24 :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu25 :  0.7%us,  1.0%sy,  0.0%ni, 98.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu26 :  0.7%us,  1.3%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu27 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu28 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu29 :  0.3%us,  0.0%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu30 :  2.6%us,  0.0%sy,  0.0%ni, 97.4%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu31 :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  396867664k total, 391584344k used,  5283320k free,   414764k buffers

這些程序不會利用額外的核心來更快地執行,除非它們是通過使用執行緒或其他並行機制來設計的。

由於GIL全域解釋器鎖),Python 尤其不擅長利用多個核心。您可以嘗試使用“多處理”Python 模組來實現更多的首選軟體。

除了購買具有更高時鐘速度的 CPU 之外,您無能為力來提高單核(非 I/O 綁定程序)的性能。但有時您會發現記憶體訪問和記憶體記憶體瓶頸。例如,如果您的機器包含多個通過NUMA連接連接在一起的 CPU,並且程序在這些 CPU 之間頻繁移動,則可能會出現 CPU 必須通過其他 CPU 通過NUMA連接頻繁訪問記憶體(連接到另一個 CPU 的記憶體可以訪問速度明顯慢於直接連接到“ this ”CPU 的記憶體)。

使用 cpuset(1) 命令嘗試將程序固定到特定 CPU 可能是值得的。如果這可行,您還應該查看各種 Kenel NUMA 行為調整參數。

**編輯添加:**另一個需要關注的領域是電源管理,也許由於節能過程,CPU 頻率正在縮減。您可以使用 cpupower(1) 命令檢查和設置 VPU 電源管理設置。

引用自:https://unix.stackexchange.com/questions/335309