Mengapa komputer core bare-metal 16x 2.93GHz saya berkinerja lebih buruk daripada VPS dengan 4x 2.5GHz core?

34

Saya telah menulis perangkat lunak multi-threaded yang melakukan banyak simulasi sehari. Ini adalah tugas yang sangat intensif dengan CPU, dan saya telah menjalankan program ini pada layanan cloud, biasanya pada konfigurasi seperti 1GB per inti.

Saya menjalankan CentOS 6.7, dan /proc/cpuinfomemberi saya bahwa empat inti VPS saya adalah 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:

Dengan kenaikan nilai tukar, VPS saya mulai menjadi lebih mahal, dan saya telah mencapai "banyak" pada server bare-metal bekas.

Saya membeli empat HP DL580 G5 , dengan masing-masing empat Intel Xeon X7350. Pada dasarnya, setiap mesin memiliki 16x 2.93GHz core dan 16GB, untuk menjaga hal-hal seperti cloud VPS saya .

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:

Pada dasarnya itu tampak hebat, karena saya bisa berhenti menggunakan VPS untuk melakukan pekerjaan batch ini. Sekarang ini adalah hal-hal aneh ...

  1. Pada VPS, saya telah menjalankan 1,25 thread per core, seperti yang saya lakukan pada bare metal. (Utas 0,25 tambahan adalah untuk mengkompensasi waktu idle yang disebabkan oleh penggunaan jaringan.)
  2. Pada VPS saya, menggunakan total 44x 2.5GHz core, saya mendapatkan hampir 900 simulasi per menit.
  3. Pada DL580 saya, menggunakan total 64x 2.93GHz core, saya hanya mendapatkan 300 simulasi per menit.

Saya mengerti bahwa DL580 memiliki prosesor yang lebih tua. Tetapi jika saya menjalankan satu utas per inti, dan server bare metal memiliki inti yang lebih cepat, mengapa kinerjanya lebih buruk daripada VPS saya?

Saya tidak memiliki pertukaran memori yang terjadi di server mana pun.

TOP mengatakan prosesor saya berjalan pada 100%. Saya mendapatkan beban rata-rata 18 (5 pada VPS).

Apakah ini akan menjadi seperti ini, atau apakah saya kehilangan sesuatu?

Menjalankan lscpu memberi saya 1.6GHz di server bare metal saya. Ini terlihat di /proc/cpuinfojuga.

Apakah informasi ini benar, atau terhubung ke manajemen daya yang salah?

