Score:3

Vmware Esxi - ปัญหาประสิทธิภาพของซอฟต์แวร์ 32 บิตแบบเก่าบนมัลติคอร์

ธง cn

ฉันเป็นบ้ามา 2 วันแล้ว และกำลังขอความช่วยเหลือ

ฉันมีโปรแกรมที่พัฒนาใน delphi (ประมาณช่วงต้นยุค 2000) ที่เข้าถึงฐานข้อมูล firebird v3 ซึ่งติดตั้งอยู่ในเครื่องเดียวกันในปัจจุบัน (เซิร์ฟเวอร์ windows 2016 x64 - db และโปรแกรมคือ x86)

เครื่องนี้เป็น VM ที่กำหนดค่าบน vmware esxi ฉันมาถึงจุด: ถ้าฉันกำหนดค่า VM ด้วย 1 vCPU เพียง 1 โปรแกรมจะทำงานได้ดีมาก หากฉันกำหนดค่าด้วย 2 vCPU (1 ซ็อกเก็ตและ 2 คอร์) หรือมากกว่านั้น ประสิทธิภาพลดลงครึ่งหนึ่ง

ปัญหาคือเมื่อปล่อย vCPU ไว้เพียงตัวเดียว cpu จะอยู่ที่ 100% ตลอดเวลาแม้เพียงสำหรับงาน windows server (เช่น ค้นหาการอัปเดตและอื่นๆ)

คุณมีคำแนะนำหรือไม่?

PS: ฉันไม่สามารถเปลี่ยนไปใช้ firebird x64 ได้เพราะห้องสมุดจำนวนมากเป็น x86

PPS: ระบบปฏิบัติการบน VM คือ Windows Server 2016 Standard ed

joeqwerty avatar
cv flag
**คุณมีคำแนะนำอะไรไหม** - หากโปรแกรมทำงานได้ดีมากกับ 1 vCPU ให้ปล่อยไว้อย่างนั้นและเพิกเฉยต่อการใช้งาน CPU มิฉะนั้น ให้สร้างแอปของคุณใหม่
vidarlo avatar
ar flag
ค้นหาจุดที่คอขวดซึ่งนำไปสู่ประสิทธิภาพเพียงครึ่งเดียว ไม่มีวิธีแก้ไขปัญหานี้ง่ายๆ
cn flag
ลองตั้งค่าความเกี่ยวข้องของโปรเซสเซอร์เป็น CPU 0 ในตัวจัดการงานหรือโดยใช้ start /affinity
shodanshok avatar
ca flag
คุณได้ลองกำหนดค่าเกสต์ของคุณด้วย 2 ซ็อกเก็ตโดยแต่ละซ็อกเก็ตมีคอร์เดียวหรือไม่?
cn flag
เมื่อใช้ 1 vCPU โดยที่แอปของคุณไม่ได้ทำงาน คุณจะได้รับการใช้งาน CPU 100% จากบริการเบื้องหลังของ Windows เท่านั้น บางทีนั่นอาจเป็นที่ที่มีบางอย่างผิดปกติ ไม่แน่ใจว่า CPU ที่มีอยู่จริงของคุณคืออะไร แต่ดูเหมือนว่าจะไม่เป็นไรสำหรับฉัน
cn flag
ตกลง นี่เป็นซอฟต์แวร์เก่า แต่ใช้ระบบปฏิบัติการอะไร หนึ่งใน VM?
MenInTheMiddle avatar
cn flag
ระบบปฏิบัติการคือ Windows Server 2016 Standard edition
Score:5
ธง cn

ปล่อยให้แขกรับเชิญที่ CPU เดียว และบันทึกเหตุผลในบันทึกเกี่ยวกับแขกรายนี้ในคลัง

มุ่งเน้นที่เมตริกประสิทธิภาพการทำงานของแอปพลิเคชันให้มากขึ้น และสนใจเมตริกพื้นฐานที่ทำให้เข้าใจผิด เช่น การใช้งาน CPU ให้น้อยลง แอปพลิเคชันแบบโต้ตอบตอบสนองหรือไม่? การสืบค้นแบบกลุ่มดำเนินการเสร็จสิ้นภายในระยะเวลาที่ยอมรับได้หรือไม่ ถ้าเป็นเช่นนั้น ไม่ต้องกังวลเกี่ยวกับ CPU

แก้ไข: ระดับ "ล็อค" ของประสิทธิภาพที่ไม่ดีไม่ได้อยู่ในคำถามเดิมของคุณ ซึ่งเป็นบริบทที่สำคัญ การแก้ไขปัญหานั้นอาจคุ้มค่ากับความพยายามเพิ่มเติม:

  • กำหนดเวลาการบำรุงรักษาเมื่อปิดฐานข้อมูล เพื่อใช้การอัปเดตและงานอื่นๆ
  • เพิ่ม CPU และใช้การกำหนดค่า CPUAffinity ระดับแอปพลิเคชันที่ความคิดเห็นอื่นๆ กล่าวถึง เพื่อล็อกไว้เป็นค่าเดียว
MenInTheMiddle avatar
cn flag
ฉันออกจากแขกที่ 1 vCPU ทุกอย่างเรียบร้อยดีจนกระทั่งเซิร์ฟเวอร์ windows ตัดสินใจติดตั้งการอัปเดต (ตัวติดตั้งโมดูลกระบวนการของ Windows เร่งความเร็วซีพียูสูงสุด 100% ทำให้กระบวนการ firebird ล็อคโดยสมบูรณ์)
Score:2
ธง ru

