KVM guest io นั้นช้ากว่า host io: ปกติไหม?


13

ฉันมีการติดตั้งระบบโฮสต์ Qemu-KVM บน CentOS 6.3 HDD 1TB SATA สี่ตัวทำงานใน Software RAID10 Guest CentOS 6.3 ได้รับการติดตั้งใน LVM แยกต่างหาก ผู้คนบอกว่าพวกเขาเห็นการแสดงของแขกเกือบเท่ากับการเป็นเจ้าภาพ แต่ฉันไม่เห็น การทดสอบ i / o ของฉันแสดง 30-70% ประสิทธิภาพช้ากว่าแขกกว่าบนระบบโฮสต์ ฉันพยายามเปลี่ยนตัวกำหนดตารางเวลา (ตั้งค่าelevator=deadlineบนโฮสต์และelevator=noopแขก) ตั้งค่าblkio.weightเป็น 1,000 ใน cgroup เปลี่ยน io เป็น virtio ... แต่การเปลี่ยนแปลงเหล่านี้ไม่ได้ให้ผลลัพธ์ที่สำคัญอะไรเลย นี่เป็นส่วนกำหนดค่าแขก. xml:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/dev/vgkvmnode/lv2'/>
  <target dev='vda' bus='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>

มีการทดสอบของฉัน:

ระบบโฮสต์:

ทดสอบไอโอโซโฟน

# iozone -a -i0 -i1 -i2 -s8G -r64k
                                                            random  random 
              KB  reclen   write rewrite    read    reread    read   write 
         8388608      64  189930  197436   266786   267254   28644   66642 

dd อ่านการทดสอบ: หนึ่งกระบวนการและสี่กระบวนการพร้อมกัน

# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct
1073741824 bytes (1.1 GB) copied, 4.23044 s, 254 MB/s

# dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/vgkvmnode/lv2 of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 14.4528 s, 74.3 MB/s
1073741824 bytes (1.1 GB) copied, 14.562 s, 73.7 MB/s
1073741824 bytes (1.1 GB) copied, 14.6341 s, 73.4 MB/s
1073741824 bytes (1.1 GB) copied, 14.7006 s, 73.0 MB/s

dd write test: หนึ่งกระบวนการและสี่กระบวนการพร้อมกัน

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 6.2039 s, 173 MB/s

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 32.7173 s, 32.8 MB/s
1073741824 bytes (1.1 GB) copied, 32.8868 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9097 s, 32.6 MB/s
1073741824 bytes (1.1 GB) copied, 32.9688 s, 32.6 MB/s

ระบบแขก:

ทดสอบไอโอโซโฟน

# iozone -a -i0 -i1 -i2 -s512M -r64k
                                                            random  random
              KB  reclen   write rewrite    read    reread    read   write
          524288      64   93374  154596   141193   149865   21394   46264 

dd อ่านการทดสอบ: หนึ่งกระบวนการและสี่กระบวนการพร้อมกัน

# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024
1073741824 bytes (1.1 GB) copied, 5.04356 s, 213 MB/s

# dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=1024 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=2048 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=3072 & dd if=/dev/mapper/VolGroup-lv_home of=/dev/null bs=1M count=1024 iflag=direct skip=4096
1073741824 bytes (1.1 GB) copied, 24.7348 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7378 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.7408 s, 43.4 MB/s
1073741824 bytes (1.1 GB) copied, 24.744 s, 43.4 MB/s

dd write test: หนึ่งกระบวนการและสี่กระบวนการพร้อมกัน

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 10.415 s, 103 MB/s

# dd if=/dev/zero of=test bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test2 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test3 bs=1M count=1024 oflag=direct & dd if=/dev/zero of=test4 bs=1M count=1024 oflag=direct
1073741824 bytes (1.1 GB) copied, 49.8874 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8608 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.8693 s, 21.5 MB/s
1073741824 bytes (1.1 GB) copied, 49.9427 s, 21.5 MB/s

ฉันสงสัยว่าเป็นสถานการณ์ปกติหรือฉันพลาดอะไรไปหรือเปล่า


คุณบอกว่าคุณได้เปลี่ยนแขกของคุณให้ใช้ประเภทรถบัสของ virtio ซึ่งให้ประสิทธิภาพที่ดีขึ้น แต่ต้องมีไดรเวอร์ที่ติดตั้ง virtio เพื่อเก็บเกี่ยวผลประโยชน์เหล่านี้ คุณไม่ได้บอกว่าคุณใช้มันหรือเปล่า ฉันไม่รู้ CentOS อย่างละเอียดพอที่จะแสดงความคิดเห็นเกี่ยวกับสภาพอากาศที่ไดรเวอร์เหล่านี้จะปรากฏในแขกของคุณโดยค่าเริ่มต้นหรือไม่
jwbensley

