Performance

為什麼我的裸機 16x 2.93GHz 核心電腦的性能比具有 4x 2.5GHz 核心的 VPS 差?

  • April 13, 2018

我寫了一個多執行緒軟體,每天做一堆模擬。這是一項非常佔用 CPU 的任務,我一直在雲服務上執行這個程序,通常配置為每核 1GB。

我正在執行CentOS 6.7,並/proc/cpuinfo告訴我我的四個 VPS 核心是 2.5GHz。

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 63
model name      : Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz
stepping        : 2
microcode       : 1
cpu MHz         : 2499.992
cache size      : 30720 KB
physical id     : 3
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 3
initial apicid  : 3
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good unfair_spinlock pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm arat xsaveopt fsgsbase bmi1 avx2 smep bmi2 erms invpcid
bogomips        : 4999.98
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

隨著匯率的上漲,我的 VPS 開始變得更加昂貴,而且我在使用過的裸機伺服器上“大獲全勝”。

我購買了四台HP DL580 G5,每台配備四台 Intel Xeon X7350。基本上,每台機器都有 16 個 2.93GHz 核心和 16GB,以保留我的VPS雲之類的東西。

processor       : 15
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Xeon(R) CPU           X7350 @ 2.93GHz
stepping        : 11
microcode       : 187
cpu MHz         : 1600.002
cache size      : 4096 KB
physical id     : 6
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 27
initial apicid  : 27
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca lahf_lm dts tpr_shadow vnmi flexpriority
bogomips        : 5866.96
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management:

從本質上講,這似乎很重要,因為我可以停止使用 VPS 來執行這些批處理工作。現在是奇怪的東西……

  1. 在 VPS 上,我每個核心執行 1.25 個執行緒,就像我在裸機上所做的一樣。(額外的 0.25 執行緒是為了補償網路使用造成的空閒時間。)
  2. 在我的 VPS 上,總共使用 44 個 2.5GHz 核心,我每分鐘獲得近 900 次模擬。
  3. 在我的 DL580 上,總共使用 64 個 2.93GHz 核心,我每分鐘只能進行 300 次模擬。

我了解 DL580 的處理器較舊。但是如果我每個核心執行一個執行緒,而裸機伺服器的核心速度更快,為什麼它的性能比我的 VPS 差?

我在任何伺服器中都沒有發生記憶體交換。

TOP 說我的處理器正在 100% 執行。我的平均負載為 18(VPS 上為 5)。

會是這樣嗎,還是我錯過了什麼?

執行 lscpu 在我的裸機伺服器上給了我 1.6GHz。這也被看到了/proc/cpuinfo

此資訊是否正確,還是與某些不正確的電源管理有關?

[BARE METAL] $ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16
On-line CPU(s) list:   0-15
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 15
Stepping:              11
**CPU MHz:               1600.002**
BogoMIPS:              5984.30
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0-15


[VPS] $ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             4
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Stepping:              2
**CPU MHz:               2499.992**
BogoMIPS:              4999.98
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0-3

處理器的進步、時鐘速度和 IPC 計算使得幾乎不可能將十年前的 CPU 與現代 CPU 進行合理比較。不僅每個週期的指令會有所不同,而且較新的處理器具有專用於復雜計算的指令集(英特爾添加了 AES-NI 作為範例),由於這些因素,時鐘速度不再是一個合理的比較器(我是否提到過多核與超執行緒…)。如果有足夠的時間和耐心,您當然可以計算出有多少舊 proc 等於 1 個新 proc,但計算結果會表明購買新 CPU 更便宜、更快捷。

引用自:https://serverfault.com/questions/739476