2012-06-06 36 views
6

मैं KVM सामान कर रहा हूं और कुछ प्रश्न हैं जो पता नहीं लगा सकते हैं।कैसे KVM हैंडल

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

2> यदि अतिथि को असाइन किए गए डिवाइस के लिए, हाइपरवाइजर अतिथि को उस आईआरक्यू को वितरित करेगा। कोड का पता लगाकर, मैंने पाया कि मेजबान आईआरक्यू अतिथि के साथ अलग है (मेरा मतलब है कि इंटरप्ट वेक्टर)। कैसे KVM कॉन्फ़िगर करता है जो अतिथि को वेक्टर को बाधित करता है?

3> यदि हम वीएमसीएस में कुछ फ़ील्ड सेट करके बाहरी बाधा से बाहर नहीं निकलते हैं, तो भौतिक इंटरप्ट के दौरान क्या होगा? सीपीयू प्रतिक्रिया इंटरप्ट के लिए अतिथि आईडीटी का उपयोग करेगा? यदि ऐसा है, तो क्या केवीएम अतिथि के लिए एक और आईडीटी का उपयोग करने के लिए सीपीयू को रीडायरेक्ट कर सकता है (आईडीटीआर को संशोधित करना मानता है)?

4> अतिथि आईडीटी कहां स्थित है? यह vcpu और रजिस्टरों को शुरू करते समय qemu द्वारा कॉन्फ़िगर किया गया है (आईडीटीआर शामिल करें)?

मुझे उम्मीद है कि कोई मेरे प्रश्नों का उत्तर दे सकता है। मुझे बहुत सराहना की जाएगी।

धन्यवाद

उत्तर

2

1- 2- कोड irq_comm.c में और बहुत जटिल है। अतिथि वेक्टर के लिए, हाइपरवाइजर जाल और अतिथि के पीसीआई कॉन्फ़िगरेशन स्पेस पर नज़र रखता है (यह वास्तव में क्यूईएमयू में किया जाता है - उदाहरण के लिए देखें kvm_msi_update - हालांकि KVM के लिए एक syscall डेटा के साथ अद्यतन करता है)।

3- हां। एक और आईडीटी सेट करने के लिए - आपको वीएमसीएस में आईडीटीआर फ़ील्ड को बदलने की जरूरत है।

4- अतिथि आईडीटी अतिथि कोड द्वारा कॉन्फ़िगर किया गया है। क्यूईएमयू/केवीएम इसमें सीधे शामिल नहीं है। अतिथि आईडीटीआर के लिए परिवर्तनों की निगरानी करने के लिए आपको LIDT पर जाल करने के लिए निष्पादन-नियंत्रण को कॉन्फ़िगर करने की आवश्यकता है।

लगता है जैसे आप एएसपीएलओएस 12 से ईएलआई को लागू करने की कोशिश कर रहे हैं। मुझे ऑफ़लाइन संपर्क करें (पेपर का दूसरा लेखक - एनए)।