Почему мой голый металлический компьютер с ядрами 16x 2,93 ГГц работает хуже, чем VPS с ядрами 4x 2,5 ГГц?

34

Я написал фрагмент многопоточного программного обеспечения, которое выполняет кучу симуляций в день. Это очень ресурсоемкая задача, и я запускал эту программу в облачных службах, обычно в конфигурациях, таких как 1 ГБ на ядро.

Я использую CentOS 6.7 и /proc/cpuinfoсообщаю, что мои четыре VPS-ядра имеют частоту 2,5 ГГц.

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 каждый. По сути, каждая машина имеет 16x 2,93 ГГц ядер и 16 ГБ, чтобы хранить такие вещи, как мое облако 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, используя в общей сложности 44x 2,5 ГГц ядра, я получаю почти 900 симуляций в минуту.
  3. На моем DL580, использующем в общей сложности 64x 2,93 ГГц ядра, я получаю только 300 симуляций в минуту.

Я понимаю, что DL580 имеет более старый процессор. Но если я запускаю по одному потоку на ядро, а сервер без поддержки имеет более быстрое ядро, почему он работает хуже, чем мой VPS?

У меня нет перестановки памяти на любом из серверов.

TOP говорит, что мои процессоры работают на 100%. Я получаю среднюю нагрузку 18 (5 на VPS).

Это будет так, или я что-то упустил?

Запуск lscpu дает мне 1,6 ГГц на моем голом железном сервере. Это было видно и на /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
Глауко Катталини Линс
источник
32
Потому что восьмилетние процессоры делают гораздо меньше за такт, чем современные процессоры.
Майкл Хэмптон
3
Вы хотите сбросить настройки BIOS по умолчанию. Эти серверы звучат так, как будто у них неоптимальная конфигурация. Смотрите мое редактирование ниже.
ewwhite
Вы должны попробовать запустить только 1 поток на ядро. Если ядро ​​работает медленно, высокая нагрузка может означать, что процессор тратит много времени на переключение задач и выполняет меньше задач.
Немо
Вы можете найти в Интернете «ЦП», чтобы найти сравнение производительности. Мой любимый такой ресурс - CPUBenchmark.net .
6
Взгляните также на разницу в размерах кэша. Промах кэша может быть ужасным.
acelent

Ответы:

44

Усовершенствования процессоров, тактовая частота и вычисления IPC могут сделать практически невозможным разумное сравнение десятилетних процессоров с современными. Мало того, что инструкции за цикл будут меняться, но у более новых процессоров есть наборы команд, предназначенные для сложных вычислений (в качестве примера Intel добавила AES-NI), тактовая частота больше не является разумным компаратором из-за этих факторов (я упоминал многоядерный против гиперпоточности ...). Если у вас будет достаточно времени и терпения, вы наверняка сможете выяснить, сколько старых процессоров равняется 1 новому процессу, но в итоге вычисления скажут, что покупать новый процессор дешевле и быстрее.

Джим Б
источник
2
Существует множество сайтов, которые уже делают это, сравнивая тесты производительности каждого процессора.
Майкл Хэмптон
4
Не совсем точно, но вот эталонный тест Passmark для Intel Xeon E5-2680 с частотой 2,70 ГГц и Intel Xeon X7350 с
частотой
Проблема с эталонным тестом заключается в том, что по своей природе он не оптимизирован для данного конкретного процессора. Это не плохо для грубой оценки, но вам придется переписать и перекомпилировать с лучшим набором инструкций для каждого. очень немногие инструменты написаны с чем-либо, кроме «сколько раз можно вычислить« х »
Джим Б.
1
@JimB, да, но симуляция OP также может быть не оптимизирована для конкретного процессора. (если это так, я пропустил это, извините)
Давид Балажич
1
Вероятно, нет, и в этом случае моделирование де-факто является эталоном, если только программа не перекомпилирована. Сторонний эталонный тест был бы менее точным.
Джим Би
32

Я не хочу звучать ужасно, подчеркивая что-то, что должно быть здесь очевидно, но вы сравниваете серверный процессор высокого класса с 2014 года с серверным процессором высокого класса с 2007 года .

Я не думаю, что это требует гораздо большего объяснения.

Есть причина, по которой HP ProLiant DL580 G5 сегодня доступен так недорого . Они были большими, медленными и лишены многих функций, которые желательны на более современных серверах. Я продал свой последний в 2009 году . Это была неудачная покупка, и вам лучше обслуживать процессор семейства процессоров Nehalem или Westmere, если вы вынуждены приобретать бывшее в употреблении оборудование.

Кроме того, приобретенные вами серверы очень неэффективны с точки зрения энергопотребления, поэтому они будут дорогостоящими в эксплуатации.


Кажется, что ваши физические серверы работают в режиме энергосбережения, который снизил тактовую частоту вашего процессора. Вы захотите зайти в BIOS (нажмите F9 при загрузке) и восстановить заводские настройки сервера ( кто знает, что еще было изменено по умолчанию? )

введите описание изображения здесь

ewwhite
источник
7
@GlaucoCattaliniLins Нет.
Ewwhite
1
Не могли бы вы уточнить это? У меня проблемы с перевариванием. У меня есть возможность поменять на другие модели, поэтому я хочу сделать все правильно, если дело доходит до этого. - Сначала я подумал, что это может быть размер кэша E5 (30 МБ), но затем он будет использоваться другими VPS.
Глауко Катталини Линс
11
@GlaucoCattaliniLins X7350 основан на микроархитектуре Core 2. Фактически, это сравнимо с Core 2 Quad (сколько времени прошло с тех пор, как вы последний раз слышали о них?). Он настолько стар, что не поддерживает инструкции SSE4 +, AVX (2), FMA или AES, поэтому, если ваши симуляции являются числовыми, они получают штраф в 2 раза больше, а криптографическая скорость AES страдает еще больше. Наконец, Intel выпустила 6 микроархитектурных улучшений со времени Core 2, и с каждым из них увеличивается способность процессора выполнять больше команд параллельно или не по порядку, пропускная способность памяти.
Iwillnotexist Idonotexist
10
@GlaucoCattaliniLins В отличие от этого ваш VPS-сервер поддерживает FMA, поэтому он, по крайней мере, такой же новый, как микроархитектура Haswell. Команда FMA позволяет выполнять умножение и сложение два-в-одном, и все в Haswell (декодеры команд, буфер переупорядочения, предикторы ветвления, пропускная способность памяти, ALU) настроено так, чтобы можно было поддерживать подачу двойных векторных FMA , Таким образом, Haswell может выдержать в одном цикле синхронизации: 1) две 8-элементные векторные операции вида float d = a + b*c, 2) две 32-байтовые загрузки ( aи b) и 3) одну 32-байтовую память ( d). Это удивительно хорошо настроено.
Iwillnotexist Idonotexist
2
@IwillnotexistIdonotexist: он почти наверняка не компилировал для каждой машины в отдельности -march=native, поэтому я предполагаю, что его код использует только SSE2 в любой системе. Я предполагаю, что пропускная способность памяти, вероятно, является узким местом, особенно если его ядро ​​не имеет поддержки NUMA или шаблоны распределения его сима не подходят для NUMA. Это что, четырехъядерный четырехъядерный процессор с двухканальными контроллерами памяти на каждом сокете?
Питер Кордес