การใช้งานหน่วยความจำของ VirtualBox ทำงานอย่างไร


38

ฉันใช้ VM หลายตัวด้วย VirtualBox และการใช้หน่วยความจำที่รายงานจากมุมมองที่หลากหลายและฉันมีปัญหาในการพิจารณาจำนวนหน่วยความจำ VM ที่ฉันใช้งานจริง นี่คือตัวอย่าง:

  • ฉันมี VM ที่ใช้ Windows 7 (เป็น Guest OS) บนเครื่อง windows XP Host ของฉัน
  • เครื่องโฮสต์มี RAM 3 GB
  • Guest VM ได้รับการตั้งค่าให้มีหน่วยความจำพื้นฐาน 1 GB
  • ถ้าฉันเรียกใช้ Task Manger บน Guest OS ฉันเห็นการใช้หน่วยความจำ 430 MB
  • ถ้าฉันเรียกใช้ตัวจัดการงานบนโฮสต์ระบบปฏิบัติการฉันเห็น 3 กระบวนการที่ดูเหมือนว่าเป็นของ VirtualBox:
    1. VirtualBox.exe (1) ใช้หน่วยความจำ 60 MB (อันนี้ดูเหมือนว่าจะมีการใช้งาน CPU มากที่สุด)
    2. VirtualBox.exe (2) ใช้หน่วยความจำ 20 MB
    3. VBoxSvc.exe ใช้หน่วยความจำ 11.5 MB
  • ขณะเรียกใช้ VM การใช้หน่วยความจำของ Host OS นั้นประมาณ 2 GB
  • เมื่อฉันปิด VM, Host OS ของมันก็จะกลับไปใช้หน่วยความจำลงไปประมาณ 900 MB

เห็นได้ชัดว่ามีความแตกต่างอย่างมากที่นี่ ฉันไม่เข้าใจว่า GuestOS สามารถใช้ 400+ MB ได้อย่างไรในขณะที่ Host OS จะแสดงเฉพาะประมาณ 75 MB ที่จัดสรรให้กับ VM มีกระบวนการอื่นที่ใช้โดย VirtualBox ที่ไม่ได้ตั้งชื่ออย่างชัดเจนหรือไม่?

นอกจากนี้ฉันต้องการทราบว่าฉันเรียกใช้เครื่องที่มี 1 GB หรือไม่นั้นจะใช้เวลา 1 GB จากโฮสต์ระบบปฏิบัติการของฉันหรือเฉพาะหน่วยความจำที่เครื่องแขกใช้อยู่ในปัจจุบันหรือไม่

ปรับปรุง:

มีคนแสดงความไม่ไว้วางใจกับหมายเลขการใช้งานหน่วยความจำของฉันและฉันไม่แน่ใจว่าความไม่ไว้วางใจนั้นมาถึงฉันหรือการรายงาน Task Manager ของ Host OS ของฉัน (ซึ่งอาจเป็นผู้ร้าย) แต่สำหรับความสงสัยใด ๆ บนเครื่องโฮสต์:

ตัวจัดการงาน VirtualBox


ฉันสงสัยในสิ่งเดียวกันก่อนหน้านี้ในวันนี้เมื่อใช้ VBox VMs สองเครื่องพร้อมกัน
MartW

ในตัวจัดการงานเปิดคอลัมน์หน่วยความจำอื่นบางส่วน (ดู -> เลือกคอลัมน์ ... ) หน่วยความจำถูกนับในหลายวิธีใน Windows ตัวอย่างเช่น "ขนาดการส่งมอบ" อาจสูงกว่า "การใช้หน่วยความจำ" เป็นอย่างมาก ตรงไหนที่จะใช้และวิธีการตีความพวกเขาเป็นเรื่องที่แตกต่าง
lilbyrdie

สำเนาซ้ำที่เป็นไปได้: superuser.com/q/17266/302
Rowland Shaw

คำตอบ:


12