1
@javano CentOS จะมี virtio อยู่เสมอและคุณจะต้องลบออกอย่างชัดเจนโดยสร้างเคอร์เนลแพ็คเกจใหม่
Michael Hampton

มีประโยชน์เสมอที่จะรู้ว่าไชโย :)
jwbensley

คำตอบ:


22

คุณยังไม่ได้ทำการจูนประสิทธิภาพ

  <driver name='qemu' type='raw' cache='writethrough' io='native'/>

แรกคือกลไก I / O ที่จะใช้

QEMU มีกลไก I / O อะซิงโครนัสสองตัว: การจำลอง POSIX AIO โดยใช้กลุ่มเธรดของผู้ปฏิบัติงานและ Linux AIO ดั้งเดิม

ตั้งค่าอย่างใดอย่างหนึ่งio='native'หรือio='threads'ใน XML ของคุณเป็นเกณฑ์มาตรฐานแต่ละข้อ

ประการที่สองคือกลไกการแคชที่จะใช้ คุณสามารถตั้งค่าcache='writeback', cache='writethrough'หรือคุณสามารถเปิดออกด้วยcache='none'ซึ่งคุณอาจพบกับผลงานที่ดีที่สุด

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

อย่าใช้writebackนอกเสียจากว่าอาเรย์ RAID ของคุณมีแบตเตอรี่สำรองหรือคุณเสี่ยงต่อการสูญเสียข้อมูล (แน่นอนถ้าข้อมูลสูญหายก็โอเคแล้วรู้สึกฟรี)

ประการที่สามสิ่งอื่น ๆ ที่อาจช่วยได้ ได้แก่ การปิดกั้นสิ่งกีดขวางและการใช้ตัวกำหนดเวลาที่กำหนดในแขก

ในที่สุดก็ทำการวิจัย IBM ทำการนำเสนอที่น่าสนใจมากเกี่ยวกับประสิทธิภาพของ KVM I / Oในการประชุม 2010 Plumbers Plumbers นอกจากนี้ยังมีชุดวิธีปฏิบัติที่ดีที่สุดมากมายเกี่ยวกับการใช้ KVMซึ่งจะเป็นที่สนใจอย่างแน่นอน

PS การอ่านและเขียนแบบต่อเนื่องที่มีความยาวนั้นไม่ค่อยได้เป็นตัวแทนของภาระงานในโลกแห่งความเป็นจริง ลองทำเกณฑ์มาตรฐานด้วยเวิร์กโหลดประเภทอื่น ๆ โดยเฉพาะอย่างยิ่งแอปพลิเคชันจริงที่คุณตั้งใจจะใช้ในการผลิต


+1 สำหรับ "ทดสอบกับรูปแบบ IO ของคุณ"
Javier

โอ้ดีชอบเอกสาร IBM, +1 :)
jwbensley

1
มีประโยชน์มากขอบคุณ! ตอนนี้ฉันปรับปรุงผลการเป็นแขกของฉันมากถึง 90% จากประสิทธิภาพของโฮสต์ ความผิดของฉันค่อนข้างงี่เง่า: virsh reset <domain>ไม่ได้ใช้virsh edit <domain>การเปลี่ยนแปลงของฉันและฉันเชื่อว่าแขกที่มาใช้ virtio แต่จริง ๆ แล้วมันไม่ได้ เท่านั้นvirsh destroy <domain>ตามด้วยvirsh start <domain>ช่วย กฎของ Virtio! ;)
Evolver

1
cache = writeback ไม่ได้เพิ่มความเสี่ยงใด ๆ ในชีวิตจริง (ข้อมูลสำคัญไม่ได้อยู่ในอันตรายเพียงข้อมูลในเที่ยวบินเท่านั้น แคช = ไม่ปลอดภัยเท่านั้นที่จะทำได้ การเขียนกลับไม่ได้หมายความถึงข้อกำหนดฮาร์ดแวร์เพิ่มเติม ("อาร์เรย์ RAID ที่สำรองแบตเตอรี่" ไม่ได้ช่วย แต่อย่างใด) มีระดับความสมบูรณ์เช่นเดียวกับ HDD write-cache: ทั้งคู่ถูกล้างข้อมูลเมื่อจำเป็นโดยระบบปฏิบัติการ
korkman

io='native'ให้ประสิทธิภาพการเขียนพิเศษเพิ่มขึ้นเกือบ 20-30% ในกรณีของฉัน
rahul286
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.