KVM / Qemu, Ubuntu: ทำไมซีพียูแขกมากขึ้นจึงเพิ่ม Disk-I / O อย่างรวดเร็ว?


9

เรามีคลัสเตอร์ Heartbeat / DRBD / Pacemaker / KVM / Qemu / libvirt ซึ่งประกอบด้วยสองโหนด แต่ละโหนดใช้งาน Ubuntu 12.04 64 Bit พร้อมแพ็คเกจ / เวอร์ชั่นต่อไปนี้:

  • เคอร์เนล 3.2.0-32-generic # 51-Ubuntu SMP
  • DRBD 8.3.11
  • qemu-kvm 1.0 + noroms-0ubuntu14.3
  • libvirt 0.9.13
  • เครื่องกระตุ้นหัวใจ 1.1.7
  • การเต้นของหัวใจ 3.0.5

แขกเสมือนกำลังใช้งาน Ubuntu 10.04 64 บิตและ Ubuntu 12.04 64 บิต เราใช้ฟีเจอร์ libvirt เพื่อส่งผ่านความสามารถของโฮสต์ CPU ไปยังผู้เยี่ยมชมเสมือนเพื่อให้ได้ประสิทธิภาพของ CPU ที่ดีที่สุด

ตอนนี้ที่นี่คือการตั้งค่าทั่วไปในคลัสเตอร์นี้:

  • VM "การตรวจสอบ" มี 4 vCPU
  • VM "การตรวจสอบ" ใช้ IDE เป็นดิสก์อินเตอร์เฟส (ขณะนี้เรากำลังเปลี่ยนเป็น VirtIO ด้วยเหตุผลที่ชัดเจน)

เราเพิ่งทำการทดสอบแบบง่าย ๆ ฉันรู้ว่าพวกเขาไม่ใช่มืออาชีพและไม่ถึงมาตรฐานระดับสูง แต่พวกเขาแสดงแนวโน้มที่แข็งแกร่งแล้ว:

โหนด A กำลังเรียกใช้ VM "bla" โหนด B กำลังเรียกใช้ VM "การตรวจสอบ"

เมื่อเราทำการซิงค์ไฟล์จาก VM "bla" ถึง VM "การตรวจสอบ" เราจะได้รับเพียง 12 MB / s เมื่อเราทำ dd อย่างง่าย ๆ ถ้า = / dev / null ของ = / tmp / blubb ภายใน VM "การตรวจสอบ" เราจะได้รับประมาณ 30 MB / s

จากนั้นเราเพิ่ม vCPU อีก 4 ตัวใน VM "การตรวจสอบ" และรีสตาร์ทมัน VM "การตรวจสอบ" ตอนนี้มี 8 vCPU เราทำการทดสอบซ้ำด้วยผลลัพธ์ต่อไปนี้: เมื่อเราทำการซิงค์ไฟล์จาก VM "bla" ถึง VM "การตรวจสอบ" เราจะได้รับ 36 MB / s เมื่อเราทำ dd อย่างง่าย ๆ ถ้า = / dev / null ของ = / tmp / blubb ภายใน VM "การตรวจสอบ" ตอนนี้เราบรรลุถึง 61 MB / s

สำหรับฉันเอฟเฟกต์นี้ค่อนข้างน่าแปลกใจ ทำไมการเพิ่มซีพียูเสมือนจริงมากขึ้นสำหรับแขกเสมือนนี้จึงทำให้ดิสก์มีประสิทธิภาพมากขึ้นใน VM?

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


2
ใช้เครื่องมือเปรียบเทียบที่สร้างขึ้นโดยมีวัตถุประสงค์เช่นiozoneหรือbonnie ++เพื่อช่วยกำจัดตัวแปรอื่น ๆ
ewwhite

มันจะน่าสนใจว่า CPU ที่โหลดจริงดูอย่างไร ... เป็นสิ่งที่ cpu bound ถูกนำมาใช้ในสถานที่ที่ซ่อนอยู่ (rsync plus อาจ ssh แน่นอนคือขอบเขตดังนั้นไดร์เวอร์เครือข่ายก็แนะนำเช่นนั้น dd อาจทำ cpu ที่ไม่คาดคิด ... ) หรือจริง ๆ แล้วมันเป็นสิ่งที่รอคอยกันไม่ได้เนื่องจากมีเธรดการเรียกใช้งานน้อยลงหรือไม่
rackandboneman

3
วิ่งkvm_traceเพื่อดูจำนวนIO_Exitsการเปลี่ยนแปลงเมื่อคุณเปลี่ยนหมายเลข CPU ฉันเดาว่าเป็นเพราะคุณใช้ IDE ซึ่งได้รับการจัดกำหนดการกับซีพียูแขก ด้วย virtio ประสิทธิภาพควรจะสอดคล้องกันและเมื่อ data-plane เป็น qemu มันจะได้รับการเพิ่มขึ้นอย่างมาก การเดาอื่นอาจเป็นข้อเท็จจริงที่ว่าคุณกำลังใช้การแจกจ่ายที่เป็นที่รู้จักสำหรับกองการจำลองเสมือนของ buggy
dyasny