สถานที่เดียวในตัวจัดการงานที่ดูเหมือนว่าจะแสดงยอดเต็มอยู่บนแท็บประสิทธิภาพ - ค่า Commit Charge รวมคร่าวๆตามจำนวนที่จัดสรรให้กับ VM ฉันเพิ่งปิดหนึ่งเครื่องที่มีการจัดสรร 1536MB และค่าการส่งมอบลดลงจากประมาณ 2.4GB เป็น 0.8GB คุณสามารถตรวจสอบได้ในระดับหนึ่งเมื่อเทียบกับ Virtual Box โดยใช้ Performance Monitor และเลือก Process: Private Bytes counters สำหรับ VirtualBox, VBoxSvc และ VirtualBox # 1, # 2, ฯลฯ (หนึ่งรายการสำหรับ VM ที่ใช้งานแต่ละเครื่อง) นอกจากนี้ยังมีหน่วยความจำ: ไบต์ที่กำหนดไว้สำหรับทุกสิ่ง


OP ดูเหมือนจะไม่สนใจสิ่งที่ถูกจัดสรรเป็นพิเศษ แต่กำลังถามเกี่ยวกับสิ่งที่ถูกใช้ ดังนั้นฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับคำถามของเขาอย่างไร
David Schwartz

12

เพื่อให้เข้าใจถึงสถาปัตยกรรมกระบวนการของ VirtualBox โปรดดู
ที่สถาปัตยกรรม VirtualBox :

เมื่อคุณเริ่มเครื่องเสมือน (VM) จาก GUI คุณจะมีสองหน้าต่าง (หน้าต่างหลักและ VM) แต่มีสามกระบวนการที่ทำงานอยู่ ดูที่ระบบของคุณจากตัวจัดการงาน (บน Windows) หรือการตรวจสอบระบบ (บน Linux) คุณจะเห็นสิ่งเหล่านี้:

  1. VirtualBox, GUI สำหรับหน้าต่างหลัก;
  2. กระบวนการ VirtualBox อื่นที่เริ่มต้นด้วยพารามิเตอร์ -startvm ซึ่งหมายความว่ากระบวนการ GUI ของมันทำหน้าที่เป็นเชลล์สำหรับ VM
  3. VBoxSVC บริการดังกล่าวข้างต้นซึ่งทำงานในพื้นหลังเพื่อติดตามกระบวนการทั้งหมดที่เกี่ยวข้อง สิ่งนี้เริ่มต้นโดยอัตโนมัติโดยกระบวนการ GUI แรก

เกี่ยวกับหน่วยความจำคู่มือผู้ใช้ระบุ:

หน่วยความจำฐาน

นี่เป็นการตั้งค่าจำนวน RAM ที่จัดสรรและกำหนดให้กับ VM เมื่อมันกำลังทำงาน จำนวนหน่วยความจำที่ระบุจะถูกร้องขอจากระบบปฏิบัติการโฮสต์ดังนั้นจึงต้องพร้อมใช้งานหรือทำให้พร้อมใช้งานเป็นหน่วยความจำว่างบนโฮสต์เมื่อพยายามเริ่มต้น VM และจะไม่สามารถใช้ได้กับโฮสต์ในขณะที่ VM กำลังทำงาน การตั้งค่านี้เป็นการตั้งค่าเดียวกับที่ระบุไว้ในตัวช่วยสร้าง "เครื่องเสมือนใหม่" ตามที่อธิบายไว้ในแนวทางภายใต้หัวข้อที่เรียกว่า "การสร้างเครื่องเสมือน" ด้านบน

ซึ่งหมายความว่าแขกจะออกจากโฮสต์:

  • หน่วยความจำมากที่สุดเท่าที่มันถูกประกาศด้วย
  • VM แต่ละตัวยังสามารถใช้งาน VirtualBox ได้ดังนั้นคุณต้องเพิ่มหน่วยความจำ

เป็นไปได้เสมอว่าคู่มือ VirtualBox นั้นมีหลายเวอร์ชันอยู่เบื้องหลังและเทคนิคการปรับแต่งหน่วยความจำล่าสุดนั้นไม่ได้จัดทำเป็นเอกสาร

นอกจากนี้ VirtualBox อาจเพิ่มประสิทธิภาพการใช้หน่วยความจำโดยไม่จัดสรรหน่วยความจำ VM ที่กำหนดทั้งหมด

