Dlaczego mój bezrdzeniowy komputer z rdzeniami 16x 2,93 GHz działa gorzej niż VPS z rdzeniami 4x 2,5 GHz?


34

Napisałem kawałek wielowątkowego oprogramowania, które wykonuje kilka symulacji dziennie. Jest to zadanie bardzo obciążające procesor i ten program uruchomiłem w usługach w chmurze, zwykle w konfiguracjach takich jak 1 GB na rdzeń.

Korzystam z CentOS 6.7 i /proc/cpuinfodaje mi to, że moje cztery rdzenie VPS mają częstotliwość 2,5 GHz.

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:

Wraz ze wzrostem kursów walut moje VPS zaczęło być droższe i doszedłem do „świetnej oferty” na używanych serwerach bez systemu metalowego.

Kupiłem cztery HP DL580 G5 , z czterema Intel Xeon X7350 każdy. Zasadniczo każda maszyna ma rdzenie 16 x 2,93 GHz i 16 GB, aby zachować takie rzeczy, jak moja chmura 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:

Zasadniczo wydawało się to świetną sprawą, ponieważ mogłem przestać używać VPS do wykonywania tych zadań wsadowych. To dziwne rzeczy ...

  1. Na VPS-ach korzystałem z 1,25 wątku na rdzeń, tak jak robiłem na gołym metalu. (Dodatkowy wątek 0,25 ma zrekompensować czas bezczynności spowodowany użyciem sieci.)
  2. Na moim VPS, używając łącznie rdzeni 44x 2,5 GHz, otrzymuję prawie 900 symulacji na minutę.
  3. Na moim DL580, używając łącznie rdzeni 64 x 2,93 GHz, otrzymuję tylko 300 symulacji na minutę.

Rozumiem, że DL580 ma starszy procesor. Ale jeśli używam jednego wątku na rdzeń, a serwer bez systemu ma szybszy rdzeń, dlaczego działa gorzej niż mój VPS?

Nie mam zamiany pamięci na żadnym z serwerów.

TOP mówi, że moje procesory działają na 100%. Otrzymuję średnie obciążenie 18 (5 na VPS).

Czy tak będzie, czy coś mi umknie?

Uruchamianie lscpu daje mi 1,6 GHz na moim czystym metalowym serwerze. Było to również widoczne /proc/cpuinfo.

Czy te informacje są prawidłowe, czy są powiązane z nieprawidłowym zarządzaniem energią?

