我编写了一个多线程软件,每天进行大量模拟。这是一项非常耗费 CPU 的任务,我一直在云服务上运行这个程序,通常配置为每核 1GB。
我在跑步CentOS6.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,以保持像我的虚拟专用服务器云。
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 来执行这些批处理工作。现在却是怪事……
- 在 VPS 上,我一直为每个核心运行 1.25 个线程,就像我在裸机上所做的一样。(额外的 0.25 个线程是为了补偿网络使用造成的空闲时间。)
- 在我的 VPS 上,总共使用 44x 2.5GHz 核心,每分钟可进行近 900 次模拟。
- 在我的 DL580 上,总共使用 64x 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
答案1
处理器的进步、时钟速度和 IPC 计算使得合理地比较十年前的 CPU 与现代 CPU 几乎不可能。不仅每个周期的指令会有所不同,而且较新的处理器具有专用于复杂计算的指令集(英特尔已添加 AES-NI 作为示例),由于这些因素(我是否提到过多核与超线程......),时钟速度不再是一个合理的比较器。只要有足够的时间和耐心,您肯定可以算出多少个旧处理器等于 1 个新处理器,但计算结果最终会表明购买新 CPU 更便宜、更快。
答案2
我不想因为强调某件事而听起来很糟糕应该这里很明显,但你比较的是2014 年推出的高端服务器处理器到高端服务器处理器2007。
我认为这不需要更多解释。
有一个原因HP ProLiant DL580 G5可用今天如此便宜。它们体积大、速度慢,而且缺乏许多现代服务器所需的功能。我卖掉了我的最后一次是在2009年。这是一次糟糕的购买,如果您被迫购买二手设备,您最好选择 Nehalem 或 Westmere CPU 系列的 CPU。
另外,你购买的服务器在电力消耗方面非常低效,因此运行成本会很高。
您的物理服务器似乎正在以省电模式运行,从而降低了 CPU 时钟速度。您需要进入 BIOS(启动时按 F9)并将服务器重置为出厂默认设置(谁知道默认设置下还有什么被修改了?)