การจัดสรรหน่วยความจำตามความจำเป็นเป็นการปรับให้เหมาะสมที่สามารถบันทึกจำนวนมากบนหน่วยความจำกายภาพ แต่กระบวนการที่ใช้หน่วยความจำมากใน VM อาจช้าลงโดยความต้องการบ่อยครั้งโดย VirtualBox เพื่อขอหน่วยความจำโฮสต์เพิ่มเติม


8
ไม่ใช่ VirtualBox เฉพาะ - ดูสิ่งนี้: serverfault.com/questions/19935/…
MartW

@harrymc ดังนั้นสิ่งที่คุณกำลังพูดคือตัวจัดการงานไม่แสดงในรายการกระบวนการจำนวนหน่วยความจำเสมือนกล่องที่ใช้?
เทรเวอร์บอยด์สมิ ธ

@TrevorBoydSmith: ทั้งหมดที่ฉันพูดคือมีกระบวนการมากกว่าหนึ่งกระบวนการที่เกี่ยวข้องและเลือกคอลัมน์ในตัวจัดการงานอย่างถูกต้อง
harrymc

2
vm ของฉันใช้เวลา 1.2 GB ในตัวจัดการงานจะแสดงเฉพาะ 60MB ดังนั้นฉันจะอ้างว่าตัวจัดการงานไม่แสดงหน่วยความจำทั้งหมดที่ vm ของฉันใช้ นอกจากว่าคุณจะแสดงวิธีปรับแต่งตัวจัดการงานเพื่อแสดง 1.2gb ได้
เทรเวอร์บอยด์สมิ ธ

1
การสนทนาทั้งหมดนี้และคำตอบทั้งหมดเป็นเพียงรูปแบบที่สับสนระหว่างหน่วยความจำเสมือนและหน่วยความจำกายภาพ
David Schwartz

5

นี่เป็นปัญหาของ Windows ดูโพสต์ที่สามที่นี่: http://forum.sysinternals.com/pe-is-not-showing-all-memory-used-by-virtualbox_topic23886.html

การใช้โปรแกรมอย่าง VMMap แสดงให้เห็นว่าหน่วยความจำที่คุณบอกให้ใช้ VBox นั้นใช้งานจริง ไม่ทราบว่าทำไมตัวจัดการงานหรือผู้ตรวจสอบกระบวนการจึงมองไม่เห็น


2

รายการเหล่านั้นที่คุณเห็นใน TaskManager ไม่ได้สำหรับเครื่องเสมือนของคุณ แต่สำหรับ VirtualBox GUI แท็บประสิทธิภาพจะแสดงให้คุณเห็นอย่างชัดเจนว่ามีการใช้หน่วยความจำทั้งหมดเท่าใด แต่จะไม่มีความละเอียดมากนักเกี่ยวกับกระบวนการ โดยส่วนตัวฉันต้องการเห็น VBox ใช้สิ่งที่ต้องการเท่านั้น แต่ยอมรับว่ามันสำคัญสำหรับมันที่จะสามารถใช้งานได้ตามที่คาดไว้ดังนั้นการฟันดาบ


1

อาจเกี่ยวข้องกับการเพิ่มแขก VirtualBox

การติดตั้ง Ubuntu ของฉันกำลังใช้งาน ~ 20MB ตามรายงานของ WinXP นี่คือกับ VBoxAdditions

การติดตั้ง Lubuntu ของฉันกำลังใช้งาน ~ 90MB ตามที่รายงานโดย WinXP เพิ่งติดตั้งมัน ไม่มีการติดตั้ง VBoxAdditions

การใช้หน่วยความจำจะแตกต่างกันไปตามสิ่งที่ VM กำลังทำอยู่ ฉันมี Ubuntu ติดตั้งแล้วทำงาน ziproxy; เมื่อฉันทำบางสิ่งบางอย่างที่พูดถึง ziproxy การใช้หน่วยความจำจะเพิ่มขึ้นสองสามเมกะไบต์เมื่อ VM ใช้งาน