หากคุณแก้ไขความเกี่ยวข้องของกระบวนการเป็นคอร์เดียว คอร์อื่นๆ จะยังคงว่างสำหรับกระบวนการอื่นๆ อาจจำเป็นต้องแก้ไขเซิร์ฟเวอร์ Firebird เป็นแกนเดียวกันหรือคอร์อื่นทั้งนี้ขึ้นอยู่กับปัญหาการจัดตารางเวลาจริง

อย่างไรก็ตาม เนื่องจาก ESXi ทำการจำลองแกน CPU ด้วยเช่นกัน มันจะทำการย้ายแกน vCPU ไปทั่วแกนกายภาพของคุณ คุณอาจต้องแก้ไขความเกี่ยวข้องของ VM กับแกนเฉพาะเช่นกัน

คุณควรทราบว่าการปรับแต่งประเภทนี้เกิดจากซอฟต์แวร์ที่มีการเข้ารหัสไม่ดีหรือล้าสมัยอย่างมาก คุณควรตรวจสอบการอัปเดตรหัสอย่างจริงจัง

ar flag
jpa
[คำถามที่พบบ่อยเกี่ยวกับ Firebird](https://www.firebirdfaq.org/faq52/) ยังแนะนำการตั้งค่าความเกี่ยวข้องของ CPU แม้ว่าจะผ่านไฟล์กำหนดค่าของตัวเองก็ตาม
Zac67 avatar
ru flag
ตัวเลขนั้น - อย่างไรก็ตามเนื่องจากการจำลองเสมือนของ CPU VM อาจต้องแก้ไขบางคอร์เช่นกัน
MenInTheMiddle avatar
cn flag
ฉันพยายามตั้งค่า cpu affinity mask เป็น cpu ตัวแรก (และฉันพยายามตั้งค่า affinity mask เป็น core #0 ในข้อมูลจำเพาะ vm ด้วย) โดยไม่มีผลลัพธ์ที่น่าสังเกต Firebird เวอร์ชันล่าสุดดูเหมือนจะมีปัญหาเกี่ยวกับพารามิเตอร์หน้ากากความสัมพันธ์ของ CPU ในไฟล์กำหนดค่าที่รายงานที่ [ให้ใช้ 64-bit int สำหรับหน้ากากความสัมพันธ์ของ CPU](https://github.com/FirebirdSQL/firebird/commit/188c1c6176c63cff6eedd85806bd266352df11f0) คุณยืนยันหรือไม่ว่าข้อผิดพลาดอาจเป็นสาเหตุของการขาดผลลัพธ์ในการตั้งค่า cpu affinity mask ใน firebird.conf ?
Zac67 avatar
ru flag
@MenInTheMiddle หากมีปัญหาในการแคช คุณต้องแก้ไขความสัมพันธ์ของ VM ในการตั้งค่าขั้นสูงของ ESXi/vSphere ด้วย
Score:0
ธง cn

นี่เป็นปัญหาที่ทราบของ FireBird

ฉันได้จัดการลูกค้าบางรายที่ใช้ FireBird สำหรับซอฟต์แวร์ต่างๆ และสถิติมัลติเธรดนั้นยากที่จะกำหนดค่าด้วย .conf แต่ก่อนอื่นคุณต้องติดตั้ง Firebird ด้วยการตั้งค่าที่คุณต้องการสำหรับการใช้งาน multicpu ซึ่งเป็นเซิร์ฟเวอร์คลาสสิก

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

อย่าลืมว่าแอปไคลเอนต์ต้องการไลบรารี่ที่ปลอดภัยแบบมัลติเธรดดินด้วยหากคุณต้องการแน่ใจ

ไลบรารีไคลเอนต์ที่ปลอดภัยสำหรับเธรด

ไลบรารีไคลเอนต์ที่ปลอดภัยสำหรับเธรด

ดมิทรี เยมานอฟ
วลาดีสลาฟ คอร์ซัน
อเล็กซ์ เพชคอฟ

ตัวติดตามอ้างอิง CORE-707

ไลบรารีของไคลเอ็นต์ รวมถึงไลบรารีแบบฝัง ตอนนี้สามารถใช้ในแอปพลิเคชันแบบมัลติเธรดได้โดยไม่ต้องมีระดับแอปพลิเคชันใดๆ

การซิงโครไนซ์

MenInTheMiddle avatar
cn flag
ขอบคุณสำหรับการตอบกลับของคุณ. ฉันใช้ firebird 3 (superserver) ดูเหมือนว่าเวอร์ชัน 3 จะปรับให้เหมาะกับการทำงานแบบมัลติคอร์ (เป้าหมายหลักสำหรับ Firebird 3.0 คือการรวมสถาปัตยกรรมเซิร์ฟเวอร์และปรับปรุงการรองรับ SMP และแพลตฟอร์มฮาร์ดแวร์แบบมัลติคอร์ - firebirdsql.org) ฉันจะลองกับการกำหนดค่าเซิร์ฟเวอร์แบบคลาสสิกต่อไป ฉันจะแจ้งให้คุณทราบ
yagmoth555 avatar
cn flag
@MenInTheMiddle โอเค ฉันไม่เห็นเวอร์ชัน 3 จากนั้นแค่ใช้ความสัมพันธ์ ถ้าใช้ superserver โดยค่าเริ่มต้น classic คุณไม่จำเป็นต้องใช้ แต่บน superserver ใช้งานได้ แต่คุณต้องตั้งค่าถ้าฉันจำได้อย่างถูกต้อง

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา