Linux, VirtualBox หยุดทำงาน, ข้อผิดพลาด MSR ที่ไม่ได้ตรวจสอบ
อัปเดต:28 พฤศจิกายน 2568
ยินดีต้อนรับสู่ภาคล่าสุดของฉันของแปลก คุณใช้ Linux เช่น Ubuntu หรือ Fedora หรืออะไรก็ตาม คุณใช้ผลิตภัณฑ์เสมือนจริงบางประเภท ในกรณีของฉันคือ VirtualBox แต่ปัญหานี้มีผลกับไฮเปอร์ไวเซอร์หลายตัว คุณเริ่มเครื่องเสมือน และตอนนี้เครื่องก็กระตุก ระหว่างทาง ระบบทั้งหมดของคุณ (โฮสต์) จะไม่ตอบสนอง ฉันสังเกตเห็นปัญหานี้ใน VirtualBox 7.X เป็นต้นไป ใน Kubuntu 22.04 เป็นต้นไป
ฉันใช้เวลาแก้ไขปัญหามาก แต่ฉันคิดว่าในที่สุดฉันก็สามารถหาสาเหตุที่แท้จริงได้ เมื่อมันเกิดขึ้น นี่เป็นข้อผิดพลาดแบบสแลชที่ไร้จุดหมายอีกปัญหาหนึ่ง ซึ่งมีสาเหตุมาจากหลายสิ่งหลายอย่างรวมกัน:ข้อบกพร่องของเคอร์เนล การบรรเทาผลกระทบจาก Spectre-family การปะทะกันของโฮสต์-ไฮเปอร์ไวเซอร์ และอื่นๆ อีกมากมาย กล่าวอีกนัยหนึ่งยังเป็นอีกปัญหาหนึ่งที่ควรป้องกันไม่ให้คนทั่วไปใช้เดสก์ท็อป Linux ในลักษณะที่จริงจัง แต่อย่างน้อยก็มีตัวละครตลกๆ เช่นฉันที่พยายามทำให้มันเวิร์ค ดังนั้นหากคุณโปรดลองดูบทช่วยสอนนี้ ตามฉันมา
ปัญหาโดยละเอียดเพิ่มเติม
ง่ายมาก คุณเริ่มเครื่องเสมือนในผลิตภัณฑ์การจำลองเสมือนที่คุณต้องการ เมื่อถึงจุดหนึ่ง เครื่องเสมือนจะไม่ตอบสนอง อาจเป็นเรื่องง่ายๆ เพียงคลิกที่ไอคอนโปรแกรม จากนั้น คุณยังสังเกตเห็นว่าโฮสต์เดสก์ท็อปของคุณทำงานไม่ถูกต้อง มันไม่ตอบสนองต่อการคลิกเมาส์อีกต่อไป หรือบางโปรแกรมไม่ตอบสนองในขณะที่โปรแกรมอื่นทำ บางครั้ง "ปัญหา" สามารถแก้ไขได้เอง และบางครั้งก็ไม่ได้รับการแก้ไข และคุณต้องฮาร์ดบูตเครื่อง น่ารำคาญอย่างยิ่ง
ฉันประสบปัญหานี้มาหลายเดือนแล้ว แน่นอนว่ามันเป็นปัญหาเคอร์เนลอีกประการหนึ่ง น่าจะเป็นพืชที่คล้ายกันและไร้ประโยชน์ซึ่งทำให้ไททันของฉันทำงานผิดปกติมาระยะหนึ่งแล้ว หรือเป็นปัญหาที่ยังคงส่งผลกระทบต่อผู้บริหารของฉัน สำหรับผู้ที่สนใจ ผมได้เชื่อมโยงรายงานฉบับที่สี่และฉบับที่หกตามลำดับ สำหรับแล็ปท็อปทั้งสองเครื่องนี้ มีบทความมากมาย ดังนั้นโปรดตรวจสอบส่วน Linux ของฉัน หากคุณต้องการ (รายงานที่หกและสิบ ไม่น้อยไปกว่านี้)
เหตุใดฉันจึงคิดว่ามันเป็นปัญหาเคอร์เนล เพราะมันเริ่มต้นทันทีในขณะที่ฉันยังใช้ Kubuntu 22.04 และ VirtualBox 7.0 ยังคงดำเนินต่อไปด้วย Kubuntu 24.04 และ VirtualBox 7.1 คุณสามารถพูดได้ว่าผู้ร้ายคือ VirtualBox แต่นั่นไม่ได้อธิบายข้อบกพร่องของเคอร์เนลที่ฉันค้นพบ
กล่าวคือ บันทึกระบบของฉันมีข้อผิดพลาดงี่เง่านี้:
เคอร์เนล:ข้อผิดพลาดการเข้าถึง MSR ที่ไม่ได้ตรวจสอบ:WRMSR ถึง 0xd10 (พยายามเขียน 0x00000000000
0ffff) ที่ rIP:0xffffffff910c6be4 (native_write_msr+0x4/0x40)
เคอร์เนล:ติดตามการโทร:
เคอร์เนล:<งาน>
เคอร์เนล:? show_stack_regs+0x23/0x40
เคอร์เนล:? ex_handler_msr+0x10a/0x180
...
และหากคุณค้นหา "ข้อผิดพลาดในการเข้าถึง MSR ที่ไม่ได้ตรวจสอบ:WRMSR" คุณจะค้นพบเธรดหลายร้อยรายการที่เกี่ยวข้องกับ openSUSE, Fedora, Rocky, Ubuntu, Proxmox และบางส่วน มันเป็นปัญหาเคอร์เนล และปัญหาเกิดขึ้นย้อนกลับไปถึงปี 2019 ซึ่งส่วนใหญ่ยังไม่ได้รับการแก้ไข วันเดอร์บาร์
เนื่องจากคุณจำเป็นต้องเข้าใจโค้ดเบื้องหลังเล็กน้อย โดยสรุป สรุปได้ดังต่อไปนี้:เนื่องจากการบรรเทาต่างๆ ที่เพิ่มให้กับเคอร์เนล (สำหรับการโจมตีช่องทางด้านข้างและอื่นๆ) มีหรืออาจเป็นข้อขัดแย้งระหว่างการกำหนดเวลาเคอร์เนลและการจัดการหลักของคุณ และระบบย่อยใดๆ ที่ทำสิ่งที่คล้ายกัน เช่น พูดไฮเปอร์ไวเซอร์ โดยเฉพาะอย่างยิ่งหากคุณใช้พาราเวอร์ชวลไลเซชันและเพจจิ้งที่ซ้อนกัน สรุปสั้นๆ ก็คือ การบรรเทาผลกระทบอาจรุนแรงเล็กน้อย ซึ่งอาจส่งผลให้ระบบค้างหรือแฮงค์ได้
นอกจากนี้ ข้อสังเกตด้านข้าง การบรรเทาเคอร์เนลทั้งหมดเหล่านี้เกี่ยวข้องกับองค์กร 100% และ 0% เกี่ยวข้องกับการใช้งานที่บ้าน แต่เดสก์ท็อป Linux เป็นเรื่องบังเอิญของโลกเคอร์เนลขององค์กร/องค์กร ดังนั้นคุณซึ่งเป็นผู้ใช้ปลายทางจะต้องประสบปัญหาระดับองค์กรในเครื่องที่บ้านของคุณ
วิธีแก้ปัญหา
คุณสามารถลดอุบัติการณ์ของปัญหานี้ได้สามวิธี
ลดจำนวนคอร์ CPU ที่กำหนดให้กับเครื่องเสมือน
หากคุณกำลังใช้บางอย่าง เช่น 8 ให้ลอง 1-2 หรืออาจจะ 4 ซึ่งจะช่วยได้บ้าง แต่ไม่สามารถแก้ไขปัญหาได้
ปิดใช้งานเพจที่ซ้อนกันสำหรับเครื่องเสมือนที่ได้รับผลกระทบ
สิ่งนี้จะนำไปสู่ประสิทธิภาพการทำงานที่สำคัญ แต่อย่างน้อยเครื่องของคุณก็จะทำงานได้ดี และระบบของคุณจะไม่หยุดทำงาน ตามตัวอย่าง ใน VirtualBox ไปที่ System> Acceleration และที่นี่ ให้ยกเลิกการเลือกช่องที่ระบุว่า Enable Nested Paging
โดยทั่วไป มีหลายตัวเลือกที่คุณสามารถลองใช้ได้ ดูว่าการเรียงสับเปลี่ยนแบบใดได้ผลดีที่สุด:
- โปรเซสเซอร์> คุณสมบัติเพิ่มเติม> เปิดใช้งาน Nested VT-x/AMD-V
- อินเทอร์เฟซ Paravirtualization (ค่าเริ่มต้นของ Linux คือ KVM)
- การจำลองเสมือนของฮาร์ดแวร์> เปิดใช้งานเพจที่ซ้อนกัน
ปิดการใช้งาน paravirtualization (การเพจแบบซ้อน)
ซึ่งสามารถทำได้ผ่าน BIOS/UEFI ซึ่งจะปิดการใช้งานนี้บนเครื่องทั้งหมด หรือคุณสามารถสร้างไฟล์การกำหนดค่าสำหรับไฮเปอร์ไวเซอร์ KVM ซึ่งจะป้องกันการใช้เพจจิ้งที่ซ้อนกันสำหรับเครื่องเสมือนทั้งหมด ภายใต้ /etc/modprobe.d ให้สร้างไฟล์ชื่อ kvm-intel.conf หรือ kvm-amd.conf ตามสถาปัตยกรรมโปรเซสเซอร์ของคุณ ภายในไฟล์นี้ ให้เพิ่ม:
ตัวเลือก kvm-[amd|intel] ซ้อน=0
หลังจากที่คุณโหลดโมดูลเคอร์เนลไฮเปอร์ไวเซอร์ใหม่ (หรือรีบูต) คุณจะได้รับประสบการณ์ที่ปราศจาก MSR อย่างไรก็ตาม ฉันไม่แนะนำให้คุณทำเช่นนี้ เนื่องจากจะทำให้เกิดการลงโทษความเร็วสำหรับปริมาณงานการจำลองเสมือนทั้งหมดของคุณ จะเป็นการดีกว่าและเร็วกว่าหากยกเลิกการเลือกตัวเลือกเพจที่ซ้อนกันสำหรับเครื่องเสมือนแต่ละเครื่องตามต้องการ หรือเปิด/ปิดการใช้งานตัวเลือกตามต้องการ จนกว่าหวังว่าเคอร์เนลแพตช์ที่เหมาะสมจะแก้ไขปัญหานี้ให้ดี
บทสรุป
ไปแล้ว. ปัญหาเล็กๆ น้อยๆ อีกประการหนึ่งที่ทำให้ความมั่นใจของฉันในเดสก์ท็อป Linux หมดไป เมื่อมาถึงจุดนี้การลงโทษที่สะสมก็กลายเป็นเรื่องไร้สาระ เป็นเรื่องดีที่ Linux เป็นแบบแยกส่วนและยืดหยุ่นมาก แต่ทำไมฉันต้องสนใจผู้เช่าแบบแขกที่ "โกง" ในระบบคลาวด์บนเดสก์ท็อปที่เปื้อนเลือดของฉัน ฉันไม่สนใจ และผมคาดหวังว่าบริษัทต่างๆ จะทดสอบเมล็ดพืชของตนในทุกสถานการณ์ ไม่ใช่แค่ในโลกธุรกิจ (หากเป็นเลย) เราทุกคนรู้ดีว่า Linux desktop QA เป็นเรื่องตลก แต่ถ้าเคอร์เนลทำอะไรสักอย่าง ก็ควรมีการทดสอบเพียงเล็กน้อย
ฉันเกลียดปัญหาในลักษณะนี้อย่างยิ่ง พวกเขาไม่ถูกเลือกเป็นเวลา YEARS เป็นปัญหาประเภทปืนลูกซองที่ไม่เกี่ยวข้องกับการใช้ในบ้าน ประเด็นต่างๆ เหล่านี้แสดงถึงการถดถอยอย่างไม่มีจุดหมาย ทำให้การใช้งานในชีวิตประจำวันเป็นเรื่องยาก และเน้นย้ำว่าพื้นที่เดสก์ท็อปมีความซับซ้อนมากเกินไป และโดยพื้นฐานแล้ว มันไม่ใช่พื้นที่เดสก์ท็อป อย่างดีที่สุด คุณกำลังใช้เซิร์ฟเวอร์ไอ้เวรที่มี GUI และสิทธิพิเศษเล็กๆ น้อยๆ ที่ควรเรียกว่าเป็นของใช้ในบ้าน ที่จริงแล้ว ในอีกไม่กี่สัปดาห์ข้างหน้า ผมจะสาธิตสิ่งนี้โดยการประกอบ distro เล็กๆ ของผมเอง ใช่. ตอนนี้ความหยาบนั้นเกิดจากการที่มันไม่ใช่ผลิตภัณฑ์ที่สะดวกสบายสำหรับคนทั่วไปอย่างที่ควรจะเป็น อย่างไรก็ตาม หากระบบของคุณค้างขณะใช้งานการจำลองเสมือน ให้ตรวจสอบบันทึกของคุณและลองวิธีแก้ปัญหาชั่วคราวตามรายการด้านบน จนกว่าปัญหาจะได้รับการแก้ไขซึ่งอาจไม่มีวันเกิดขึ้นได้ ลาก่อน.
ไชโย