KVM अतिथि io होस्ट io की तुलना में बहुत धीमा है: क्या यह सामान्य है?


13

मेरे पास CentOS 6.3 पर Qemu-KVM होस्ट सिस्टम सेटअप है। सॉफ्टवेयर RAID10 में काम कर रहे चार 1TB SATA HDDs। गेस्ट CentOS 6.3 अलग LVM पर स्थापित किया गया है। लोगों का कहना है कि वे अतिथि प्रदर्शन को मेजबान प्रदर्शन के लगभग बराबर देखते हैं, लेकिन मैं ऐसा नहीं देखता। मेरे i / o परीक्षण मेजबान सिस्टम की तुलना में अतिथि पर 30-70% धीमी प्रदर्शन कर रहे हैं। मैंने अनुसूचक ( elevator=deadlineमेजबान पर और elevator=noopअतिथि पर सेट) blkio.weightको बदलने, cgroup में 1000 पर सेट करने, 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 परीक्षण

# 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 परीक्षण

# 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

मुझे आश्चर्य है कि सामान्य स्थिति है या मैंने कुछ याद किया?


आपने कहा कि आपने अपने अतिथि को बस प्रकार के सद्गुण का उपयोग करने के लिए बदल दिया है जो बेहतर प्रदर्शन देता है, लेकिन इसमें पुण्य चालक को इन लाभों को प्राप्त करने के लिए स्थापित होना चाहिए। Youdidn't कहते हैं कि आप उन का उपयोग कर रहे हैं या नहीं। मुझे नहीं पता कि CentOS को पूरी तरह से पता है कि ये ड्राइवर किस तरह से टिप्पणी कर सकते हैं कि ये ड्राइवर आपके मेहमान में डिफ़ॉल्ट रूप से मौजूद होगा या नहीं।
jwbensley

1
@ जावानो सेंटो में हमेशा गुण शामिल होते हैं और आपको कर्नेल संकुल के पुनर्निर्माण के द्वारा इसे स्पष्ट रूप से निकालना होगा।
माइकल हैम्पटन

हमेशा जानना आसान है, चीयर्स :)
jwbensley

जवाबों:


22

आप अभी तक प्रदर्शन ट्यूनिंग के साथ नहीं कर रहे हैं।

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

पहला जो मैं / हे तंत्र का उपयोग करने के लिए है।

QEMU में दो अतुल्यकालिक I / O तंत्र हैं: कार्यकर्ता थ्रेड्स और देशी Linux AIO के पूल का उपयोग करके POSIX AIO इम्यूलेशन।

इनमें से प्रत्येक को बेंचमार्क करने के लिए io='native'या io='threads'अपने XML में सेट करें ।

दूसरा है जो उपयोग करने के लिए कैशिंग तंत्र। आप सेट कर सकते हैं cache='writeback', cache='writethrough'या आप इसे बंद कर सकते हैं cache='none', जो आपको वास्तव में सबसे अच्छा काम मिल सकता है।

यदि आप कच्चे वॉल्यूम या विभाजन का उपयोग कर रहे हैं, तो कैश से पूरी तरह से बचना सबसे अच्छा है, जिससे डेटा कॉपी और बस ट्रैफ़िक कम हो जाता है।

का प्रयोग न करें writebackजब तक कि आपके RAID सरणी बैटरी समर्थित है, या आप डेटा को खोने का जोखिम। (बेशक, अगर डेटा खोना ठीक है, तो स्वतंत्र महसूस करें।)

तीसरा, कुछ अन्य चीजें जो बाधाओं को बंद करने में मदद कर सकती हैं, और अतिथि में समय सीमा अनुसूचक का उपयोग कर सकती हैं।

अंत में, कुछ शोध करें। आईबीएम ने 2010 के लिनक्स प्लंबर सम्मेलन में KVM I / O प्रदर्शन पर एक बहुत ही रोचक प्रस्तुति दी । इसके अलावा उनके पास केवीएम का उपयोग करने पर सर्वोत्तम प्रथाओं का एक व्यापक सेट है जो निश्चित रूप से ब्याज का होगा।

PS लंबा क्रमिक पढ़ता है और लिखता है शायद ही कभी एक वास्तविक दुनिया वर्कलोड के प्रतिनिधि हैं। अन्य प्रकार के वर्कलोड के साथ बेंचमार्क करने की कोशिश करें, आदर्श रूप से वास्तविक एप्लिकेशन (ओं) को आप उत्पादन में चलाने का इरादा रखते हैं।


+1 "अपने आईओ पैटर्न के साथ परीक्षण" के लिए
जेवियर

ओह, आईबीएम डॉक्स को अच्छा लगता है, +1 :)
jwbensley

1
बहुत मददगार, धन्यवाद! अब मैं अपने अतिथि परिणामों को होस्ट प्रदर्शन से 90% तक सुधार रहा हूं। मेरी गलती काफी बेवकूफ थी: virsh reset <domain>मेरे virsh edit <domain>परिवर्तनों को लागू नहीं किया था , और मुझे विश्वास था कि अतिथि ने गुण का इस्तेमाल किया था, लेकिन यह वास्तव में नहीं था। केवल मदद virsh destroy <domain>द्वारा पीछा किया virsh start <domain>। सदाचार के नियम! ;)
इवोल्वर

1
कैश = राइटबैक किसी भी वास्तविक जीवन के जोखिम को नहीं जोड़ता है (महत्वपूर्ण डेटा खतरे में नहीं है, केवल इन-फ्लाइट डेटा, जो दुर्घटनाग्रस्त रास्ते पर छोड़ दिया जाता है)। केवल कैश = असुरक्षित करता है। राइटबैक अतिरिक्त हार्डवेयर आवश्यकताओं ("बैटरी समर्थित RAID सरणी" किसी भी तरह से मदद नहीं करता है) का अर्थ नहीं करता है। यह HDD राइट-कैश के रूप में एक ही अखंडता स्तर है: दोनों ऑपरेटिंग सिस्टम द्वारा आवश्यक होने पर फ्लश किए जाते हैं।
कॉर्कमैन

io='native'मेरे मामले में लगभग 20-30% अतिरिक्त WRITE प्रदर्शन दिया
rahul286
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.