[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
Glauco Cattalini Lins
sumber
32
Karena prosesor delapan tahun melakukan jauh lebih sedikit per siklus clock daripada prosesor saat ini.
Michael Hampton
3
Anda ingin mengatur ulang pengaturan BIOS Anda ke default. Server ini sepertinya memiliki konfigurasi yang tidak optimal juga. Lihat hasil edit saya di bawah.
ewwhite
Anda harus mencoba menjalankan hanya 1 utas per inti. Jika intinya lambat, beban yang tinggi dapat berarti bahwa CPU menghabiskan banyak waktu untuk beralih tugas dan semakin sedikit yang dilakukan.
Nemo
Anda dapat mencari "benchmark CPU" di Internet untuk menemukan perbandingan kinerja. Sumber daya favorit saya adalah CPUBenchmark.net .
6
Lihatlah perbedaan ukuran cache juga. Kehilangan cache bisa sangat mengerikan.
acelent

Jawaban:

44

Kemajuan prosesor, kecepatan clock, dan perhitungan IPC dapat membuatnya hampir mustahil untuk mencoba membandingkan CPU lama yang dekade dengan yang modern. Tidak hanya instruksi per siklus akan bervariasi, tetapi prosesor yang lebih baru memiliki set instruksi yang didedikasikan untuk perhitungan yang kompleks (Intel telah menambahkan AES-NI sebagai contoh), kecepatan clock tidak lagi menjadi pembanding yang masuk akal, karena faktor-faktor ini (apakah saya menyebutkan multi-core vs hyperthreading ...). Dengan waktu dan kesabaran yang cukup, Anda tentu bisa mengetahui berapa procs yang lebih tua sama dengan 1 prok yang lebih baru tetapi perhitungannya akan berakhir dengan mengatakan lebih murah dan lebih cepat untuk membeli CPU baru.

Jim B
sumber
2
Ada banyak situs web di luar sana yang sudah melakukan ini, dengan membandingkan tolok ukur CPU dari setiap prosesor.
Michael Hampton
4
Tidak tepat tetapi di sini adalah patokan Passmark untuk Intel Xeon E5-2680 @ 2.70GHz vs Intel Xeon X7350 @ 2.93GHz
chue x
Masalah dengan tolok ukur adalah bahwa pada dasarnya, itu tidak dioptimalkan untuk prosesor tertentu. Ini tidak buruk untuk perkiraan kasar, tetapi Anda harus menulis ulang dan mengkompilasi ulang dengan set instruksi terbaik untuk masing-masing. sangat sedikit alat yang ditulis dengan selain "berapa kali" x "dapat dihitung
Jim B
1
@ JimB, ya, tetapi simulasi OPs mungkin juga tidak dioptimalkan untuk CPU tertentu. (jika ya, saya melewatkannya, maaf)
David Balažic
1
Mungkin tidak, dalam hal ini simulasi adalah patokan de facto kecuali program IS dikompilasi ulang. Patokan pihak ketiga akan menjadi kurang akurat.
Jim B
32

Saya tidak ingin terdengar mengerikan dengan menekankan sesuatu yang seharusnya terlihat jelas di sini, tetapi Anda membandingkan prosesor server kelas atas dari tahun 2014 dengan prosesor server kelas atas dari tahun 2007 .

Saya tidak berpikir ini membutuhkan penjelasan lebih banyak.

Ada alasan mengapa HP ProLiant DL580 G5 tersedia sangat murah hari ini . Mereka besar, lambat dan kekurangan banyak fitur yang diinginkan di server yang lebih modern. Saya menjual yang terakhir di tahun 2009 . Itu adalah pembelian yang buruk, dan Anda akan lebih baik dilayani dengan CPU dari keluarga CPU Nehalem atau Westmere, jika Anda dipaksa untuk membeli peralatan bekas.

Selain itu, server yang Anda beli sangat tidak efisien dalam hal konsumsi daya, sehingga akan mahal untuk dioperasikan.


Tampaknya seolah-olah server fisik Anda berjalan dalam mode hemat daya yang mengurangi kecepatan jam CPU Anda. Anda akan ingin masuk ke BIOS (tekan F9 saat boot) dan reset server ke default pabrik ( siapa yang tahu apa lagi yang dimodifikasi dari default? )

masukkan deskripsi gambar di sini

putih
sumber
7
@GlaucoCattaliniLins No.
ewwhite
1
Bisakah Anda menguraikan itu? Saya kesulitan mencernanya. Saya memiliki opsi untuk mengubah model lain, jadi saya ingin memperbaikinya jika itu yang terjadi. - Pada awalnya saya pikir itu bisa menjadi ukuran cache E5 (30MB), tetapi kemudian akan dibagi di antara VPS lainnya.
Glauco Cattalini Lins
11
@GlaucoCattaliniLins X7350 didasarkan pada mikroarsitektur Core 2. Bahkan, itu sebanding dengan Core 2 Quad (Sudah berapa lama sejak Anda terakhir kali mendengar tentang itu?). Ini sangat tua sehingga tidak mendukung instruksi SSE4 +, AVX (2), FMA atau AES, jadi jika simulasi Anda numerik, mereka mengambil penalti> 2x di sana, dan kecepatan kripto AES lebih menderita. Terakhir, Intel telah merilis 6 perbaikan mikroarsitektur sejak Core 2, dan dengan masing-masing meningkatkan kemampuan CPU untuk menjalankan lebih banyak instruksi secara paralel atau rusak, bandwidth memori.
Iwillnotexist Idonotexist
10
@GlaucoCattaliniLins Sebaliknya server VPS Anda mendukung FMA, sehingga setidaknya sama baru dengan arsitektur mikro Haswell. Instruksi FMA memungkinkan seseorang untuk melakukan perkalian dan penambahan dua-dalam-satu, dan semua yang ada di Haswell (decoder instruksi, buffer pemesanan ulang, prediksi cabang, bandwidth memori, ALU) telah disetel sehingga FMA vektor ganda dapat tetap diberi makan . Haswell dengan demikian dapat mempertahankan, dalam satu siklus clock tunggal: 1) Dua operasi vektor 8-elemen dari formulir float d = a + b*c, 2) Dua beban 32-byte ( adan dan b) dan 3) satu toko 32-byte (yang d). Ini luar biasa disetel dengan baik.
Iwillnotexist Idonotexist
2
@IwillnotexistIdonotexist: dia hampir pasti tidak mengkompilasi untuk setiap mesin secara terpisah -march=native, jadi saya kira kodenya hanya menggunakan SSE2 di kedua sistem. Saya kira bandwidth memori mungkin hambatan, esp. jika kernelnya tidak memiliki dukungan NUMA, atau pola alokasi simnya tidak ramah-NUMA. Ini apa, quad socket quad core, dengan pengontrol memori saluran ganda pada setiap socket?
Peter Cordes