เพราะเหตุใดคอมพิวเตอร์ 16x 2.93GHz แกนโลหะเปลือยของฉันจึงมีประสิทธิภาพต่ำกว่า VPS ที่มี 4x2.5GHz แกน


34

ฉันได้เขียนซอฟต์แวร์แบบมัลติเธรดชิ้นหนึ่งที่ทำแบบจำลองวันละครั้ง นี่เป็นงานที่ใช้ 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 สี่อัน โดยพื้นฐานแล้วเครื่องแต่ละเครื่องมีคอร์ 16x 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 ของฉันใช้ในแกนประมวลผลรวม 44x2.5GHz ฉันได้รับการจำลองเกือบ 900 ครั้งต่อนาที
  3. สำหรับ DL580 ของฉัน, ใช้แกน 64x 2.93GHz ทั้งหมด, ฉันได้รับการจำลอง 300 ครั้งต่อนาทีเท่านั้น

ฉันเข้าใจว่า DL580 มีโปรเซสเซอร์ที่เก่ากว่า แต่ถ้าฉันใช้หนึ่งเธรดต่อหนึ่งคอร์และเซิร์ฟเวอร์โลหะเปลือยมีแกนที่เร็วกว่าทำไมมันถึงมีประสิทธิภาพต่ำกว่า VPS ของฉัน

ฉันไม่มีการสลับหน่วยความจำเกิดขึ้นในเซิร์ฟเวอร์ใด ๆ

ท็อปบอกว่าโปรเซสเซอร์ของฉันทำงานที่ 100% ฉันได้รับค่าเฉลี่ย 18 (5 ใน VPS)

นี่จะเป็นอย่างนี้หรือฉันจะทำบางสิ่งบางอย่าง?

การใช้ 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

32
เพราะตัวประมวลผลอายุแปดปีทำรอบต่อนาฬิกาน้อยกว่าตัวประมวลผลปัจจุบัน
Michael Hampton

3
คุณจะต้องการรีเซ็ตการตั้งค่า BIOS เป็นค่าเริ่มต้น เซิร์ฟเวอร์เหล่านี้ดูเหมือนว่าพวกเขามีการกำหนดค่าที่ไม่เหมาะสมกับพวกเขาเช่นกัน ดูการแก้ไขของฉันด้านล่าง
ewwhite

คุณควรลองรันเพียง 1 เธรดต่อคอร์ หากคอร์นั้นทำงานช้าโหลดที่มากอาจหมายถึงว่า CPU ใช้เวลาในการสลับงานนานและทำน้อยลง
Nemo

คุณสามารถค้นหา "benchmarks CPU" บนอินเทอร์เน็ตเพื่อค้นหาการเปรียบเทียบประสิทธิภาพ ทรัพยากรเช่นที่ฉันชอบคือCPUBenchmark.net

6
ดูความแตกต่างของขนาดแคชเช่นกัน การพลาดแคชนั้นอาจแย่
acelent

คำตอบ:


44

ความก้าวหน้าของโปรเซสเซอร์ความเร็วสัญญาณนาฬิกาและการคำนวณ IPC นั้นแทบจะเป็นไปไม่ได้เลยที่จะลองเปรียบเทียบซีพียูเก่ามาเป็นทศวรรษ ไม่เพียง แต่คำแนะนำต่อรอบจะแตกต่างกันไป แต่โปรเซสเซอร์รุ่นใหม่มีชุดคำสั่งเฉพาะสำหรับการคำนวณที่ซับซ้อน (Intel ได้เพิ่ม AES-NI เป็นตัวอย่าง) ความเร็วสัญญาณนาฬิกาไม่ได้เป็นตัวเปรียบเทียบที่สมเหตุสมผลอีกต่อไปเนื่องจากปัจจัยเหล่านี้ multi-core vs hyperthreading ... ) ด้วยเวลาและความอดทนที่เพียงพอคุณจะสามารถรู้ได้อย่างชัดเจนว่า procs รุ่นเก่ามีจำนวนเท่ากัน 1 proc รุ่นใหม่ แต่การคำนวณจะจบลงโดยบอกว่าราคาถูกกว่าและเร็วกว่าในการซื้อ CPU ใหม่