@ ewwhite: ใช่การทดสอบระดับมืออาชีพจะเป็นทางเลือกที่ดี อย่างไรก็ตามฉันต้องการที่จะเข้าใจก่อนว่าทำไมพฤติกรรม I / O นี้จึงเกิดขึ้น @ rachandboneman: เมื่อฉันดูล่าสุดซีพียูทั้ง 4 ตัวมีค่าการรอคอยที่สูงมาก (ประมาณ 70-80%) @dyasny: ขอบคุณฉันจะลองดู ฉันจะตรวจสอบว่า data-plane เปิดใช้งาน / ใช้งานอยู่ในปัจจุบันได้อย่างไร
Valentin

ขณะนี้ดาต้า - แพลนกำลังทดลองแล้วและผมค่อนข้างมั่นใจว่าการกระจายตัวครั้งแรกที่จะรับมันคือ Fedora pl.digipedia.org/usenet/thread/11769/28329
dyasny

คำตอบ:


9

ฉันจะให้ความคิด / คำอธิบายคร่าวๆ

ในสถานการณ์ OP นอกเหนือจากการวัดภายใน VM โฮสต์ควรดูด้วยเช่นกัน

ในกรณีนี้เราสามารถถือว่าสิ่งต่อไปนี้ถูกต้อง

  1. ในการทดสอบทั้งหมดแบนด์วิดท์ของโฮสต์ I / O (ดิสก์) ไม่สูงสุด ในขณะที่ VM ( "monitoring") I / O เพิ่มขึ้นด้วยการจัดสรรซีพียูให้มากขึ้น หากโฮสต์ I / O นั้นมีค่าสูงสุดแล้วไม่ควรมีการเพิ่มประสิทธิภาพของ I / O
  2. "bla"ไม่ใช่ปัจจัย จำกัดเนื่องจาก"monitoring"ประสิทธิภาพของ I / O ดีขึ้นโดยไม่มีการเปลี่ยนแปลง"bla"
  3. CPU เป็นโรงงานหลักสำหรับเพิ่มประสิทธิภาพ (ในกรณี OP) เนื่องจาก I / O ไม่ใช่คอขวดและ OP ไม่ได้กล่าวถึงขนาดหน่วยความจำที่เปลี่ยนแปลง แต่ทำไม หรืออย่างไร

ปัจจัยเพิ่มเติม

  1. การเขียนใช้เวลามากกว่าการอ่านนี่เป็นสิ่งเดียวกันสำหรับ VM และสำหรับโฮสต์ วางไว้ในเงื่อนไขที่ง่ายมาก: VM รอให้โฮสต์อ่านและเขียนให้เสร็จ

สิ่งที่เกิดขึ้นเมื่อซีพียูมากขึ้นได้รับมอบหมายให้"monitoring"?

เมื่อ"monitoring"จัดสรรซีพียูมากขึ้นก็จะได้รับพลังการประมวลผลมากขึ้น แต่ก็ยังเพิ่มเวลาการประมวลผลสำหรับ I / O

สิ่งนี้ไม่เกี่ยวกับrsyncเนื่องจากเป็นโปรแกรมเธรดเดี่ยว

เป็นเลเยอร์ I / O ที่ใช้พลังงาน CPU ที่เพิ่มขึ้นหรือแม่นยำยิ่งขึ้นเวลาการประมวลผลที่เพิ่มขึ้น

หากใช้โปรแกรมการตรวจสอบ cpu (เช่น top) "monitoring"ระหว่างการทดสอบจะไม่แสดงหนึ่งรายการ แต่การใช้งาน cpu ทั้งหมดเพิ่มขึ้นและยัง% wa % wa คือเวลารอที่ใช้กับ I / O

การเพิ่มประสิทธิภาพนี้จะเกิดขึ้นก็ต่อเมื่อโฮสต์ I / O ของคุณไม่สูงสุด ออก.

ฉันไม่พบการกำหนดเวลา cpu ในไซต์ KVM แต่มีบล็อกนี้ที่กล่าวถึง KVM กำลังใช้ CFS และ cgroups ต่อไปนี้คือคำพูด

ภายใน KVM นั้น vcpu แต่ละตัวจะถูกแมปกับกระบวนการ Linux ซึ่งจะใช้ความช่วยเหลือด้านฮาร์ดแวร์เพื่อสร้าง 'ควันและกระจก' ที่จำเป็นสำหรับการจำลองเสมือน ดังนั้น vcpu จึงเป็นอีกกระบวนการหนึ่งของ CFS และที่สำคัญคือ cgroups ซึ่งในฐานะผู้จัดการทรัพยากรอนุญาตให้ Linux จัดการการจัดสรรทรัพยากร - โดยทั่วไปจะเป็นสัดส่วนเพื่อกำหนดการจัดสรรข้อ จำกัด cgroups ยังนำไปใช้กับหน่วยความจำเครือข่ายและ I / O กลุ่มกระบวนการสามารถเป็นส่วนหนึ่งของกลุ่มการจัดตารางเวลาเพื่อใช้ข้อกำหนดการจัดสรรทรัพยากรกับกลุ่มลำดับขั้นของกระบวนการ

โดยสรุปซีพียูมากขึ้น = มากขึ้นเวลา cpu = มากขึ้น I / O ช่วงเวลาในช่วงเวลาที่กำหนด


ขอบคุณที่เขียนคำตอบนี้ "vCPU เพิ่มเติมหมายถึงเวลาในการประมวลผลที่มากขึ้นสำหรับ I / O" คือคำอธิบายที่ฉันกำลังมองหา คุ้มค่าเงิน!
Valentin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.