2012-05-31 13 views
5

मैं वीएम के आईओ के लिए केवीएम अनुकूलन पर काम कर रहा हूं। मैंने केवीएम कोड पढ़े हैं, आमतौर पर सभी भौतिक बाधा VMexit का कारण बनती है और KVM में प्रवेश करती है। फिर मेजबान का आईडीटी संबंधित शारीरिक बाधा को संभालेगा। मेरा सवाल यह है कि कैसे KVM निर्णय लेता है कि अतिथि में वर्चुअल इंटरप्ट इंजेक्ट करना है या नहीं? और किस स्थिति में यह अतिथि को आभासी बाधा डालेगा?कैसे KVM भौतिक बाधा को संभालता है?

धन्यवाद

उत्तर

1

मैं तुम्हें सौंपा डिवाइस बीच में आता है (और नहीं नकल करते बीच में आता है या virt-आईओ बीच जो सीधे अतिथि को भौतिक युक्ति से अग्रेषित नहीं कर रहे हैं) का उल्लेख लगता है। असाइन किए गए डिवाइस के प्रत्येक irq के लिए, request_threaded_irq को कॉल किया जाता है और प्रत्येक इंटरप्ट पर कॉल करने के लिए kvm_assigned_dev_thread को पंजीकृत करता है। जैसा कि आप देख सकते हैं कि kvm_set_irq को तब बुलाया जाता है, और जैसा कि इंटरप्ट को मुखौटा किया जाता है, केवल एक ही कोलेसेसिंग का वर्णन किया जाता है। X86 इंटरप्ट्स को rflags.if, mov-SS द्वारा मास्क किया जा सकता है, टीपीआर के कारण जो बाधा को वितरित करने की अनुमति नहीं देता है या उच्च प्राथमिकता वाले सेवा में बाधा डालने की अनुमति नहीं देता है। अतिथि को आश्चर्यचकित न करने के क्रम में केवीएम आर्किटेक्चर परिभाषा का पालन करने के लिए बाध्य है।

2

केवीएम के दस्तावेज़ीकरण में यह बताया जाता है कि वर्चुअल इंटरप्ट को इंजेक्शन दिया जा सकता है। यहाँ लिंक http://os1a.cs.columbia.edu/lxr/source/Documentation/kvm/api.txt
लाइन नंबर पर नज़र 905
struct kvm_run संरचना मुझे लगता है कि यह कैसे वी एम behave.Use cscope बनाता है और स्रोत कोड में स्ट्रिंग request_interrupt_window के लिए खोज पर आवेदन करने के लिए नियंत्रण देता है, आप समझ जायेंगे kvm कैसे इंटरप्ट को इंजेक्ट करने के लिए अतिथि में प्रवेश करने के लिए देखते हैं। api.txt फ़ाइल के माध्यम से भी जाना बहुत उपयोगी है।

चीयर्स

संपादित
यहाँ के, मेजबान अतिथि में interupts इंजेक्शन लगाने का एक उदाहरण।
मान लें कि वहाँ अतिथि वी एम

  • यह एक VMEXIT
  • सूत्र/केवीएम VMEXIT संभालती का कारण बनता है में एक पृष्ठ दोष था
  • इसके VMCS नियंत्रण संरचना के माध्यम से VMEXIT के लिए कारण देखता है और वहाँ था कि लगता है पेज गलती
  • मेजबान/केवीएम, स्मृति वर्चुअलाइजेशन के लिए जिम्मेदार है तो यह देखने के लिए कि पृष्ठ दोष
    • कारण होता था, क्योंकि वह पृष्ठ अतिथि जिस स्थिति में यह होस्ट कर्नेल में alloc_page कॉल करता है और एक करता है के लिए आवंटित नहीं किया गया था जाँच GUEST निष्पादन फिर से शुरू करने के लिए VMENTRY।
    • या मैपिंग को GUEST ओएस द्वारा हटा दिया गया था, इस मामले में KVM एक संचार माध्यम के रूप में एक वीएमसीएस नियंत्रण संरचना का उपयोग करता है वर्चुअल इंटरप्ट कोई 14 इंजेक्ट करता है जो GUEST कर्नेल को पेज गलती को संभालने का कारण बनता है।

यह मेजबान आभासी अंतरायन डालने का एक उदाहरण है। ऐसा करने के लिए कई अन्य तरीके/कारण हैं।
आप निष्पादित करने के बाद अतिथि को VMEXIT करने के लिए VMCS कॉन्फ़िगर कर सकते हैं प्रत्येक निर्देश यह मॉनिटर ट्रैप फ़्लैग का उपयोग करके किया जा सकता है।

संबंधित मुद्दे