2
มีเว็บไซต์จำนวนมากที่ทำสิ่งนี้อยู่แล้วโดยเปรียบเทียบเกณฑ์มาตรฐานของ CPU ของโปรเซสเซอร์แต่ละตัว
Michael Hampton

4
ไม่ถูกต้อง แต่นี่คือเกณฑ์มาตรฐานสำหรับIntel Xeon E5-2680 @ 2.70GHzเทียบกับIntel Xeon X7350 @ 2.93GHz
chue x

ปัญหาเกี่ยวกับมาตรฐานคือโดยธรรมชาติแล้วมันไม่ได้ปรับให้เหมาะสมสำหรับโปรเซสเซอร์นั้น มันไม่เลวสำหรับการประเมินคร่าวๆ แต่คุณจะต้องเขียนและคอมไพล์ใหม่ด้วยชุดคำสั่งที่ดีที่สุดสำหรับแต่ละอัน มีเครื่องมือน้อยมากที่เขียนด้วยสิ่งอื่นนอกเหนือจาก "สามารถคำนวณ" x "ได้กี่ครั้ง
Jim B

1
@JimB ใช่ แต่การจำลอง OPs อาจไม่ได้รับการปรับให้เหมาะสมสำหรับ CPU เฉพาะ (ถ้าใช่ฉันพลาดไปขอโทษ)
David Balažic

1
อาจไม่มีซึ่งในกรณีนี้การจำลองจะเป็นเกณฑ์มาตรฐานเว้นแต่ว่าโปรแกรมจะคอมไพล์ใหม่ มาตรฐานของบุคคลที่สามจะมีความแม่นยำน้อยกว่า
Jim B

32

ฉันไม่ต้องการให้เสียงที่น่ากลัวโดยเน้นสิ่งที่ควรจะเห็นได้ชัดที่นี่ แต่คุณกำลังเปรียบเทียบโปรเซสเซอร์เซิร์ฟเวอร์ระดับ high-end จาก 2014ไปยังเซิร์ฟเวอร์โปรเซสเซอร์ระดับ high-end จาก 2007

ฉันไม่คิดว่านี่จะต้องมีคำอธิบายมากขึ้น

มีเหตุผลต์เป็นG5 เซิร์ฟเวอร์ HP ProLiant DL580สามารถใช้ได้ดังนั้นวันนี้ราคาไม่แพง มันมีขนาดใหญ่ช้าและขาดคุณสมบัติหลายอย่างที่เป็นที่ต้องการในเซิร์ฟเวอร์ที่ทันสมัยกว่า ผมขายของฉันเป็นคนสุดท้ายในปี 2009 เป็นการซื้อที่ไม่ดีและคุณจะได้รับซีพียูจากตระกูล Nehalem หรือ Westmere CPU ดีกว่าถ้าคุณถูกบังคับให้ซื้ออุปกรณ์มือสอง

นอกจากนี้เซิร์ฟเวอร์ที่คุณซื้อนั้นไม่มีประสิทธิภาพในแง่ของการใช้พลังงานดังนั้นจึงมีค่าใช้จ่ายสูงในการใช้งาน


ดูเหมือนว่าเซิร์ฟเวอร์ทางกายภาพของคุณกำลังทำงานในโหมดประหยัดพลังงานที่ปรับลดความเร็วสัญญาณนาฬิกา CPU ของคุณ คุณจะต้องการที่จะเข้าไปในไบออส (กด F9 ที่บูต) และตั้งค่าเซิร์ฟเวอร์เพื่อเริ่มต้นจากโรงงาน ( ที่รู้ว่าอะไรที่ถูกปรับเปลี่ยนจากค่าเริ่มต้น? )