[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

32
Ponieważ ośmioletnie procesory wykonują znacznie mniej na cykl zegara niż obecne procesory.
Michael Hampton

3
Będziesz chciał zresetować ustawienia BIOS do domyślnych. Te serwery brzmią, jakby miały również nieoptymalną konfigurację. Zobacz moją edycję poniżej.
ewwhite

Powinieneś spróbować uruchomić tylko 1 wątek na rdzeń. Jeśli rdzeń jest wolny, wysokie obciążenie może oznaczać, że procesor spędza dużo czasu na przełączaniu zadań i robi mniej.
Nemo,

Możesz wyszukać w Internecie „testy porównawcze procesorów”, aby znaleźć porównania wydajności. Moim ulubionym takim zasobem jest CPUBenchmark.net .

6
Spójrz również na różnicę wielkości pamięci podręcznej. Chybienia w pamięci podręcznej mogą być straszne.
acelent

Odpowiedzi:


44

Postępy procesora, szybkość zegara i obliczenia IPC mogą prawie uniemożliwić rozsądne porównanie starych dekadowych procesorów z nowoczesnymi. Nie tylko instrukcje na cykl będą się różnić, ale nowsze procesory mają zestawy instrukcji dedykowane do złożonych obliczeń (Intel dodał AES-NI jako przykład), szybkość zegara nie jest już rozsądnym komparatorem z powodu tych czynników (czy wspomniałem wielordzeniowy vs hiperwątkowanie ...). Przy wystarczającej ilości czasu i cierpliwości możesz z pewnością dowiedzieć się, ile starszych procesorów równa się 1 nowemu procesowi, ale obliczenia zakończą się twierdzeniem, że taniej i szybciej jest kupić nowy procesor.


2
Istnieje wiele stron internetowych, które już to robią, porównując testy wydajności procesorów każdego procesora.
Michael Hampton

4
Nie do końca, ale tutaj jest test porównawczy Passmark dla Intel Xeon E5-2680 @ 2.70GHz vs Intel Xeon X7350 @ 2.93GHz
chue x

Problem z testem porównawczym polega na tym, że z natury nie jest zoptymalizowany dla tego konkretnego procesora. Z grubsza nie jest źle, ale musiałbyś przepisać i ponownie skompilować z najlepszym zestawem instrukcji dla każdego. bardzo niewiele narzędzi jest napisanych przy pomocy czegoś innego niż „ile razy można obliczyć„ x ”.
Jim B

1
@JimB, tak, ale symulacja OP może również nie być zoptymalizowana dla konkretnego procesora. (jeśli tak, przepraszam)
David Balažic

1
Prawdopodobnie nie, w takim przypadku symulacja jest de facto punktem odniesienia, chyba że program zostanie ponownie skompilowany. Test porównawczy strony trzeciej byłby mniej dokładny.
Jim B

32

Nie chcę brzmieć strasznie, podkreślając coś, co powinno być tutaj oczywiste, ale porównujesz wysokiej klasy procesor serwerowy z 2014 roku do wysokiej klasy procesor serwerowy z 2007 roku .

Nie sądzę, że wymaga to więcej wyjaśnień.

Istnieje powód, dla którego HP ProLiant DL580 G5 jest tak niedrogi już dziś . Były duże, wolne i pozbawione wielu funkcji, które byłyby pożądane w bardziej nowoczesnych serwerach. Ostatnią sprzedałem w 2009 roku . To był zły zakup i lepiej byłoby, gdybyś był zmuszony kupić procesor z rodziny procesorów Nehalem lub Westmere, gdybyś był zmuszony kupić używany sprzęt.

Ponadto zakupione serwery są bardzo nieefektywne pod względem zużycia energii, więc ich obsługa będzie kosztowna.


Wygląda na to, że Twoje fizyczne serwery działają w trybie oszczędzania energii, który zmniejszył szybkość zegara procesora. Będziesz chciał przejść do BIOS-u (naciśnij F9 podczas rozruchu) i zresetować serwer do domyślnych ustawień fabrycznych ( kto wie, co jeszcze zmodyfikowano z domyślnych? )

wprowadź opis zdjęcia tutaj


7
@GlaucoCattaliniLins No.
ewwhite

1
Czy mógłbyś to rozwinąć? Mam problem z jego strawieniem. Mam opcję zmiany w przypadku innych modeli, więc chcę to zrobić dobrze, jeśli o to chodzi. - Na początku myślałem, że może to być rozmiar pamięci podręcznej E5 (30 MB), ale potem zostanie on udostępniony innym VPS.
Glauco Cattalini Lins

11
@GlaucoCattaliniLins X7350 jest oparty na mikroarchitekturze Core 2. W rzeczywistości jest to porównywalne z Quad Core 2 (ile czasu minęło, odkąd ostatnio o nich słyszałeś?). Jest tak stary, że nie obsługuje instrukcji SSE4 +, AVX (2), FMA ani AES, więc jeśli twoje symulacje są numeryczne, przyjmują karę> 2x, a szybkość szyfrowania AES jeszcze bardziej cierpi. Wreszcie, Intel wydał 6 ulepszeń mikroarchitekturalnych od Core 2, a wraz z każdym z nich zwiększa zdolność procesora do uruchamiania większej liczby instrukcji równolegle lub nie w porządku, przepustowość pamięci.
Nie będę istniał Idonotexist

10
@GlaucoCattaliniLins Dla kontrastu twój serwer VPS obsługuje FMA, więc jest co najmniej tak nowy, jak mikroarchitektura Haswell. Instrukcja FMA pozwala na mnożenie i dodawanie dwa w jednym, a wszystko w Haswell (dekodery instrukcji, bufor zmiany kolejności, predyktory rozgałęzień, przepustowość pamięci, ALU) zostały dostrojone, aby można było zasilać podwójne wektorowe FMA . Haswell może zatem wytrzymać, w jednym cyklu zegara: 1) Dwie 8-elementowe operacje wektorowe formy float d = a + b*c, 2) Dwa 32-bajtowe obciążenia ( ai b) i 3) jeden 32-bajtowy magazyn (the d). Jest niesamowicie dobrze dostrojony.
Nie będę istniał Idonotexist

2
@IwillnotexistIdonotexist: prawie na pewno nie skompilował się dla każdej maszyny osobno -march=native, więc przypuszczam, że jego kod używa SSE2 tylko w obu systemach. Sądzę, że przepustowość pamięci jest prawdopodobnie wąskim gardłem, szczególnie. jeśli jego jądro nie obsługuje NUMA lub wzorce alokacji jego karty SIM nie są przyjazne NUMA. Czy to jest czterordzeniowy czterordzeniowy rdzeń z dwukanałowymi kontrolerami pamięci na każdym gnieździe?
Peter Cordes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.