โดยทั่วไปแล้วการทำเวอร์ชวลไลเซชันนั้นสูงพอที่รายละเอียดที่ชัดเจนสำหรับแขกไม่จำเป็นต้องได้รับการจัดสรรทั้งหมดจากโฮสต์ ดูเหมือนว่าจะใช้การจัดสรรแบบไดนามิกและการเพจที่แข็งแกร่ง


1

เห็นได้ชัดว่ามีความแตกต่างอย่างมากที่นี่ ฉันไม่เข้าใจว่า GuestOS สามารถใช้ 400+ MB ได้อย่างไรในขณะที่ Host OS จะแสดงเฉพาะประมาณ 75 MB ที่จัดสรรให้กับ VM มีกระบวนการอื่นที่ใช้โดย VirtualBox ที่ไม่ได้ตั้งชื่ออย่างชัดเจนหรือไม่?

คุณกำลังมองหาสิ่งที่จะถูกนำมาใช้ในพื้นที่ที่ไม่ได้สิ่งที่จะถูกจัดสรร แขกไม่ได้ใช้ RAM ของโฮสต์ 400+ MB (ยัง)

นอกจากนี้ฉันต้องการทราบว่าฉันเรียกใช้เครื่องที่มี 1 GB หรือไม่นั้นจะใช้เวลา 1 GB จากโฮสต์ระบบปฏิบัติการของฉันหรือเฉพาะหน่วยความจำที่เครื่องแขกใช้อยู่ในปัจจุบันหรือไม่

มันจะจอง RAM 1GB แต่มันอาจจะจบลงจริง ๆ แล้วใช้น้อยกว่านั้น หากแขกไม่ได้ใช้หน่วยความจำบางส่วนนั้นโฮสต์ RAM สามารถใช้เพื่อวัตถุประสงค์อื่น ๆ ได้หลายอย่าง (เช่นการแคชหน้าดิสก์แบบคลีน) แม้ว่าจะสงวนไว้สำหรับแขกก็ตาม และแม้ว่าแขกจะใช้หน่วยความจำนั้นบางส่วนหากไม่สามารถเข้าถึงได้นานพอก็ยังสามารถกดออกจากหน่วยความจำกายภาพผ่านการแลกเปลี่ยนแบบฉวยโอกาส

น่าเสียดายที่คุณได้ลุยเข้าไปในปัญหาที่ซับซ้อนอย่างยิ่งและอาจต้องใช้หลาย ๆ หน้าในการอธิบาย มีข้อมูลที่ไม่ถูกต้องจำนวนมากในคำตอบของคำถามนี้


0

คุณสามารถดูได้โดยใช้แอปพลิเคชันที่ยอดเยี่ยมของ SysInternals VMMap :

  1. ขั้นแรกคุณต้องค้นหากระบวนการที่ถูกต้องดังนั้นให้เริ่มต้นตัวอย่างเช่นProcess HackerหรือSysInternals 'Process Explorer
  2. แสดงรายการกระบวนการเป็นแผนผัง
  3. ค้นหากระบวนการVBoxSVC.exeนั้นควรมีกระบวนการลูกหลายกระบวนการVBoxHeadless.exeถ้า VM กำลังทำงานอยู่
  4. หาก VMs หลายตัวกำลังทำงานอยู่จะมีหลายสาขาของVBoxHeadless.exeกระบวนการเลือกสาขาที่ถูกต้องโดยการตรวจสอบบรรทัดคำสั่งของกระบวนการมันมีตัวระบุของ VM ของคุณ
  5. คุณสนใจที่ต่ำที่สุดVBoxHeadless.exeในสาขา (เช่นมันไม่มีลูกอีกแล้วเพียงแค่ผู้ปกครองดังนั้นจึงเป็นใบไม้) จำ PID ของมัน
  6. เริ่ม VMMap
  7. เลือกVBoxHeadless.exeกระบวนการที่เหมาะสมด้วย PID และคลิกตกลง

ในกรณีของฉันทั้งหมดรายงานไบต์เอกชน , การทำงานชุดและมุ่งมั่นที่หน่วยความจำโดย VMMap เกือบตรงกับจำนวนหน่วยความจำที่กำหนดให้กับ VM ใน VirtualBox

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.