ป้อนคำอธิบายรูปภาพที่นี่


7
@GlaucoCattaliniLins หมายเลข
ewwhite

1
คุณช่วยอธิบายเรื่องนี้ให้ละเอียดหน่อยได้ไหม? ฉันมีปัญหาในการย่อย ฉันมีตัวเลือกในการเปลี่ยนแปลงสำหรับรุ่นอื่นดังนั้นฉันต้องการทำให้ถูกต้องหากเป็นเช่นนั้น - ตอนแรกฉันคิดว่ามันอาจเป็นขนาดแคชของ E5 (30MB) แต่แล้วมันก็จะถูกแบ่งปันใน VPS อื่น ๆ
Glauco Cattalini Lins

11
@GlaucoCattaliniLins X7350 ขึ้นอยู่กับสถาปัตยกรรมแบบ Core 2 ในความเป็นจริงมันเปรียบได้กับCore 2 Quad (นานแค่ไหนที่คุณเคยได้ยินเรื่องนี้มานานเท่าไหร่แล้ว? มันเก่ามากที่ไม่รองรับคำสั่ง SSE4 +, AVX (2), FMA หรือ AES ดังนั้นหากการจำลองของคุณเป็นตัวเลขพวกเขาจะได้รับโทษมากกว่า 2x และความเร็ว crypto ของ AES ก็ยิ่งมากขึ้น สุดท้าย Intel ได้เปิดตัวการปรับปรุงสถาปัตยกรรมขนาดเล็ก 6 ครั้งตั้งแต่ Core 2 และด้วยการเพิ่มความสามารถของซีพียูในการรันคำสั่งเพิ่มเติมในแบบขนานหรือไม่เป็นระเบียบแบนด์วิดท์หน่วยความจำ
Iwillnotexist Idonotexist

10
@GlaucoCattaliniLins ในทางตรงกันข้ามเซิร์ฟเวอร์ VPS ของคุณรองรับ FMA ดังนั้นอย่างน้อยมันก็ใหม่เหมือน Haswell microarchitecture คำสั่ง FMA อนุญาตให้หนึ่งทำการคูณและเพิ่มสองในหนึ่งเดียวและทุกอย่างใน Haswell (ตัวถอดรหัสคำสั่งบัฟเฟอร์การจัดลำดับใหม่ตัวทำนายสาขาแบนด์วิธหน่วยความจำแบนด์วิดท์หน่วยความจำ ALUs) ได้รับการปรับ . ดังนั้น Haswell จึงสามารถรักษาไว้ได้ในหนึ่งรอบสัญญาณนาฬิกา: 1) การดำเนินงานเวกเตอร์ 8 องค์ประกอบสองรูปแบบfloat d = a + b*c, 2) โหลด 32- ไบต์ ( aและb) และ 3) ร้าน 32- ไบต์หนึ่ง (สองd) มันได้รับการปรับอย่างน่าอัศจรรย์
Iwillnotexist Idonotexist

2
@IwillnotexistIdonotexist: เขาเกือบจะไม่ได้รวบรวมเครื่องแต่ละเครื่องด้วย-march=nativeดังนั้นฉันเดาว่ารหัสของเขาจะใช้ SSE2 ในทั้งสองระบบเท่านั้น ฉันเดาแบนด์วิดธ์หน่วยความจำน่าจะเป็นคอขวดโดยเฉพาะ ถ้าเคอร์เนลของเขาไม่มีการสนับสนุน NUMA หรือรูปแบบการจัดสรรของซิมของเขานั้นไม่เป็นมิตรกับ NUMA นี่คืออะไรควอดซ็อกเก็ตควอดคอร์ที่มีตัวควบคุมหน่วยความจำสองช่องในแต่ละซ็อกเก็ต?
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.